【问题标题】:CSS descendant-versus-child hierarchy not workingCSS后代与子层次结构不起作用
【发布时间】:2012-09-14 15:05:31
【问题描述】:

下面是一段简单的 HTML/CSS 代码,我在其中输入了两个 URL:

  • 第一个 URL (Google) 是 div 的子级。
  • 第二个 URL (Bing) 只是 div 的后代。

使用子选择器意味着只有 Google URL 应该是红色的。

但在实施过程中,不知何故 Google 和 Bing URL 都是红色的。 (另外,有趣的是,当我删除 <h1>Text</h1> 元素时,只有 Google URL 是红色的。)

是什么原因?

这是 HTML 摘录:

<div class="mydiv">
    <a href="http://www.google.com">Google</a>
    <p>
        <h1>Text</h1>
        <a href="http://www.bing.com">Bing</a>
    </p>
</div>

还有 CSS 提取:

.mydiv > a {
    color:red;
}

【问题讨论】:

  • 因为两者都是 mydiv 的孩子

标签: html css css-selectors


【解决方案1】:

这有点棘手。

首先&lt;h1&gt; 是一个块元素。接下来要注意的是,&lt;p&gt; 只能包含内联元素。一旦遇到块元素作为&lt;p&gt; 元素的子元素,打开的&lt;p&gt; 就会隐式关闭。

所以(在内部)你的 HTML sn-p 被转换为这个(据我所知,关闭 &lt;/p&gt; 被忽略):

<div class="mydiv">
        <a href="http://www.google.com">Google</a>
        <p></p>
        <h1>Text</h1>
        <a href="http://www.bing.com">Bing</a>
</div>

现在,如您所见,两个 &lt;a&gt; 标记都是您的 &lt;div&gt; 的直接后代,因此您的 CSS 规则适用于它们。

删除&lt;h1&gt; 标签时的行为如下:您的&lt;p&gt; 没有隐式关闭。因此,第二个 &lt;a&gt; 仍然是 &lt;p&gt; 的子级,并且 CSS 不适用于它。

我认为,最好使用另一个 &lt;div&gt; 而不是 &lt;p&gt; 标签(甚至可能是 &lt;article&gt;&lt;section&gt; 或类似标签)来实现您想要的。

【讨论】:

  • 澄清!并且由此提出的建议是否通常也是避免将

    用于其中的一个以上元素?

  • @boardbite 基本上是的。但是,您可以使用 &lt;span&gt;&lt;a&gt; 等内联元素来进行样式设置或链接。但请确保不要插入任何块级元素,因为这可能会破坏您的设计。
  • 实际上,在所有主流浏览器中,关闭 &lt;/p&gt; 标记似乎变成了自己的 p 元素:stackoverflow.com/questions/11570902/… 所以你有两个 p 元素,每个 a 元素后面一个。迷幻!但是 +1 是一个很好的解释。
猜你喜欢
  • 1970-01-01
  • 2013-12-23
  • 2018-05-28
  • 2012-10-19
  • 2023-02-24
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多