css - 结合 last-of-type 和 hover

标签 css hover css-selectors

我有以下 html 结构:

<ul>
    <li>
        <a href="#"> Superlevel 1 </a>
        <span class="actions">Somes actions</span>
        <ul>
            <li>
                <a href="#">Level 1 </a>
                <span class="actions">Other actions</span>
                <ul>
                    <li>
                        <a href="#">Sub-Level1</a>
                        <span class="actions">Sub Level actions</span>
                    </li>
                    <li>
                        <a href="#">Sub-Level1</a>
                        <span class="actions">Sub Level actions</span>
                    </li>
                </ul>
            </li>
        </ul>
    <li>
</ul>

CSS 是这样的:

.treeview li .actions {
    float: left;
    padding: 0 15px;
    visibility: hidden;
}

.treeview li:hover > .actions {
    visibility: visible;
}

问题是,当我将鼠标移到最后一个 li(子级 1)上时,会显示其父级 Level1 和 Superlevel1 的 .actions。我只想显示 sub-level1 .actions。

所以我尝试通过以下方式替换最后一个 css block :

.treeview li:hover:last-of-type > .actions {
    visibility: visible;
}

但是 last-of-type 伪选择器应用于 li 而不是 li:hover

知道如何组合这两个伪选择器吗?

最佳答案

问题是,当您将鼠标悬停在内部 li 上时列表项,您也将鼠标悬停在外层 li 上元素。所以当规则

ul.treeview > li > ul > li:hover

被匹配,下面的规则也被匹配:

ul.treeview > li:hover

您需要的是一种表达“我将鼠标悬停在子项上而不是父项上”的方式,我认为最简单的方法是修改 html(抱歉!)。

因为每个li包含其所有子项,您不应该使用 :hover li 上的属性.相反,制作一个仅包含您真正想要的东西的元素 :hover适用于:

<ul class="treeview">
  <li>
    <div class="itemcontent">
      <a href="#">Level 1</a>
      <span class="actions">Action A</span>
    </div>
    <ul>
      <li>
        <div class="itemcontent">
          <a href="#">Level 2</a>
          <span class="actions">Action B</span>
        </div>
        <ul>
          <li>
            <div class="itemcontent">
              <a href="#">Level 3</a>
              <span class="actions">Action C</span>
            </div>
          </li>
          <li>
            <div class="itemcontent">
              <a href="#">Level 3</a>
              <span class="actions">Action D</span>
            </div>
          </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

所以在这个例子中,我使用了 <div class="itemcontent">只包装我想应用到我的悬停目标的东西。然后 CSS 与您的 CSS 非常相似,只是替换了 li:hover。与 .itemcontent:hover .

.treeview .actions {
    float: left;
    padding: 0px 15px;
    visibility: hidden;
}

.treeview .itemcontent:hover > .actions {
    visibility: visible;
}

JSFiddle:http://jsfiddle.net/H8B5P/

关于css - 结合 last-of-type 和 hover,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19155781/

相关文章:

css :hover not working as hoped in safari only, 找到了一些接近的答案,但没有一个解决。请帮忙 :)

css - SCSS(SASS)选择器顺序对嵌套类是否重要

javascript - 将每行文本中的第一个单词大写

html - 更改每个偶数 div 中链接的颜色

css - 使背景 div 以浏览器大小响应加载

javascript - 显示/隐藏 div 的选择/事件类

jquery - 在绝对定位的元素上向左浮动

css - Bootstrap 3 - 2 列嵌套行

r - 添加悬停效果,例如一个(大)绘图表的工具提示?

html - 动画 anchor 标记内的 fontawesome 图标以在悬停时飞行