HTML文档是一棵树的结构,各元素以一种层次结构为基础构成‘树’的视图。文档树中的每个元素,要么是另一个元素的父元素,要么是另一个元素的子元素,这样,各元素之间就形成了‘父子关系’。基于这样的关系模型,CSS定义了后代选择器(descendant selector)也称为上下文选择器(contextual selector)。
后代选择器的写法为,子代元素以空格与父元素形成连接关系构成选择器,如:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->div span{color:blue;}
以上规则的结果为:“作为div元素后代的任何span元素显示为蓝色字体”。
选择器之间的空格是一种结合符(combinator)。每个空格结合符可以解释为“...在...中找到”、“...作为...的一部分”、“...作为...的后代”,但是要求必须从右向左读选择器——《CSS权威指南》第三版
CSS还有两种选择器:类选择器和ID选择器,个中细则不是本文陈述的重点。本文的重点是:空格在后代选择器、类选择器和ID选择器相结合的情况中的种种问题,及解决方式。
先看看以下的规则:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->div.blue {color:blue;}
以上规则的结果为:“所有class属性值为blue的div元素显示为蓝色字体”。然而我的要求并不是这样,我的要求是:“作为div元素后代的任何class属性值为blue的元素显示为蓝色字体”。试试以下的规则:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->div .blue{color:blue;}
以上规则的改进之处为'div'与'.blue'之间多了一个空格,这样是否就能形成后代选择器呢?答案是否定的!该规则实现的结果依旧是:“所有class属性值为blue的div元素显示为蓝色字体”。
那么该怎么结合类选择器构成后代选择器的效果呢?方法是有的,那就是给父元素div设置一个class或者id属性,假设我给它加上一个class属性,于是规则就变为:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->div.contain .blue{color:blue;}
以上规则的结果为:“所有class属性值为contain的div元素,其后代中class属性值为blue的任何元素显示为蓝色字体”。结果虽然不能完全达到我的苛刻要求,但已经很接近了。接近了,效果一定是很明显的,然而我却发现完全没有了蓝色字体,因为我把规则写为:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->div.contain.blue{color:blue;}
以上规则的不同之处在于,'.contain'与'.blue'之间少了一个空格!少了空格,以上选择器就不是后代选择器了,而是另外一种选择器:“多类选择器”。
在HTML中,一个class值中有可能包含一个词列表,各个词之间用空格分隔。那么以上的多类选择器只能将规则应用于如下形式的元素中:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div class="contain blue">text</div>
以上的class属性值少了其中一个都无法将字体显示为蓝色!
将以上规则放在一起,比较起来会清晰一点:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 div.contain .blue{color:blue;}/*后代选择器*/
2 div.contain.blue{color:blue;} /*多类选择器*/
以上两种规则分别应用的元素如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 <div class="contain">contain<span class="blue">blue</span><!--后代-->
2 <div class="contain blue">contain and blue</div><!--多类-->
值得注意的是:ID属性不允许有以空格分隔的词列表。所以以下的规则将无法应用到任何元素:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->div#contain#blue{color:blue;}
以上的规则将无法应用到任何元素。你只能乖乖地用空格将两个ID选择器分隔,构成后代选择器。
综上,选择器之间的空格是一种结合符,如果要构成后代选择器,则空格两边的选择符必须为如下两种形式:
- 元素选择符 空格 元素选择符
- 非元素选择符 空格 非元素选择符
后代选择器中绝对不可能出现的一种情形:元素选择符 [空格] 非元素选择符。
最重要一点:两个类选择器之间存在空格则构成后代选择器,之间没有空格的则构成多类选择器。
参考资料:《CSS权威指南:第三版》Eric A.Meyer著 尹志忠 侯妍译
分享到:
相关推荐
在CSS选择器的体系中,存在多种不同类型的选择器,每种都有其特定的用途和使用场景。 首先,元素选择符是最基本的类型,包括通配符选择器、标签选择器、id选择器和class选择器。通配符选择器用“*”表示,可以选中...
在React开发中,CSS选择器是用于特定于组件的样式化的一种强大工具。React组件的样式管理是一个关键的方面,因为它影响着应用的可维护性和性能。本篇将深入探讨React组件与CSS选择器的结合使用,以及如何优化组件的...
CSS选择器是CSS中用于选取需要添加样式的元素的一种语法。CSS选择器有多种类型,它们各有不同的使用场景和规范,正确地运用这些选择器可以帮助我们更加高效地编写和维护CSS代码。 一、id选择器 id选择器是通过元素...
文章中提到的“属性及剩余的选择符”是指CSS中除了常见的类型、类和ID选择符之外的,根据元素的属性以及特定条件进行选择的其他选择符类型。 在CSS中,属性选择符可以根据元素的属性以及属性值的不同状态来选取元素...
### CSS选择器与优先级详解 #### CSS选择器概述 CSS选择器是用于定义样式规则应用于HTML文档中哪些元素的基本工具。随着CSS的发展,从CSS1到CSS3,选择器的功能变得越来越强大,允许开发者更加精确地控制网页的...
- **后代选择器**:使用空格分隔两个选择器,选择第一个选择器下的所有后代元素(包括子元素、孙元素等)。例如: ```css div p { color: blue; } ``` - **子代选择器**:使用`>`连接两个选择器,仅选择第一个...
在Scrapy中,`Selector`类提供了对文档进行解析和提取数据的功能,而CSS选择器就是其主要的数据定位手段。使用CSS选择器,你可以像操作网页样式一样定位到需要抓取的元素。例如,你可以通过`response.css()`方法来...
4. **交互式调整**:可以通过鼠标悬停在条形上查看具体的选择器和特殊性值,也可以点击条形来高亮显示对应的选择器在CSS代码中的位置。 5. **优化CSS**:基于可视化结果,可以调整CSS选择器以减少不必要的复杂性和...
CSS 基本选择器 本资源摘要信息将着重介绍 CSS 基本...CSS 基本选择器是 CSS 中最基本的选择器,它们是我们学习和应用 CSS 的基础。只有通过学习和掌握 CSS 基本选择器,我们才能更好地应用 CSS 实现网页的各种效果。
CSS选择器是网页样式设计中不可或缺的一部分,它们用于指定HTML或XML文档中元素的样式规则。本文将深入探讨CSS选择器的几个主要类型,包括HTML标签选择器、类别(Class)选择器、专用ID选择器、选择器组合筛选、选择器...
CSS选择器用于指定要应用样式的元素,如`p {color: blue;}`会将所有段落文本颜色设置为蓝色。CSS还有层叠性,这意味着可以有多个样式规则,浏览器会根据优先级决定哪个规则生效。此外,CSS3引入了更多高级功能,如...
CSS选择器是CSS中的关键概念,用于定位和选择HTML或XML文档中的元素,进而应用样式。"前端css选择器练习diner.zip" 是一个针对CSS选择器学习和实践的资源包,名为"css-diner"。 在"css-diner"这个练习中,你可以...
选择器在CSS中,选择器有哪些类型和作用在CSS中,选择器有哪些类型和作用在CSS中,选择器有哪些类型和作用在CSS中,选择器有哪些类型和作用在CSS中,选择器有哪些类型和作用在CSS中,选择器有哪些类型和作用在CSS中...
本文将深入探讨CSS选择器的种类、用法及其在实际开发中的应用。** 首先,我们要了解CSS选择器的基本分类: 1. **类型选择器**:基于元素的标签名进行选择,如`h1`,`p`等。 2. **类选择器**:使用`.`前缀,匹配...
CSS选择器的介绍和使用,什么是CSS选择器?CSS选择器可以用于我们需要添加的样式的标签。想要在HTMLl页面中的元素实现一对一,一对多或者多对一的控制,就得要使用css选择器,css选择器进控制着HTML页面中的元素。
在CSS中,选择器是一种模式,用于选择需要添加样式的DOM元素。选择器的类型非常多样,主要包括元素选择器、类选择器、ID选择器、属性选择器、伪类选择器和伪元素选择器等。学习CSS选择器对于前端开发人员来说是一项...
CSS选择器可以分为多种类型,包括id选择器、类选择器、标签选择器、交叉选择器、群组选择器、后代选择器和通用选择器。 - id选择器:通过元素的id属性来选择特定元素,使用#符号加上id名作为选择器(如#idname)。 ...
在这个主题“Scrapy爬虫下的CSS选择器使用”中,我们将深入探讨如何利用CSS选择器在Scrapy中提取网页数据。 首先,CSS(Cascading Style Sheets)选择器是用于选取HTML或XML文档中元素的工具,其在网页设计中广泛...
选择器是CSS中最核心的概念,它决定了哪些元素会受到规则集的影响。选择器可以基于元素的id、类、属性、关系以及状态等多种条件来定位页面上的元素。常见的CSS选择器包括: 1. 标记选择器(也称为元素或类型选择器...