css3選擇器是在css2.0的基礎(chǔ)上的修改創(chuàng)新。他增加了一些UI元素狀態(tài)偽類選擇器、結(jié)構(gòu)偽類選擇器、屬性選擇器等。Css3新增的這些選擇器很多強(qiáng)大,他的出現(xiàn)給我們前端帶來了好多便利。
一、使我們的網(wǎng)頁(yè)代碼更簡(jiǎn)潔、結(jié)構(gòu)更加清晰,結(jié)構(gòu)清晰就會(huì)有利于SEO(搜索引擎)的優(yōu)化,代碼簡(jiǎn)潔說明代碼會(huì)少,代碼少文件就會(huì)小,占用的網(wǎng)絡(luò)帶寬就會(huì)少,那么網(wǎng)頁(yè)的加載速度就會(huì)快,用戶體驗(yàn)度就會(huì)更好。例如::first-child是用來選擇某個(gè)元素的第一個(gè)子元素,比如你想讓列表中的"1"具有與眾不同的樣式,我們就可以使用:first-child來實(shí)現(xiàn):
li:first-child {background: #ff0;}
在沒有這個(gè)選擇器出現(xiàn)之前,我們都需在要第一個(gè)li上加上一個(gè)不同的class名,比如說“first”,然后在給他應(yīng)用不同的樣式
li.first {background: #ff0;}
其實(shí)這兩種最終效果是一樣的,只是后面這種,我們需要在html增加一個(gè)額外的class名,前一種就不需要如圖所示:
二、免除起名的煩惱,之前我們用css2.0寫一個(gè)網(wǎng)站需要給標(biāo)簽添加id或class名稱去區(qū)分不同的標(biāo)簽,id或class名稱的起名要求是:以英文字母開頭,后面可以連接數(shù)字、字母、下劃線、連字符和特殊字符,建議盡量使用英文字母,適當(dāng)使用下劃線和連接線;詞必達(dá)意,名稱要反映用途和相關(guān)信息,同時(shí)也要簡(jiǎn)短。這一要求對(duì)于我們大多數(shù)不是英語(yǔ)專業(yè)、英語(yǔ)又不好的來說就比較困難。如果起的名字不是很規(guī)范那么就容易叫人覺得你不夠?qū)I(yè)。而不專業(yè)的起名也會(huì)給后期的開發(fā)維護(hù)帶來一些不必要的麻煩,css3新增的結(jié)構(gòu)偽類選擇器的出現(xiàn)給我們帶來了福利,我們不需要添加class或id名稱,也能輕松控制某一個(gè)標(biāo)簽,例如::nth-child()可以選擇某個(gè)的一個(gè)或多個(gè)特定的子元素,你可以按以下的方式進(jìn)行選擇:
:nth-child(length);/*參數(shù)是具體數(shù)字*/
:nth-child(n);/*參數(shù)是n,n從0開始計(jì)算*/
:nth-child(n*length)/*n的倍數(shù)選擇,n從0開始算*/
:nth-child(n+length);/*選擇大于length后面的元素*/
:nth-child(n*length+1);/*表示隔幾選一*/
//上面length為整數(shù)
:nth-child()可以定義他的值(值可以是整數(shù),也可以是表達(dá)式),如上面所示,用來選擇特定的子元素,例如:nth-child(3),選擇某元素下的第三個(gè)子元素,(這里的3可以是你自己需要的數(shù)字),比如說,我需要選擇列表中的第三個(gè)li元素,那么我們可以直接這樣使用:
li:nth-child(3) { background: #f00; }
:nth-child(n),其中n是一個(gè)簡(jiǎn)單的表達(dá)式,那么"n"取值是從“0”開始計(jì)算的,到什么時(shí)候結(jié)束我也不知道,如果你在實(shí)際應(yīng)用中直接這樣使用的話,將會(huì)選中所有子元素,比如說,在我們的demo中,你在li中使用":nth-child(n)",那么將選中所有的"li",如:
li:nth-child(n) {background: #ff0;} 等于li {background:#ff0;}
他其實(shí)是這樣計(jì)算的
n=0 --》 沒有選擇元素
n=1 --》 選擇第一個(gè)li,
n=2 --》 選擇第二個(gè)li,后在的依此類推,這樣下來就選中了所有的li
請(qǐng)看效果:
請(qǐng)注意了,這里的“n”只能是"n",不能使用其他字母代替,不然會(huì)沒有任何效果的。
不需要起名字了,對(duì)于我們前端人員來說我們就不需要去費(fèi)勁心思去想各種名字,也不需要考慮是否符合命名規(guī)范,是否有利于SEO的優(yōu)化等問題。更不需要考慮自己英文水平的問題。
三、避免樣式?jīng)_突問題,提高工作效率。之前我們用id或class名稱時(shí)經(jīng)常會(huì)發(fā)生沖突,比如你習(xí)慣給最上面的div起名為top,那么你的同事可能沒看你的文檔,他也習(xí)慣性的起了一個(gè)top的名稱,那么他的樣式寫在了后邊,你的樣式在前邊就會(huì)被他的樣式覆蓋,因?yàn)槲覀兊腸ss樣式表的解析順序是叢前向后生效的。這時(shí)候當(dāng)你發(fā)現(xiàn)你寫好的樣式不對(duì)了,你就需要花費(fèi)時(shí)間去調(diào)整,這樣由于沖突造成的工作時(shí)間的浪費(fèi)會(huì)影響我們的工作效率。不需要起名字,就不會(huì)出現(xiàn)沖突,那么工作效率自然就能提高。
雖然現(xiàn)在還有好多瀏覽器不支持css3選擇器,例如ie6~8,但是隨著時(shí)間的發(fā)展,ie瀏覽器的緩慢日落,css3的到來是將來發(fā)展的必然趨勢(shì),因此我們還是需要熟悉與理解css3新增的各個(gè)選擇器,做好準(zhǔn)備迎接css3時(shí)代的到來。