css - 悬停时更改子跨度的颜色

标签 css

我有以下 html 代码:

<ul>
   <li id="ajson1" class="node">
      <a href="#" id="ajson1_anchor">Afrique</a>
      <span class="action-button-container">
               <span class="icon">X</span>
               <span class="icon">Y</span>
               <span class="icon">Z</span>
            </span>
      <ul>
         <li id="ajson2" class="node">
            <a href="#" id="ajson2_anchor">Maroc</a>
            <span class="action-button-container">
               <span class="icon">X</span>
               <span class="icon">Y</span>
               <span class="icon">Z</span>
            </span>
         </li>
         <li id="ajson3" class="node">
            <a href="#" id="ajson3_anchor">Algerie</a>
            <span class="action-button-container">
               <span class="icon">X</span>
               <span class="icon">Y</span>
               <span class="icon">Z</span>
            </span>
         </li>
      </ul>
   </li>
</ul>

所以我想做的是将范围 action-button-container 内带有类 icon 的所有范围设置为 color: rgba(0, 0, 0, 0);。 然后,当我将鼠标悬停在带有 node 类的 li 元素上时,将 color: rgba(0, 0, 0, 0.3); 设置为跨越第一个 .action-button-container 子级内的 icon 类。 然后,当我使用 icon 类进行跨度时,我想设置 color: rgba(0, 0, 0, 0.6);

这是我尝试过的演示,但它没有按预期工作:

演示:https://jsfiddle.net/pw9ryrnp/

最佳答案

这是一个损坏的选择器:

.node:hover .action-button-container:first-child .icon {

这是完成你想要的应该是什么:

.node:hover > .action-button-container:first-of-type .icon {

为什么有效:

  1. > 选择器(子组合器)确保规则只适用于 .action-button-container 元素,它们是 .node 悬停(不是孙子。

  2. 您错误地使用了 :first-child,因为该选择器将选择父元素的第一个子元素,而不管它是否与您的类选择器匹配。它找不到任何作为父项的第一个子项的 .action-button-container,因此它从未触发。相反,我们可以使用 :first-of-type,因为这些元素是每个 .node 中的第一个 span

编辑:进行了更多更改以修复警告。

.action-button-container {
  margin-left: 10px;
}

.node .action-button-container .icon {
  color: rgba(0, 0, 0, 0);
}

.node > a:hover + .action-button-container:first-of-type .icon,
.node > .action-button-container:hover .icon {
  color: rgba(0, 0, 0, 0.3);
}

.node > .action-button-container:first-of-type .icon:hover {
  color: rgba(0, 0, 0, 0.6);
}
<ul>
    <li id="ajson1" class="node">
        <a href="#" id="ajson1_anchor">Afrique</a>
        <span class="action-button-container">
          <span class="icon">X</span>
          <span class="icon">Y</span>
          <span class="icon">Z</span>
        </span>
        <ul>
            <li id="ajson2" class="node">
                <a href="#" id="ajson2_anchor">Maroc</a>
                <span class="action-button-container">
                  <span class="icon">X</span>
                  <span class="icon">Y</span>
                  <span class="icon">Z</span>
                </span>
            </li>
            <li id="ajson3" class="node">
                <a href="#" id="ajson3_anchor">Algerie</a>
                <span class="action-button-container">
                  <span class="icon">X</span>
                  <span class="icon">Y</span>
                  <span class="icon">Z</span>
                </span>
            </li>
        </ul>
    </li>
</ul>

关于css - 悬停时更改子跨度的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45763305/

相关文章:

jquery 显示 :block not working correclty when more than 2 divs

javascript - Textarea 在用户输入时扩展其宽度

css - 如何将 CSS 宽度应用于 Firefox 上的提交输入?

html - 如何添加:after :before on submit button?

javascript - jQuery 检测固定元素的背景颜色

css - 按图像调整大小的 Flexbox div

html - 触发器和内容之间没有边框的悬停菜单下拉菜单

html - 当它旁边的 div float 时,div 的填充不起作用?

javascript - 文本如何响应地在 div 中垂直居中对齐

html - iframe 默认高度