标签选择器:使用标签,例如<p>标签,表示选中所有的<p>标签
p{ color:red; }
**类选择器:**使用该标签会选中所有带有class标记的元素
.tag{ color:red; }
<p class="tag"> 示例1 </p> <p class="tag"> 示例2 </p>
**id选择器:**只能有一个唯一的id,选中指定的id
#tag{ color:red; }
<p id="tag"> 示例1 </p> <p class="tag"> 示例2 </p>
**后代选择器:**选择后代的所有元素
body p{ color:red; }
<body> <p> <ul> <li>示例1</li> <li>示例2</li> <li>示例3</li> </ul> </p> <p> <ul> <li><p>示例4</p></li> </ul> </p> <p>示例5</p> </body>
示例4和示例5会变成红色,而被<p>标签包裹的无序列表不会变红色
**子代选择器:**只选择后代中的第一代
body>p{ color:red; }
<body> <p> <ul> <li>示例1</li> <li>示例2</li> <li>示例3</li> </ul> </p> <p> <ul> <li><p>示例4</p></li> </ul> </p> <p>示例5</p> <p>示例6</p> </body>
示例5和示例6都会变红色,因为他们是body的第一代
**相邻兄弟选择器:**只选择同辈相邻的一个兄弟,而且是在选择元素后面的兄弟,不会选择前面的兄弟
.tag + p{ color: red; }
<body> <p class="tag"> <ul> <li>示例1</li> <li>示例2</li> <li>示例3</li> </ul> </p> <p>弟弟</p> <p> <ul> <li><p>示例4</p></li> </ul> </p> <p class="tag">示例5</p> <p>示例6</p> </body>
示例6会变红色,但是弟弟不会变红色,因为弟弟不在tag标记的相邻位置
**通用选择器:**选择后面所有的兄弟,但是不选择前面的兄弟
.tag ~ p{ color: red; }
<body> <p class="tag"> <ul> <li>示例1</li> <li>示例2</li> <li>示例3</li> </ul> </p> <p>二哥</p> <p>弟弟</p> <p> <ul> <li><p>示例4</p></li> </ul> </p> <p>示例5</p> <p>示例6</p> </body>
二哥、弟弟、示例5、示例6都变红,因为他们都是同一辈下的兄弟
ul li:first-child{
background: red;
}
在ul的所有后代li中选择第一个孩子
p:nth-child(1){
background: red;
}
在p的父级中,所有的后代的第一个后代是p的话被选中,但是在所有后代中,其他不是p的也会被算在其中,就是说,在后代中第一个不是p,第二个是p,就不会选中p
p:nth-of-type(1){
background: blue;
}
在p的父级中,所有的p后代中第一个后代被选中,即使后代中有不同的标签,用type就不会算其他的标签,只算p的第一个
标签名+[属性]{样式}
例如:a[id]{ color:red;},在所有a标签中,带有id属性的,都会选中;
a[id=tag]{color:red;},在所有a标签中,带有id属性且等于tag的,会被选中;tag不用加双引号。
a[class=“tag”]{color:red},在所有a标签中,带有class属性且等于tag的,都会被选中;tag要加双引号。
进行判断时:
= 是绝对等于,必须全部都相同;
*= 是包含等于,只要有一部分相同就可以;
^= 是以这个开头的都可以;
$= 是以这个结尾的都可以;