只会基础选择器(二、基础选择器 - 掘金 (juejin.cn))并不能满足有些特殊的需求,我们需要更多的方法来解决可能出现的复杂情况。
复合选择器
复合选择器可以分为后代选择器和子代选择器,这里可以站在父亲的角度,把他们看作人类关系中的后代和子代来理解
后代选择器
官方解释:根据 HTML 标签的嵌套关系,选择父元素后代中满足条件的元素
语法:选择器A 选择器B { css } ---> 在选择器 A 所找到标签的后代中,找到满足选择器 B 的标签,设置相关样式。
个人理解:这里可以把选择器 A 看作父亲,那么选择器 B 就是它的后代,B 可以是 A 的儿子,也可以是 A 的孙子,总之,只要是父亲 A 的后代就可以
例如下例中,p 标签是第一个 div 标签的儿子,所以编译器会先找到所有的 div 标签,然后依次在找到的 div 标签中寻找 p 标签,然后给 p 标签设置颜色;
span 标签可以是第一个 div 标签的孙子,也可以是第二个 div 标签的儿子,但无论是哪一种,它都可以看作是第一个标签的后代
这里有两点需要注意:
- 后代的理解:将父元素看作父亲,后代就可以解释为儿子、孙子、重孙子 ...
- 后代选择器中,选择器之间通过空格隔开
子代选择器
官方解释:根据 HTML 标签的嵌套关系,选择父元素子代中满足条件的元素
语法:选择器A 选择器B { css } ---> 在选择器 A 所找到标签的子代中,找到满足选择器 B 的标签,设置相关样式。
个人理解:同样,如果把选择器 A 看作父亲,那么选择器 B 只能是它的儿子。
下例中,把标签 div 看作是父亲,它有两个儿子:第一个 p 标签 和 span 标签,而 span 标签也有一个儿子:第二个 p 标签,同时它也是 div 标签的孙子
div > p这里需要找到 div 标签的儿子,即第一个 p 标签,设置字体大小,而第二个 p 标签是它的孙子,不满足要求
这里同样有两点需要注意:
- 子代的理解:将父元素看作父亲,子代就可以解释为儿子,并且只包括儿子
- 子代选择器中,选择器之间通过 > 隔开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
div p {
color: rgb(51, 255, 71);
}
div > p {
font-size: 30px;
}
</style>
</head>
<body>
<div>
<p>后代选择器1</p>
<span>
<p>后代选择器2</p>
</span>
</div>
</body>
</html>
并集选择器
官方解释:并集选择器可以同时选择多组标签,设置相同的样式
语法:选择器A,选择器B { css } ---> 找到选择器 A 和选择器 B 选择中的标签,设置相关样式。
并集选择器之间通过 “,” 分割,每组选择器可以是基础选择器或复合选择器,并集选择器中的每组选择器通常是一行写一个,这样做可以提高代码的可读性。
个人理解:如果几个标签要设置相同的样式,分开写会造成代码冗余的情况,可读性不强,一旦修改样式,就要一次性修改多处,麻烦而且代码多了不好找,所以我们可以把这些有相同样式的标签放在一起,设置统一的样式,这样只需修改一处即可
交集选择器
官方解释:选中页面中同时满足多个选择器的标签
语法:选择器A选择器B { css } ---> 找到页面中既能被选择器 A 选中,又能被 选择器 B 选中的标签,设置样式。
如果在交集选择器中,有标签选择器,那么标签选择器必须写在最前面,并且交集选择器之间是紧挨着的。
个人理解:有时候需要设置个别特殊样式,需要精确选中特定的标签,就要用到交集选择器
如下所示的例子中,我们需要选择既是 div 标签 又是 .one 类标签,即带有 .one 类的 div 标签
1)第一个就是我们要找的符合要求的标签
2)第二个,虽然有 .one 类,但是它是 span 标签,不符合要求
3)第三个,是 div 标签,但它没有 .one 类,也不符合要求
Hover 伪类选择器
我们浏览网页时会发现,有的地方鼠标放上去会有变化,变大或者变颜色等,这种变化可以用伪类选择器配合 CSS 样式来设置,Hover 伪类选择器的作用就是选中鼠标悬停在元素上的状态,设置样式。
语法:选择器:hover { css } ---> 伪类选择器选中的元素的某种状态
例如,我们想让鼠标悬停时,盒子变大,颜色改变: