ID选择器
ID 选择器可以为标有特定 ID 的 HTML 元素指定特定的样式。 根据元素ID来选择元素,具有唯一性,这意味着同一id在同一文档页面中只能出现一次,例如,你将一个元素的id取值为”navi”,那么在同一页面你就不能再将其他元素id取名为”navi”了。尽管你会发现即便你把几个元素都命名成相同的id名字,css选择器还是会把这些元素都选中应用样式(如class选择器那样),对于css选择器,id属性的唯一性似乎不存在。然而,对于js而言,它只会选择具有相同id名字元素中的第一个。出于一个好的编程习惯,同一个id不要在页面中出现第二次。
前面以”#”号来标志,在样式里面可以这样定义:
#demoDiv{
color:#FF0000;
}
这里代表id为demoDiv的元素的设置它的字体颜色为红色。
我们在页面上定义一个元素把它的ID定义为demoDiv,如:
<div id="demoDiv">
这个区域字体颜色为红色
</div>
用浏览器浏览,我们可以看到因为区域内的颜色变成了红色
再定义一个区域
<div>
这个区域没有定义颜色
</div>
用浏览器浏览,与预期的一样,区域没有应用样式,所以区域中的字体颜色还是默认的颜色黑色。
后代选择器
后代选择器也称为包含选择器,用来选择特定元素或元素组的后代,将对父元素的选择放在前面,对子元素的选择放在后面,中间加一个空格分开。后代选择器中的元素不仅仅只能有两个,对于多层祖先后代关系,可以有多个空格加以分开,如id为a、b、c的三个元素,则后代选择器可以写成#a #b #c{}的形式,只要对祖先元素的选择在后代元素之前、中间以空格分开即可。
如:
<style>
.father.child{
color:#0000CC;
}
</style>
<p class="father">
黑色
<label class="child">蓝色
<b>也是蓝色</b>
</label>
</p>
这里我们定义了所有class属性为father的元素下面的class属性为child的颜色为蓝色。后代选择器是一种很有用的选择器,使用后代选择器可以更加精确的定位元素。
子选择器
请注意这个选择器与后代选择器的区别,子选择器(child selector)仅是指它的直接后代,或者你可以理解为作用于子元素的第一个后代。而后代选择器是作用于所有子后代元素。后代选择器通过空格来进行选择,而子选择器是通过“>”进行选择,我们看下面的代码:
Example Source Code
CSS:
#links a {color:red;}
#links > a {color:blue;}
HTML:
<p id="links">
<a href="#">Div+CSS教程</a>>
<span><a href="#">CSS布局实例</a></span>
<span><a href="#">CSS2.0教程</a></span>
</p>
我们将会看到第一个链接元素“Div+CSS教程”会显示成蓝色,而其它两个元素会显示成红色。当然,或许你的浏览器并不支持这样的CSS选择符。我们在一开始也强调了不太兼容的现状。
子选择器(>)和后代选择器(空格)的区别:都表示“祖先-后代”的关系,但是>必须是“爸爸>儿子”,而空格不仅可以是“爸爸儿子”,还能是“爷爷儿”、“太爷爷儿子”。
结构性伪类选择器
HTML CODE:
1.<div class="box">
2. <span>First span</span>
3. <p class="ft">First p</p>
4. <div>First div<strong class="ft">Strong text</strong></div>
5. <p class="ft">Second p</p>
6. <div class="ft">Second div <span>Second span</span><span>Third span</span></div>
7.</div>
结构性伪类选择器的冒号前边可以跟一个其他选择器做为限定;
带括号的选择器,里面一定要有参数;
匹配子元素,同时也会匹配孙子元素,因为子元素是孙子元素的父元素;
下面的 !lte8是指IE8一下浏览器不支持,包括IE8也不支持
:first-of-type,选择相对父元素里同类型子元素中的第一个,!lte8
.box :first-of-type {color: #f00}
//匹配2.3.4以及4里面的strong和6里面的第一个span,因为这个span是6里的第一个span子元素
.box .ft:first-of-type {color: #ff0}
//匹配3和4里面的strong,因为3是box里面的第一个p且class=”ft”,而4里只有一个strong且class=”ft”,而5和6虽然class=”ft”但是他们相对于box的同类型中不是第一个出现的;
:last-of-type,选择相对父元素里同类型子元素中的最后一个,!lte8
.box :last-of-type {color: #f00}
//匹配2.5.6以及4里的strong和6里的最后一个span
:only-of-type,选择相对父元素里同类型子元素中只有一个的元素,!lte8
.box :only-of-type {color: #f00}
//匹配2以及4里的strong,类为box里同类型元素只有一个的只有span
.box .ft:only-of-type {color: #f00}
//只匹配4里的strong
:only-child,选择的元素相对于其父元素是唯一的子元素,!lte8
.box :only-child {color: #f00}
//只匹配4里的strong
:nth-child(n),选择其父元素的第n个子元素或多个子元素,索引从1开始,当n用于表达式时索引从0开始!lte8
.box :nth-child(3) {color: #f00}
//匹配第三个子元素即这里的4
.box :nth-child(odd) {color: #f00} 等价于 .box :nth-child(2n + 1) {color: #f00}
//匹配奇数即这里的2.4.6以及4里的strong和6里的第一个span
.box :nth-child(even) {color: #f00} 等价于 .box :nth-child(2n + 2) {color: #f00}和.box :nth-child(2n)
//匹配偶数即这里的3.5以及6里的第二个span
.box :nth-child(n + 1) {color: #f00}
//匹配 n + 1开始的所有子元素即.box里所有的子元素以及子孙元素,因为这里n是从1开始的即:
n = 0 ----> n + 1 = 0 + 1 = 1,即这里的2
n = 1 ----> n + 1 = 1 + 1 = 2,即这里的3
... ...
n = 4 ----> n + 1 = 4 + 1 = 5,即这里的6
:nth-last-child(n),跟:nth-child(n)使用类似,只是索引是从最后开始往前数,!lte8
.box :nth-last-child(3) {color: #f00}
//匹配倒数第三个子元素即这里的4
:nth-of-type(n),选择父元素的第n个或多个同类型的子元素,!lte8
.box :nth-of-type(2) {color: #f00}
//匹配5和6以及6里面的第二个span
:nth-last-of-type(n),同上,只是从最后开始往前数,!lte8
.box :nth-last-of-type(2) {color: #f00}
//匹配3和4以及6里面的第一个span
:first-child,选择父元素里的第一个子元素,!ie6
.box :first-child {color: #f00}
//匹配2和4里的strong以及6里的第一个span
:last-child,选择父元素里的最后一个子元素,!lte8
.box :last-child {color: #f00}
//匹配6和6里的最后一个span以及4里的strong
:root,选择文档的根元素,在HTML中就是指<html>标签,!lte8
:empty,选择没有任何内容的元素,那怕是有一个空格也不行,!lte8
table td:empty {background-color: #ffc}
//匹配表格里没有内容的td
:target,选择当前活动的元素,指锚点点击后跳转到的那一个元素,!lte8
:not(selector),选择排除selector以外的其他所有元素,!lte8
.box *:not(div) {background-color: #ffc}
//选择box里除div以外的所有后代元素,如果div里有其他非div元素,也会选择上,如上的HTML CODE就会选择上div里面的span和strong。
注意事项
由于对CSS的解释是自上而下的,对于一个元素的相同属性描述,放在下面的会覆盖掉位于上面的属性描述,因此我们在对元素的选择中一定要注意书写顺序,如:
a:visited {color: #00FF00; text-decoration: none}
a:hover {color: #FF00FF; text-decoration: underline}
采用这样的书写顺序,无论链接有没有被访问过,只要当鼠标移到链接上,链接都会变成蓝色并有下划线。但是,如果采用下面的书写顺序:
a:hover {color: #FF00FF; text-decoration: underline}
a:visited {color: #00FF00; text-decoration: none}
如果链接被访问过,则当你鼠标移到链接上时不会变成蓝色并有下划线,依然保持绿色。