本文最后更新于:2020年3月26日 上午
Css中的层级关系
在浏览器的HTML文档中,元素之间存在许多关系,就像一颗树一样,如下:

后代选择器
根据上方树结构,被包裹的元素被叫做包裹元素的后代,比如strong元素就是p元素的后代,anchor(a)元素也是。写法如下:
1
| p strong { color: red; }
|
当然也可以嵌套很多层,深入定位:
1 2 3 4
| dp strong a em { color: red; }
p em { color: red; }
|
除去元素标签也可以使用class标签作为后代元素:
1 2 3 4
| <p> 外层嵌套 <span class="sidebar">内层嵌套</span> </p>
|
1
| p .sidebar { color: blue; }
|
⚠️注意:在具有多层的树结构中,如果css样式并未定位至对应的最低层,如图中p => strong => a => em结构:
1
| p strong { color: red; }
|
⚠️:这时候样式依然也会扩张到strong的子元素中
子元素选择器
当我们想缩小后端选择器的范围时,可以选择子元素选择器,他可以选择一个元素的子元素而不是后代元素:
1
| p > strong { color: red; }
|
或者例如使用类选择器作为子选择器时候:
HTML: <p>这是父级元素的内容<strong class=”strongItem” >这是子级元素的内容</strong></p>
Css:p > .strongItem { color: red; }
🌰:当后代选择器和子元素选择器结合:
1 2 3 4 5
| <p> 这是p标签的内容 <strong class="strongItem">这是第一个strong <em>第一个em<span class="strongItem2">这是第一个span</span><span>第一个span<span>111</span></span</em> </strong> </p>
|
1 2 3 4
| p strong em > span { color: red; }
|
⚠️:当出现以下情况下,样式可能不同:
1 2 3 4 5 6 7 8 9 10 11 12
| <p>这是父级p <span>这是一个span <span>这是第二个span</span> </span> </p>
<p>这是p元素 <div>这是span元素</div> <em>这是em</em> </p>
|
1 2 3 4 5 6 7 8
| p > span { color: red; }
p > em { color: red; }
|
选择相邻兄弟元素
当多个元素在同一个父级元素下,可以使用相邻兄弟结合符匹配一个元素之后的第一个元素(而不包括本身):
1 2 3 4 5 6 7 8 9 10 11
| <div> <p>p</p> <span>span</span> </div>
<div> <span>sapn1</span> <span>span2</span> <span>span3</span> </div>
|
1 2 3 4 5 6 7 8
| p + span { color: red; }
span + span { color: red; }
|
⚠️:使用结合符时候,要注意顺序,相邻兄弟结合符按照代码的源顺序生效,比如:ul + ol 不等于 ol + ul