Web开发技术:HTML、CSS、JavaScript
上QQ阅读APP看书,第一时间看更新

5.2 CSS选择器

CSS选择器是指CSS选择要修饰的元素,对指定元素进行修饰美化。简单的选择器可以对给定类型的所有元素进行格式化,复杂一些的选择器可以根据元素的上下文、状态等来应用样式。

5.2.1 通用选择器

写法:*{}。

作用:选中页面中的所有标签,一般用于定义最通用的属性,设置默认值。

优先级:最低,低于所有选择器。

代码示例如下:

5.2.2 标签选择器

写法:HTML标签名{样式属性:样式属性值;……}。

作用:选中页面中所有的对应标签,当需要对某类标签进行统一设置样式时采用。

优先级:高于通用选择器。

代码示例如下:

代码含义:选择所有<div>标签,并给标签设置宽度、高度、背景色等样式属性,当页面包含有多个<div>标签时,都会被选中。

5.2.3 类选择器

写法:.类名称{}。

调用:在需要改变样式的标签上,使用class="选择器名称"调用对应选择器。

作用:修改所有调用选择器的标签。

优先级:高于标签选择器。

代码示例如下:

代码含义:选择类名称为first的标签,并给标签设置宽度、字体颜色等样式属性。

注意事项如下:

1)类名称是可以随意取名的,但通用做法是只能包含字母、数字、下画线,并且不以数字开头,否则可能会产生样式不能应用的问题。

2)类名称应该能表示一定意义,不能起毫无意义的名字,如a。

3)当页面需要对多个元素应用相同样式,则采用类选择器。

4)类选择器可以应用不同标签。

5.2.4 id选择器

写法:#id名称{}。

作用:在需要改变样式的标签上,使用id="选择器名称"调用对应选择器。

优先级:大于类选择器。

代码示例如下:

代码含义:选择id为list标签,并给标签设置宽度、高度、背景色等样式属性。

注意事项如下:

1)id是唯一的,同一页面不能出现多个相同的id定义。

2)id名称要求与类选择器相同。

3)通常当页面中有唯一样式时,采用id选择器。

5.2.5 后代选择器与子代选择器

1. 后代选择器

写法:选择器1选择器2选择器3……{},每个选择器之间用空格分隔。

代码示例如下:

div.li{}表示选中的元素包括div里面的class="li"的元素,其中class="li"的元素可以是div的子代,也可以是div的后代,也就是孙代及往后。

2. 子代选择器

写法:选择器1>选择器2>选择器3……{},每个选择器之间用大于号分隔。

代码示例如下:

div>ul{}表示ul必须是div的直接子代,孙代以后不选中。

5.2.6 交集选择器与并集选择器

1. 交集选择器

写法:选择器1选择器2……{},选择器之间没有分隔符。

代码示例如下:

.list#li{}元素必须同时具备class="list"并且id="li"样式才能生效。

2. 并集选择器

写法:选择器1,选择器2,……{},选择器之间用逗号分隔。

代码示例如下:

.li,#li{}元素只要具备class="li"或者id="li",样式即可生效。

5.2.7 伪类选择器

写法:选择器名称:伪类状态{}。

代码示例如下:

常见的伪类状态如下:

link:未访问状态。

visited:已访问状态。

hover:鼠标指向时,即悬停在元素上方时。

active:激活选定状态(鼠标点下去没松开)。

focus:获得焦点时(input常用)。

超链接多种伪类共存时的顺序如下:link→visited→hover→active。

5.2.8 选择器的命名规则及优先级

1. 选择器的命名规则

1)只能由字母、数字、下画线组成,不能有其他任何特殊字符。

2)开头不能是数字,即只能以字母、下画线开头。

2. 选择器的优先级

1)第一原则“近者优先”,最内层选择器永远比外层优先。例如:div ul li>div#ul,li在ul内层,所以li标签选择器能覆盖外层id选择器。

2)当作用在同一层时,可以根据选择器优先级权重进行计算。

标签选择器优先级为1,class选择器优先级为10,id选择器优先级为100。例如:div#li>div ul.li>div ul li,优先级权重依次为:1+100>1+1+10>1+1+1。

3)当优先级权重完全相同时,写在后面的选择器会覆盖前面的选择器。例如:

div li{color:red;}

div li{color:blue;}/*完全相同的选择器,写在后面的生效*/

4)除以上原则外,CSS中还有一个特殊样式规则!important。

!important的作用是将当前CSS语句提升到最高权重,即可以覆盖任何选择器的CSS语句。但是并不推荐使用!important,因为它会使你的页面难以修改调试。例如: