【问题标题】:CSS: Increase specificity of parent elementCSS:增加父元素的特异性
【发布时间】:2014-11-22 02:39:25
【问题描述】:

我有以下基本的 HTML 结构:

<ul class = "foo">
   <li>
      <a href = "example.com">
       Click here
      </a>
   </li>
</ul>

还有以下 CSS:

a:link {
   color: blue;
}

ul.foo li {
   padding: 2em;
   border: 1px solid black;
}

ul.foo li:hover {
   color: green;
}

ul.foo li:hover a {
   color: green;
}

所以基本上所有链接都是蓝色的,&lt;UL&gt; 内的 &lt;LI&gt; 元素 "foo" 类的元素在悬停时有绿色文本。这里的问题是,当鼠标悬停在 &lt;LI&gt; 元素上时,我希望作为 &lt;LI&gt; 元素的子元素的 &lt;A&gt; 元素具有 green 文本。但是,由于文档范围的a:link 选择器,&lt;a&gt; 元素中的链接文本保持蓝色直到鼠标专门触摸链接。但我希望鼠标悬停在封闭的&lt;LI&gt; 元素上时链接变为绿色。

我怎样才能做到这一点?我知道 CSS 使用“特异性”来决定应用哪些规则,但我不明白为什么 ul.foo li:hover 选择器比文档范围的 a 选择器更少具体。

【问题讨论】:

    标签: html css


    【解决方案1】:

    当您设置了以下内容时:

    a:link {color: blue;}
    

    所有&lt;a&gt; 标签都将显示为蓝色,与位置无关。此外,&lt;a&gt; 标签不继承color 属性!所以你必须为所有&lt;a&gt;s 设置它。

    那么就这样吧:

    ul.foo li:hover a {color: green;} /* Or at least */
    ul.foo li:hover a {color: inherit;}
    

    根据您的评论:

    抱歉,我不清楚:我确实有 ul.foo li:hover a { color: green; } - 但这并不能解决我正在谈论的问题 - 基本上,我希望 a 元素中的文本在我悬停时变为绿色在父 &lt;LI&gt; 元素之上。

    为此,您需要这样做:

    ul.foo li:hover a, ul.foo li:hover a:hover {color: green;}
    

    【讨论】:

    • 对不起,我不清楚:我确实有 ul.foo li:hover a { color: green; } - 但这并不能解决我正在谈论的问题 - 基本上,我希望 a 元素中的文本当我将鼠标悬停在 parent &lt;LI&gt; 元素上时变为绿色
    【解决方案2】:

    您正在为悬停时的 li 元素设置样式。但是,如果您希望 &lt;a&gt; 标签中的文本变为绿色,请将您的 CSS 更改为此以实际设置 &lt;a&gt; 标签的样式:

    ul.foo li:hover a {
       color: green;
    }
    

    【讨论】:

    • 对不起 - 在你回答之前我编辑了我的帖子。我实际上已经有了那个选择器(见上文),但我把它从我的帖子中删除了。即使使用该选择器,&lt;a&gt; 标记文本也只会在鼠标悬停在它上面时变为绿色 - 但我的问题是我希望它在鼠标悬停在父 &lt;LI&gt; 元素上时变为绿色
    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多