国外设计欣赏网站 - DOOOOR.com

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

[DIV+CSS] CSS 后代选择器

[复制链接]
发表于 11-28-2011 05:36 | 显示全部楼层 |阅读模式

后代选择器(descendant selector)又称为包含选择器。

后代选择器可以选择作为某元素后代的元素。

根据上下文选择元素

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

举例来说,如果您希望只对 h1 元素中的 em 元素应用样式,可以这样写:

h1 em {color:red;}

上面这个规则会把作为 h1 元素后代的 em 元素的文本变为 红色。其他 em 文本(如段落或块引用中的 em)则不会被这个规则选中:

<h1>This is a <em>important</em> heading</h1>1 k( i/ D# ?2 p
<p>This is a <em>important</em> paragraph.</p>( `. Z& O( d; F/ n# R6 s" e

亲自试一试

当然,您也可以在 h1 中找到的每个 em 元素上放一个 class 属性,但是显然,后代选择器的效率更高。

语法解释

在后代选择器中,规则左边的选择器一端包括两个或多个用空格分隔的选择器。选择器之间的空格是一种结合符(combinator)。每个空格结合符可以解释为“... 在 ... 找到”、“... 作为 ... 的一部分”、“... 作为 ... 的后代”,但是要求必须从右向左读选择器。

因此,h1 em 选择器可以解释为 “作为 h1 元素后代的任何 em 元素”。如果要从左向右读选择器,可以换成以下说法:“包含 em 的所有 h1 会把以下样式应用到该 em”。

具体应用

后代选择器的功能极其强大。有了它,可以使 HTML 中不可能实现的任务成为可能。

假设有一个文档,其中有一个边栏,还有一个主区。边栏的背景为蓝色,主区的背景为白色,这两个区都包含链接列表。不能把所有链接都设置为蓝色,因为这样一来边栏中的蓝色链接都无法看到。

解决方法是使用后代选择器。在这种情况下,可以为包含边栏的 div 指定值为 sidebar 的 class 属性,并把主区的 class 属性值设置为 maincontent。然后编写以下样式:

div.sidebar {background:blue;}
& k5 M  }, {  @4 _div.maincontent {background:white;}; g( x- s, U5 D& ~3 X7 W: q
div.sidebar a:link {color:white;}: p% Q! j- u. I
div.maincontent a:link {color:blue;}# A& s, X, F3 N$ x$ s, p$ r" T- t

有关后代选择器有一个易被忽视的方面,即两个元素之间的层次间隔可以是无限的。

例如,如果写作 ul em,这个语法就会选择从 ul 元素继承的所有 em 元素,而不论 em 的嵌套层次多深。

因此,ul em 将会选择以下标记中的所有 em 元素:

<ul>. @, t/ l( g+ Q0 D
  <li>List item 1& o$ v, @8 m4 x* I; f# c6 ~  `7 v4 f8 t
    <ol>
. w2 r% R6 N- T: F8 x2 d      <li>List item 1-1</li>8 w% W8 _  w; z; h9 j1 |2 i6 q
      <li>List item 1-2</li>
7 u: k% |: F- n      <li>List item 1-33 S3 _7 C% e3 S0 M# ^! b
        <ol>( u- o1 E. J) T5 g! E& `2 c
          <li>List item 1-3-1</li>
0 r7 \7 ^( _( P- p' W* Q          <li>List item <em>1-3-2</em></li>9 B4 q* [6 @3 [! u$ G3 p
          <li>List item 1-3-3</li>  L# M) F: L. C' L2 J
        </ol>
: G) ~8 U% H- Q- L      </li>, ^, B" W8 E3 F6 A3 c+ L, {
      <li>List item 1-4</li>
7 s: l" E8 h6 w    </ol>
1 d; V2 k1 g+ K- c  </li>6 m! L9 X# G3 Y/ x
  <li>List item 2</li>
8 ~% W4 i1 j/ _  <li>List item 3</li>
& t' {' i8 w% E8 Y: `6 V</ul>+ l2 K, e1 w  a) i* K

亲自试一试

|2011-2026-版权声明|平台(网站)公约|手机版|手机版|DOOOOR 设计网 ( 吉ICP备2022003869号 )

GMT+8, 11-12-2025 03:50 , Processed in 0.172926 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表