【发布时间】:2021-08-07 21:56:17
【问题描述】:
我想用div-元素装饰水平导航,该元素会在导航下方“滑动”,具体取决于当前悬停的<li> 项目。
例子:
li:nth-child(1):hover { transform: translateX(100px) };
li:nth-child(2):hover { transform: translateX(200px) };
li:nth-child(3):hover { transform: translateX(300px) };
li:nth-child(4):hover { transform: translateX(400px) };
挑战:直到现在我都无法确定我必须使用哪个 CSS 选择器来移动 div。我已经尝试了this approach 中提到的所有解决方案,但都没有奏效。
示例:
* { list-style-type: none; }
ul { display: flex }
a {
display: block;
padding: 1em;
color: white;
background-color: orange;
}
.red_circle {
display: block;
top: 100px;
height: 50px;
width: 50px;
background-color: red;
}
li:nth-child(1):hover > .red_circle,
li:nth-child(1):hover + .red_circle,
li:nth-child(1):hover .red_circle,
li:nth-child(1):hover ~ .red_circle, {
transform: translatex(400px);
}
<container>
<ul>
<li><a href="#">Test 1</a></li>
<li><a href="#">Test 2</a></li>
<li><a href="#">Test 3</a></li>
<li><a href="#">Test 4</a></li>
</ul>
<div class="red_circle"</div>
</container>
【问题讨论】:
-
使用javascript
mouseover事件监听器 -
@AhmadHabib:我更喜欢纯 CSS 而不是乱用 JavaScript... :-)
-
你不能用 CSS 做你想做的事。如果您只想在任何 li 元素悬停时滑动相同的红色 div,则可以通过将悬停在 ul 上并使用 CSS 同级选择器来获得相同的结果。但是,您是否希望根据悬停在哪个 li 元素上来滑动不同外观的元素?如果是这样,您需要更改 HTML 结构。
标签: html css flexbox css-selectors