CSS后代选择器

nth-child nth-of-type

by xu xiaofei

HTML

<body>
    <div class='main'>
	
        <ul class='nav'>
            <div>home</div>
            <li>nav1</li>
            <li>nav2</li>
            <li>nav3</li>
            <li>nav4</li>
            <li>nav5</li>
            <p>login</p>
        </ul>
		
        <ul class='sidebar'>
            <li>sidebar1</li>
            <li>sidebar2</li>
            <li>sidebar3</li>
            <li>sidebar4</li>
            <li>sidebar5</li>
        </ul>
		
		<ul>
            <p>only p</p>
        </ul>
    </div>
</body>

CSS

/* 涉及到type的索引、first、last、only,都是按照该元素类型的顺序来定位
   无type的child选择则以全部子元素的顺序来定位
   
*/


/* nth-child(an+b)选择父元素下、第an+b个且为li的子元素 ,因此nav2和nav4的background为红色*/

.nav li:nth-child(2n+1) {
    height: 100px;
    background: -webkit-linear-gradient(right, red, white);
}


/* nth-of-type(an+b)选择父元素的li元素中,第an+b个li元素,
与nth-child的区别在于type的索引值只考虑此类型元素,不考虑其它元素
nth-child则按照全部元素来索引*/

ul li:nth-of-type(2n+1) {
    background: tomato;
}

.sidebar li:nth-child(2n+1) {
    color: #fff;
}

ul li:first-of-type {}


/* nav5的父元素的最后一个子元素不是li,所以nav5的border不是绿色 
	sidebar5的父元素的最后一个子元素是li,所以sidebar的border是绿色
*/

ul li:last-child {
    border: 1px solid green;
}

ul p:only-of-type {
    color: yellow;
}


/* login的父元素并非只有p一个子元素,因此login的background不为黑色 */

ul p:only-child {
    background: #aaa;
}