暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CSS—选择器

Turbo的札记 2020-05-13
334

CSS内容有点多,一次性总结要写很久,所以我把这部分分成了几个板块,得空写一点,最后汇总到一起。

就像 HTML 中的元素内容和标签,CSS 是由声明和选择器组成的,除了注释,CSS 文件中有且只有声明和选择器。选择器的作用是选择特定的 HTML 元素,然后通过声明指定样式(声明就好比元素内容,指定了实际呈现在页面中的东西)。语法如下:
选择器{声明1;声明2;......}
声明的语法如下:
样式相关属性名称:属性值

类型选择器
选择某一类的标签的全部,选择器直接写相应元素类型即可,例如:
p{指定样式的语句}

class 选择器
对于所有 HTML 标签,都可以添加一个名为 class 的全局属性。该属性和你接触的编程语言中的class含义一样,就是指定一个元素的类,将同样性质、需要被做同样处理的元素汇总为一类。选择器的书写语法为:
.ClassName     //class属性不可以以数字开头
类选择器结合元素选择器
在类选择器前加上元素类型,标识选择既满足类名符合又属于指定类型的元素。书写语法如下:
元素类型.ClassName{指定样式的语句}
多类选择器
HTML中,给一个元素指定class属性值是,可以包含一个此列表,各个词之间用空格分隔,也就是说class的值不允许有空格,空格是用来分隔不同类名的,被空格分开的多个值意味着该元素属于多个类。
所以选择器也可以选择多个类,含义为选择同时属于这几个类的元素,书写选择器时将多个类选择器连起来写即可构成多类选择器,书写语法如下:
.ClassName1.ClassName2.ClassName3......{指定样式的语句}

id 选择器

对于所有 HTML 标签,都有一个名为 id 的全局属性。只需要在希望设置id的元素的开始标签中加入属性:id=“id值”。正如他的名字,这个属性旨在给元素指定一个唯一标识,也就是说,不同于 Class 同一个 id 值在整个 HTML 文档中只能使用一次。同样,既然id是唯一的,那么也就不存在结合元素选择器的用法,也不存在类似多类选择器的用法。(虽然如此,但w3c规范中并不允许id的值出现空格。)(不论是 class 还是 id 都是用来方便 CSS 和 JS 的,虽然他们都是 HTML 属性,但跟 HTML 文档没啥关系。)(class、id都要区分大小写,元素类型不区分但一般小写。)选择器的书写语法为:
#IdValue     //id属性不可以以数字开头

属性选择器
依据元素具有的属性、属性的值选择元素。属性选择器有种,书写语法如下:
*[属性名]{指定样式的语句}   //选择所有具有该属性的元素
元素类型名[属性名]{指定样式的语句}   //选择所有具有该属性的特定类型元素
属性名称或通配符[属性1][属性2]...    //选择具有多个属性的(特定类型)元素
属性值选择:上面三种形式都可以写成[属性="特定值"]的形式实现筛选特定属性值元素
部分属性值选择:在等号前面加一个波浪线写成[属性~="特定值"]就可以实现部分匹配,匹配属性值包含该字符串的元素
子串匹配属性选择器:把波浪线换成^匹配以特定值开头,换成$匹配结尾,换成*匹配属性值中间包含特定值
特定属性选择器:把波浪线换成|匹配属性等于特定值或以“特定值-”开头的的元素

后代选择器
用于选择某元素的后代元素,后代即在HTML中标签的嵌套,被嵌套在里面的元素就是外面元素的子元素。书写语法:两个元素选择器用空格连接,例如:
 div p{指定样式的语句}   //将选择div内的所有p
子元素选择器
这里要先搞清后代与子的区别,嵌套的第二层第三层第四层都叫后代,但只有第一层的叫子代(你可以理解称孙子、曾孙子都是后代,但只有儿子是子代)。书写语法:两个元素选择器用大于号连接,例如:
div>p{指定样式的语句}  //将选择所有div内最外层/子代的所有p
相邻兄弟选择器
选择紧接在某一元素后的元素,且二者需要具有相同父级元素(即二者要出于同一级、不存在相互嵌套关系)。书写语法:两个元素用加号连接,例如:
div+p{指定样式的语句}  //选择处在任意div同一级后面并且与div相邻的p
后续兄弟选择器
跟上面内个类似,即不必选择紧挨着、相邻的,只要是后面的兄弟元素都可以选择。注意兄弟二字,它只得就是二者需要具有相同的父级关系。书写语法:两个元素用波浪线连接,例如:
div~p{指定样式的语句}

伪类
用来添加一些选择器的特殊效果、依据一些特殊规则选择元素。
语法如下:
 元素类型:伪类名{样式声明}
他的含义是,选择满足某些条件(依据伪类)的所有某类型元素(依据元素类型)。
伪类的另一种形式如下:
 元素类型.类名:伪类名{样式声明}
这种选择器进一步增加了限制条件,即不光元素要满足某种类型,还必须属于同一个类。
伪类的种类有很多,这里不进行介绍,可以查阅MDN来了解这些伪类的用途。
伪元素
和伪类一样,用来实现一些特殊的选择器效果。语法和上面也一样,只不过是把伪类名换成了伪元素名。
伪元素的种类有很多,这里不进行介绍,可以查阅MDN来了解这些伪元素的用途。通过了解这些伪类伪元素实现的选择器效果,你将会明白为什么称他们为类、元素。

结合选择器
同时为多个选择器指定一份样式,用逗号连接多个选择器书写语法如下:
选择器1,选择器2,选择器3,......{样式声明}

优先级

选择器的优先级

出于某些场景的需求,会有多个选择器指向同一个元素(选择一个元素的方法是多种多样的),同时样式声明语句种都指定了同一个样式相关属性。

显然,指定了这么多次,只会有一次生效,到底生效哪个,要通过(计算)选择器的优先级判断。

权重:类型选择器(伪元素也算)为1、类选择器(属性选择器、伪类也算)为10,ID选择器为100。

选择器里每存在一个类型/类/ID就加1/10/100,然后权重值最高的选择器的样式效果将会被应用在所选元素上。

不光选择器可以给元素指定样式
行内元素开始标签中指定样式优先级>头部指定样式>选择器。
除此之外,还有一个!important 规则,使用关键字“!important ”的方法为在一条样式声明后空格加上!important,例:
p{ background-color:red !important;}
!important 修饰的样式声明有最高优先级,会忽略/覆盖其它所有声明。
优先级相同时遵循后来居上的原则,应用后声明的样式。
总结:
!important>行内>头部>外联样式表中高权重选择器>低权重,优先级相同时后来居上。

文章转载自Turbo的札记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论