当前位置:Gxlcms > html代码 > CSS基础学习八:派生选择器_html/css_WEB-ITnose

CSS基础学习八:派生选择器_html/css_WEB-ITnose

时间:2021-07-01 10:21:17 帮助过:16人阅读

CSS语法中通过依据元素在其位置的上下文关系来定义样式,你可以使标记更加简洁。

在CSS1中,通过这种方式来应用规则的选择器被称为上下文选择器(contextual selectors),这是由于它们依赖于

上下文关系来应用或者避免某项规则。在CSS2中,它们称为派生选择器,但是无论你如何称呼它们,它们的作用都

是相同的。派生选择器允许你根据文档的上下文关系来确定某个标签的样式。通过合理地使用派生选择器,我们可以

使HTML代码变得更加整洁。

举一个例子来说,你希望列表中的 strong 元素变为斜体字,而不是通常的粗体字,可以这样定义一个派生选择

器:

li strong {    font-style: italic;    font-weight: normal;  }
请注意标记为的代码的上下文关系:

我是粗体字,不是斜体字,因为我不在列表当中,所以这个规则对我不起作用

  1. 我是斜体字。这是因为 strong 元素位于 li 元素内。
  2. 我是正常的字体。

在上面的例子中,只有 li 元素中的 strong 元素的样式为斜体字,无需为 strong 元素定义特别的 class 或 id,代

码更加简洁。

我们可以看以运行的结果为:


接下来我们来看看常见的派生选择器。

一后代(包含)选择器

后代选择器又称为包含选择器。后代选择器可以选择作为某元素后代的元素。选择某元素后代的元素,并设置一

些样式。

(1)根据上下文选择元素

我们可以定义后代选择器来创建一些规则,使这些规则在某些文档结构中起作用,而在另外一些结构中不起作

用。上述的例子就是一个标准的后代选择器的演示。

(2)语法解释

在后代选择器中,规则左边的选择器一端包括两个或多个用空格分隔的选择器。选择器之间的空格是一种结合

符。每个空格结合符可以解释为“... 在 ... 找到”、“... 作为 ... 的一部分”、“... 作为 ... 的后代”,但是要求必须从右向左

读选择器。语法:选择器 选择器 [选择器...] {}。有关后代选择器有一个易被忽视的方面,即两个元素之间的层次间隔

可以是无限的。

比如:h1 span{ } span嵌套在h1中

无标题文档

1234512345

12345

12345

12345

运行的结果为:


(3)也有些复杂的选择器组合成的后代选择器: .test img{}和#header .btn{}等等。

二子元素选择器

与后代选择器相比,子元素选择器(Child selectors)只能选择作为某元素子元素的元素。比后代选择器更严

格,选择某元素子元素的元素,并设置一些样式。

(1)选择子元素

如果您不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,请使用子元素选择器。

例如,如果您希望选择只作为 h1 元素子元素的 strong 元素,可以这样写:

h1 > strong {color:red;}

这个规则会把第一个 h1 下面的 strong 元素变为红色,但是第二个 strong 不受影响:

This is very important.

This is really very important.

运行的结果为:


(2)语法解释

您应该已经注意到了,子选择器使用了大于号(子结合符)。子结合符两边可以有空白符,这是可选的。因此

,以下写法都没有问题:

h1 > strongh1> strongh1 >strongh1>strong

如果从右向左读,选择器 h1 > strong 可以解释为“选择作为 h1 元素子元素的所有 strong 元素”。

(3)结合后代选择器和子选择器

请看下面这个选择器:

table.company td > p {}

下面的选择器会选择作为 td 元素子元素的所有 p 元素,这个 td 元素本身从 table 元素继承,该 table 元素有一个

包含 company 的 class 属性。

三CSS 相邻兄弟选择器

相邻兄弟选择器可选择紧接在另一元素后的元素,且二者有相同父元素。

(1)选择相邻兄弟

如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器。

例如,如果要增加紧接在 h1 元素后出现的段落的上边距,可以这样写:

h1 + p { color:#FF0000;}
这个选择器读作:“选择紧接在 h1 元素后出现的段落,h1 和 p 元素拥有共同的父元素”。

无标题文档

This is a heading.

This is paragraph.

This is paragraph.

This is paragraph.

This is paragraph.

This is paragraph.

运行的结果为:


(2)语法解释

相邻兄弟选择器使用了加号(+),即相邻兄弟结合符。注释:与子结合符一样,相邻兄弟结合符旁边可以有空

白符。
请看下面这个文档树片段:

  • List item 1
  • List item 2
  • List item 3
  1. List item 1
  2. List item 2
  3. List item 3

在上面的片段中,div 元素中包含两个列表:一个无序列表,一个有序列表,每个列表都包含三个列表项。这两

个列表是相邻兄弟,列表项本身也是相邻兄弟。不过,第一个列表中的列表项与第二个列表中的列表项不是相邻兄

弟,因为这两组列表项不属于同一父元素(最多只能算堂兄弟)。

请记住,用一个结合符只能选择两个相邻兄弟中的第二个元素。请看下面的选择器:

li + li {font-weight:bold;}

上面这个选择器只会把列表中的第二个和第三个列表项变为粗体。第一个列表项不受影响。

运行的结果为:

(3)结合其他选择器

相邻兄弟结合符还可以结合其他结合符:

html > body table + ul {margin-top:20px;}

这个选择器解释为:选择紧接在 table 元素后出现的所有兄弟 ul 元素,该 table 元素包含在一个 body 元素中,

body 元素本身是 html 元素的子元素。












版权声明:本文为博主原创文章,未经博主允许不得转载。

人气教程排行