简单的三种选择器
元素选择器
元素选择器还包含一个特殊的全局选择器(*),它选中了父元素中的所有内容,如果没有父元素,则表示选中文档中的所有内容。全局选择器的作用还可以参考p和:first-child之间的空格。
span {
background-color: yellow;
}
类选择器
以一个句点(.)开头。
.highlight {
background-color: yellow;
}
类选择可以附加到元素选择器上使用,中间不要空格或者逗号,表示选择拥有某个类的特定类型元素。
h1.highlight {
background-color: yellow;
}
同样,多个类选择器也可以同时使用,表示选择同时拥有多个类名的元素。
.warning.highlight {
background-color: yellow;
}
id选择器
以一个句点(#)开头,id 属性在文档内必须是唯一的。所以尽管它可以和其他选择器叠加使用,但是由于其唯一标识性,我们可以忽略这些用法。
id选择器优先于大多数其他选择器。所以很难处理它们。大多数情况下,给一个元素加个类,而不是使用 id,会更好。
属性选择器
- [attr] : 匹配带有一个名为
attr的属性的元素
p[title] // 匹配带有 `title` 属性的 p 元素
- [attr=value] : 匹配带有一个名为
attr的属性,且值等于value的元素
p[class='aaa'] // 匹配 `class` 属性为 `aaa` 的 p 元素,相当于 p.aaa
- [attr~=value] : 匹配带有一个名为
attr的属性,且值包含value的元素
p[class~='aaa'] // <p class='aaa bbb'>hello</p> 可以被选中
- [attr|=value] : 匹配带有一个名为
attr的属性,且值等于value,或者值以value开头,后面跟连字符-的元素
p[class|='aaa'] // <p class='aaa-bbb'>hello</p> 可以被选中
- [attr^=value] : 匹配带有一个名为
attr的属性,且值以value开头 - [attr$=value] : 匹配带有一个名为
attr的属性,且值以value结尾 - [attr*=value] : 匹配带有一个名为
attr的属性,且值至少含有一个value
value 是大小写敏感的,如果希望不区分大小写,需要在中括号最后加一个 i,[attr=value i]
伪类和伪元素
伪类
伪类:用于选择处于特定状态的元素,也就是伪类其实是为了描述一个现有元素的,例如: :hover,:focus,:first-child ...,关于伪类写法的疑惑,可以查看 p和:first-child之间的空格。
伪元素
伪元素:伪造一个元素。例如 ::after,::before,::first-line ...,伪元素开头为双冒号::,现代的浏览器为了保持后向兼容,支持早期的带有单双冒号语法的伪元素。
- ::first-line :只会选中第一行,第一行并不是一个元素,所以是伪类。
- ::before 和 ::after :和
content属性一同使用,使用CSS将内容插入到你的文档中。
伪类和伪元素可以叠加使用,可以在 MDN 上查看所有的伪元素和伪类。
关系选择器
后代选择器
用 单个空格(" ") 字符——组合两个选择器
.box p {
color: red;
}
子代关系选择器
用大于号(>),只会在选择器选中直接子元素的时候匹配。继承关系上更远的后代则不会匹配。
邻接兄弟选择器
用加号(+)选中处于同一父元素下的相邻子元素。
p + img // 选中所有紧随<p>元素之后的<img>元素
兄弟选择器
用波浪号(~)选中处于同一父元素下的兄弟元素,不必相邻。
选择器列表
可以使用逗号(,)分割,表示多个选择器并列。选择器列表中如果有一个选择器书写错误,整个列表的样式都不会生效。
.warn, .error {
font-size: 12px
}