我有一个横幅,当悬停在显示一个“下划线”在底部的容器。目前,它是使用::after
实现的,功能非常完美,但我不喜欢对bottom: -65px
如此具体,它感觉有点笨拙,没有真正的响应。
例如,如果横幅不是150px,那么下划线将关闭。
在这个用例中,有没有一种方法可以避免对底部使用特定的px值?
body {
margin: 0;
}
.banner {
height: 150px;
background-color: lightpink;
display: flex;
justify-content: center;
align-items: center;
}
ul {
display: flex;
align-items: center;
gap: 25px;
}
ul li {
list-style: none;
}
ul li a {
position: relative;
text-decoration: none;
}
ul li a::after {
position: absolute;
bottom: -65px;
left: 0;
right: 0;
width: 0%;
content: '';
color: transparent;
background: black;
height: 3px;
}
ul li a:hover::after,
ul li a:active::after {
transition: all 0.2s;
width: 100%;
}
<div class="banner">
<ul>
<li><a href="">Option 1</a></li>
<li><a href="">Option 1</a></li>
<li><a href="">Option 1</a></li>
</ul>
</div>
2条答案
按热度按时间sqougxex1#
一种可能的方法是让
a
元素占据所有可用的高度,这样你就可以在伪元素上指定bottom: 0;
,如下所示:另一种方法是使用CSS变量来指定头部的高度,并相应地调整伪元素的位置。
在下面的示例中,您可以通过更改
--banner-height: 150px;
的值来更改横幅的高度,伪元素的位置将与margin-bottom: calc(var(--banner-height) / -2);
相适应(* 请注意,y还将bottom
的值更改为50%
*)。ih99xse12#
整个
::after
都不是必需的。可以使用
border-bottom
声明:正如你所看到的,结果会有所不同。您可以通过编辑
a
的高度来更改垂直位置。这可能不是你要找的,因为下划线不会滑出,它只会“出现”。