:nth-last-child偽類基本上和:nth-child偽類的作用相同,但是它從最后一個元素開始算。
使用上面的一個例子來看看:
ul li:nth-child(-n+4) { color: green; }
不是匹配最前面的四個li元素,該選擇器匹配最后面的四個元素。
你同樣可以使用“even” 或“odd”只,同樣與nth-child不同的是,這是從最后面的元素開始算的:
ul li:nth-last-child(odd) { color: grey; }
:nth-of-type偽類和:nth-child也很像,不同的是它只計算選擇器中指定的那個元素。
這對定位元素中包含大量不同的元素的情況會很有用。比如,我們想控制一個文本塊中的每隔一個段落,但是我們又想要無視其它元素比如圖片和引用塊:
p:nth-of-type(even) { color: blue; }
你也可以使用一些值,就像在:nth-child中使用的一樣。
你能猜到它吧?!:nth-last-of-type 偽類可以像前面提到的:nth-last-child一樣使用,但是這次,它將之匹配你在選擇器中指定的元素類型:
ul li:nth-last-of-type(-n+4) { color: green; }
我們可以更加的聰明一些,在一個大的塊級選擇器中結合多種這樣的偽類。比如我們想讓文章中的所有的圖片左浮動,除了第一個和最后一個(我們可以假設他們是滿寬的,無須浮動):
.post img:nth-of-type(n+2):nth-last-of-type(n+2) { float: left; }
所以在這個選擇器的第一部分,我們從第二個圖片開始定位每一個圖片。在第二部分中,我們定位所有的圖片,除了最后一個。因為這兩個選擇器并非互斥的,我們可以同時使用它們,這樣就可以一下子排除第一個和最后一個元素!
:last-child偽類的作用類似于:first-child 偽類,但是會定位父級元素的最后一個子元素。
讓我們假設你不想讓你的日志的div的最后一個段落也有一個底部邊距:
.post > p:last-child { margin-bottom: 0; }
該選擇器將定位class為”post”的元素的最后一個直接子級段落。
:first-of-type 偽類用于定位一個父級元素下的第一個同類子元素。
比如,你可以定位某個特定的div的第一個子級段落(p),并讓其第一行字母大寫:
.post > p:first-of-type:first-line { font-variant: small-caps; }
在這個選擇器中,你可以確定你是在只定位class為”post”的元素的直接子級p元素,而且還是匹配第一個子級p元素。
:last-of-type偽類與此類似,只是匹配最后一個子元素。
nly-child偽類表示一個元素是它的父級元素的唯一一個子元素。
比如說,你有一些盒子(“news”),里面有一些文字段落,當你有多于一個段落的時候,你想讓文字比只有一個段落的時候小一些:
div.news > p { font-size: 1.2em; } div.news > p:only-child { font-size: 1.5em; }
第一個選擇器中,我們定義”news”div的所有子級p元素的字體大小。在第二個中,我們覆蓋之前的字體大小,如果該p元素是“news” div的唯一子元素的時候,它的字體大小會比較大一些。
nly-of-type偽類表示一個元素是它的父級元素的唯一一個相同類型的子元素。
這有用什么用?假設你有一些日志,每一篇都有個class為”post”的div,他們中的一些有多于一張圖片,但是有些可能就只有一張圖片。你想讓后者中的圖片水平居中,而在其它的有多于一張圖片的日志中,就將它左浮動。這個需求用這個選擇器就很容易實現:
.post > img { float: left; } .post > img:only-of-type { float: none; margin: auto; }
:empty偽類表示一個元素里面沒有任何內容。
這個選擇器可以用很多種用途。比如,你在你的“sidebar”中有若干個盒子,但是不想讓空盒子顯示出來:
#sidebar .box:empty { display: none; }
注意,就算”box”div里面只有一個空格,它也不會被css當作空標簽的,這樣就不能匹配該選擇器了。
Internet Explorer (直到8.0版本)都不支持結構偽類。Firefox、Safari 和Opera 在其最新版本的瀏覽器中指出這些選擇器。這意味著,使用這些選擇器對網站的可用性和可訪問性是很有用的,或者如果網站的用戶中的大部分是使用IE而且你不想在某些細節上無視他們,最好還是保持使用通用的class和簡單的選擇器來迎合這些選擇器。否則你會被搞瘋的!