css - 将鼠标悬停在子菜单(第二个 ul 元素)中的任何 li 元素上时,如何更改第一个 ul li 的颜色 - 只有两个 span 图标?

标签 css css-selectors

我试图让我的第一个 ul li span i 类元素(在“a”元素之前和之后)中的两个图标的颜色改变颜色,但我似乎无法正确定位它们。

我已经设法让我的原始代码工作,方法是分别悬停每个 a/图标并更改它们的颜色,但我不想那样。当我将鼠标悬停在第二个(子菜单)li 元素内时,我只想更改父 li 图标的颜色,即只有其父 li 的子菜单事件应该更改图标的颜色

任何解释或学习正确定位的资源都将不胜感激。 只有纯 css 答案谢谢。

这是我的 CSS 和 HTML 代码 -

/* testing if it works by changing background color of li element */
.navigaton li > ul > li:hover .navigaton li{
  background: pink;
}

/* only the face icons(expressions removed from the html code to make it easier) which are being dynmically repeated from my controller needs to change color */
.navigaton li > ul > li:hover .navigaton li span i{
  color: blue;
}
        <md-content layout-padding>
          <div style="padding: 0px 16px;">
            <div ng-model="states.activeItem" ></div>
            <ul class="navigation">
              <div class="" layout="column">
                    <li md-ink-ripple="#ebeef4" ng-repeat="item in items" class="item {{item.id}}" ng-class="{'active': item.id == states.activeItem}" ng-click="states.activeItem=item.title">
                      <span>
                        <i class="material-icons md-24 center-icons">face</i>
                      </span>
                      <a class="title" ng-href="">item 1</a>
                      <span>
                        <i class="material-icons md-18 subicon-openstate" id="test-icons">face</i>
                      </span>
                      <ul class="submenu" id="submenu-item-hover">
                        <li ng-repeat="subItem in item.subItems" class="subItem">
                          <a href=>subitem 1</a>
                        </li>
                      </ul>
                    </li>
                </div>
              </ul>
            </div>

最佳答案

尚不支持任何 CSS 父级选择器。做你想做的事情的唯一方法是使用 Javascript。

这是一个简单的例子,说明如何做到这一点。当悬停子菜单时,Javascript onmouseoveronmouseleave 事件分别在父菜单上添加和删除 active 类。

然后您可以将任何 CSS 规则与您的 li.active 一起应用到您的图标上。

var items = document.querySelectorAll("ul > li > ul > li");

for (var i = 0; i < items.length; i++) {
  items[i].onmouseover = function (event) {
  	var li = event.srcElement;
  	if (li.tagName !== "LI") li = li.parentElement; // if relatedTarget = span inside li, li = relatedTarget.parentElement
    
    var parentLi = li.parentElement.parentElement; // li -> ul -> li
    parentLi.classList.add("active");
  }
  items[i].onmouseleave = function (event) {
  	var li = event.srcElement;
  	if (li.tagName !== "LI") li = li.parentElement; // if relatedTarget = span inside li, li = relatedTarget.parentElement
    
    var parentLi = li.parentElement.parentElement; // li -> ul -> li
    parentLi.classList.remove("active");
  }
}
li.active {
  color: blue;
}
<ul>
  <li><span>Menu 1</span></li>
  <li>
    <span>Menu 2</span>
    <ul>
      <li><span>Submenu 2.1</span></li>
      <li><span>Submenu 2.2</span></li>
      <li><span>Submenu 2.3</span></li>
    </ul>
  </li>
  <li>
    <span>Menu 3</span>
    <ul>
      <li><span>Submenu 3.1</span></li>
      <li><span>Submenu 3.2</span></li>
    </ul>
  </li>
</ul>

关于css - 将鼠标悬停在子菜单(第二个 ul 元素)中的任何 li 元素上时,如何更改第一个 ul li 的颜色 - 只有两个 span 图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303286/

相关文章:

css - 防止某些 URL 接收外部链接样式

html - 我可以将 CSS 样式应用于元素名称吗?

jQuery 选择器 : select anchor tags that are a descendants of a div with a particular id

css - 悬停时使用哪个 css3 选择器选择最后一个子元素?

css - Div随着窗口大小的改变而改变位置

jquery - FancyBox,获取点击项目的ATTR

css - 用伪元素自定义按钮,只是每个按钮上的内容不同如何保持DRY

css - 在不使用任何库和框架的情况下,顶部导航栏和页脚位置不会弄乱页面的其余部分

css - 样式表在 docker 中从 nginx 提供,在页面上不可用

html - 跨单元干扰 td :nth-child(even) logic