2.3 特殊的上下文选择符
刚才,我们学习的上下文选择符是以某个祖先标签作为上下文。只要有标签在它的层次结构“上游”存在这么一个祖先,那么就会选中该标签。无论从该标签到作为祖先的上下文之间隔着多少层次都没有关系。不过,有时候我们可能还会需要比“某些祖先”更加具体的上下文。比如说吧,要是你想根据父元素或者同胞元素的标签名来选择元素怎么办呢?
下面我们再用另一段标记来演示几种特殊的上下文选择符。
<section>
<h2>An H2 Heading</h2>
<p>This is paragraph 1</p>
<p>Paragraph 2 has <a href="#">a link</a> in it.</p>
<a href="#">Link</a>
</section>
2.3.1 子选择符>
标签1 > 标签2
标签2
必须是标签1
的子元素,或者反过来说,标签1
必须是标签2
的父元素。与常规的上下文选择符不同,这个选择符中的标签1
不能是标签2
的父元素之外的其他祖先元素。
section > h2 {font-style:italic;}
图2-10展示了以上规则的结果。
图2-10
h2
是section
的子元素,故而被选中
2.3.2 紧邻同胞选择符+
标签1 + 标签2
标签2
必须紧跟在其同胞标签1
的后面。
h2 + p {font-variant:small-caps;}
图2-11展示了这条规则的效果。
图2-11 第一个
p
由于是h2
的紧邻同胞而被选中
2.3.3 一般同胞选择符~
标签1 ~ 标签2
标签2
必须跟(不一定紧跟)在其同胞标签1
后面。
用Shift+1键左侧的键输入字符~(波浪号)。
h2 ~ a {color:red;}
图2-12展示了这条规则的效果。
图2-12 只选中了同胞元素
2.3.4 通用选择符*
* (按Shift+8)
通用选择符*
(常被称为星号选择符)是一个通配符,它匹配任何元素,因此下面这条规则
* {color:green;}
会导致所有元素(的文本和边框)都变成绿色。不过,一般在使用*
选择符时,都会同时使用另一个选择符,比如:
color
属性设定的是前景色。前景色既影响文本也影响边框,但人们通常只用它设定文本颜色。
p * {color:red;}
这样只会把p
包含的所有元素的文本变成红色。
这个选择符有一个非常有意思的用法,即用它构成非子选择符,比如:
section * a {font-size:1.3em;}
如图2-13所示,任何是section
孙子元素,而非子元素的a
标签都会被选中。至于a
的父元素是什么,没有关系。
图2-13 只选中了孙子元素,并未选中子元素
总之,只有一个标签名的选择符会选中页面中所有相同标签的实例。而通过上下文选择符,则可以指定标签必须具备相应的祖先或同胞。