如何在与父元素相同的宽度后定义伪元素::

时间:2018-11-07 21:22:02

标签: html css

.list li::after{
    content:" ";
    width:100%;
    display: block;
    position: absolute;
    height: 2px;
    background-color: green;
}
ul li a{
    display: inline-block;
    padding: 10px 20px;
    line-height: 1.5;
    font-size: 0.9em;
    color: white;
    text-transform: uppercase;
    font-weight: bold;
    text-decoration: none;
    margin: 0 2.5px;
}

HTML

<ul>
<li><a href="#contact">contact</a></li>
</ul>

当我越过鼠标li标签时,我想在其后面放衬纸,但是衬纸的宽度应与他的li相同。同样,我不知道在`:hover之后如何激活::after

2 个答案:

答案 0 :(得分:0)

我建议在<a>元素上使用border-bottom。您可以使用padding-bottom控制此下划线与文本的距离。

这完全避免了使用::after的情况,如下所示:

body {
  background: black;
}

ul li a {
  display: inline-block;
  /*padding: 10px 20px;*/
  line-height: 1.5;
  font-size: 0.9em;
  color: white;
  text-transform: uppercase;
  font-weight: bold;
  text-decoration: none;
  margin: 0 2.5px;
  padding-bottom: 10px;
  border-bottom: 1px solid green;
}
<ul>
  <li><a href="#contact">contact</a></li>
</ul>

请注意,线(边框)的宽度由元素上的水平padding控制。我在上面的示例中对此填充进行了注释,以显示与链接完全相同的宽度的行。

答案 1 :(得分:0)

使用简单的渐变:

ul li a {
  display: inline-block;
  padding: 10px 20px;
  line-height: 1.5;
  font-size: 0.9em;
  text-transform: uppercase;
  font-weight: bold;
  text-decoration: none;
  margin: 0 2.5px;
  
  background-image:linear-gradient(green,green);
  background-size:0% 2px;
  background-position:bottom left;
  background-repeat:no-repeat;
  transition:1s all;
}
a:hover {
  background-size:100% 2px;
}
<ul>
  <li><a href="#contact">contact</a></li>
</ul>