悬停子目标嵌套元素

Hover child target nested element

我正在构建一个水平导航,分为 5 个项目。第三项是网站的标志。我想在其他项目上创建悬停效果并定位徽标。 是否有用于悬停 .main-nav-item 和定位 .logo 的纯 css 解决方案?

html:

<nav class="main-nav close-nav">
  <ul id="menu" class="main-nav-list">
    <li class="main-nav-item"></li>
    <li class="main-nav-item"></li>
    <li>
      <a href="">
        <div id="main-nav-home" class="main-nav-home">
          <span class="main-nav-title"></span>
          <span class="main-nav-subtitle"></span>
          <div class="main-nav-logo">
            <div class="logo">
          </div>
        </div>
        </div>
      </a>
    </li>
    <li class="main-nav-item"></li>
    <li class="main-nav-item"></li>
  </ul>
</nav>

提前致谢!

使用.parent-class:hover .target-child: { ... }

参考live example code或遵循css代码。

nav {
  background-color: gray;
}

.main-nav-item:hover {
  color: red;
}

.main-nav:hover .logo {
  color: blue;
}

正如我在评论中提到的,通过重组菜单并利用 flexbox 和 order 我们可以将徽标放在菜单的末尾,但是 视觉上 它出现在中间。

由于可以通过参考任何先前的兄弟来选择最后一个 child,我们可以实现 OP 正在寻找的效果,并让每个先前的兄弟以不同方式影响最后一个 child。

FWIW:

nav {
  text-align: center;
}
ul {
  list-style-type: none;
  display: inline-flex;
}
a {
  text-decoration: none;
  padding: 1em;
  color: #000;
  font-weight: bold;
  border: 1px solid green;
}
li {
  order: 3
}
li:nth-child(1),
li:nth-child(2) {
  order: 1;
}
.logo {
  order: 2;
}
.logo a {
  background: lightblue;
}
.logo:hover a {
  background: plum;
}
li:nth-child(1):hover ~ .logo a {
  background: lightgreen;
}
li:nth-child(2):hover ~ .logo a {
  background: green;
}
li:nth-child(3):hover ~ .logo a {
  background: red;
}
li:nth-child(4):hover ~ .logo a {
  background: grey
}
<nav role='navigation'>
  <ul>
    <li><a href="#">Home</a>
    </li>
    <li><a href="#">About</a>
    </li>
    <li><a href="#">Clients</a>
    </li>
    <li><a href="#">Contact Us</a>
    </li>
    <li class="logo"><a href="#">Logo</a>
    </li>
  </ul>
</nav>

注意:显然这个解决方案有点不灵活,不能很好地扩展,但选项是存在的。