【发布时间】:2021-04-18 22:58:49
【问题描述】:
假设我们有一个简单的网站水平导航:
|主页 |关于 |产品 |联系方式 |印象| ...或类似的...
在导航上方放置了一个矩形。
现在我想根据当前悬停的导航条目自动水平(左/右)“滑动”这个矩形。
例子:
- 如果条目 2(“关于”)悬停,矩形应向右滑动 5em
- 如果条目 5(“Impress”)悬停,矩形应向右滑动 20em,以此类推。
HTML:
<div id="rectangle"></div>
<ul class="navigation">
<li><a href="#">Entry 1</a></li>
<li><a href="#">Entry 2</a></li>
<li><a href="#">Entry 3</a></li>
<li><a href="#">Entry 4</a></li>
<li><a href="#">Entry 5</a></li>
</ul>
CSS:
我还不确定如何在 CSS 中解决这个问题。我的方法是这样的:
#rectangle {
background-color: powderblue;
width: 10em;
height: 2em;
margin: 0 auto;
position: absolute;
}
ul li:nth-child(1):hover ~ #rectangle {right:0em}
ul li:nth-child(2):hover ~ #rectangle {right:5em}
ul li:nth-child(3):hover ~ #rectangle {right:10em}
ul li:nth-child(4):hover ~ #rectangle {right:15em}
ul li:nth-child(5):hover ~ #rectangle {right:20em}
很遗憾,这并没有按预期工作。我是不是做错了什么?
#rectangle {
background-color: powderblue;
width: 10em;
height: 2em;
margin: 0 auto;
position: absolute;
}
ul li:nth-child(1):hover~#rectangle {
right: 0em
}
ul li:nth-child(2):hover~#rectangle {
right: 5em
}
ul li:nth-child(3):hover~#rectangle {
right: 10em
}
ul li:nth-child(4):hover~#rectangle {
right: 15em
}
ul li:nth-child(5):hover~#rectangle {
right: 20em
}
<div id="rectangle"></div>
<ul class="navigation">
<li><a href="#">Entry 1</a></li>
<li><a href="#">Entry 2</a></li>
<li><a href="#">Entry 3</a></li>
<li><a href="#">Entry 4</a></li>
<li><a href="#">Entry 5</a></li>
</ul>
【问题讨论】:
-
选择器
ul li:nth-child(1):hover ~ #rectangle假定id 为“rectangle”的元素是li元素的兄弟,紧随其后。您的标记并非如此。见developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors -
也不可能,因为
li的唯一有效兄弟是其他lis。也许让矩形成为li?请注意,right从右侧调整元素的位置,因此具有较高right值的元素实际上比具有较小right值的元素更靠左。