悬停时的线性渐变底部边界



我正试图将linear-gradient应用于border-bottom,而将hover应用于<a>,但没有100%成功。我的目标是,只有在可能的情况下,才使用HTMLCSS

这是我的代码:

a {
  font-size: 30px;
  text-decoration: none;
  color: #666;
  cursor: pointer;
  padding-right: 3%;
  padding-bottom: 3%;
  position: relative;
  display: inline-block;
}
a:after {
  content: '';
  position: absolute;
  left: -50%;
  right: 0%;
  border-top: 0;
  border-left: 0;
  border-right: 0;
  border-image: -webkit-linear-gradient(left, #f0f0f0, #0a389b, #f0f0f0);
  border-image: -moz-linear-gradient(left, #f0f0f0, #8c8b8b, #f0f0f0);
  border-image: -ms-linear-gradient(left, #f0f0f0, #8c8b8b, #f0f0f0);
  border-image: -o-linear-gradient(left, #f0f0f0, #8c8b8b, #f0f0f0);
  transition: all 0.5s linear;
  bottom: 0;
  opacity: 0;
}
a:hover:after {
  border-right: 25vh;
  right: 0%;
  opacity: 1;
}
<div>
  <a href="#">First</a> 
  <a href="#">Second</a> 
  <a href="#">This is the third</a> 
</div>

如您所见,border-bottom不在center中,也不适用于<a> widthwidth

您可以使用此处描述的相同技术:在悬停时从中心展开底部边界,使用两个框阴影在左右边缘创建淡出效果:

a {
  font-size: 30px;
  text-decoration: none;
  color: #666;
  cursor: pointer;
  padding-right: 3%;
  padding-bottom: 3%;
  position: relative;
  display: inline-block;
}
a:after {
  display:block;
  content: '';
  height:4px;
  background:#019fb6;
  transform: scaleX(0.0001);  
  transition: transform 250ms ease-in-out;
  box-shadow: inset -40px 0px 30px -25px #fff, inset 40px 0px 30px -25px #fff;
}
a:hover:after {
  transform: scaleX(1);
}
<div>
  <a href="#">First</a> 
  <a href="#">Second</a> 
  <a href="#">This is the third</a> 
</div>

注意:您需要插入供应商前缀以最大限度地支持浏览器(请参阅canIuse)

您也可以通过将linear-gradient添加为background-image来对其执行此操作。为了实现这一点,背景图像应位于元素的中心底部,其大小最初应设置为X轴上的0%。悬停时,大小应转换为X轴上的100%。渐变在Y轴上的大小是边界的厚度。

在这种方法中,您不需要任何额外的元素,但浏览器对渐变的支持低于对长方体阴影的支持。线性渐变仅适用于IE10+。

a {
  display: inline-block;
  padding-right: 3%;
  padding-bottom: 3%;
  color: #666;
  font-size: 30px;
  text-decoration: none;
  cursor: pointer;
  background-image: -webkit-linear-gradient(left, #f0f0f0, #8c8b8b, #f0f0f0);  
  background-image: linear-gradient(to right, #f0f0f0, #8c8b8b, #f0f0f0);
  background-position: 50% 100%;
  background-size: 0% 4px;
  background-repeat: no-repeat;
  transition: all 0.5s linear;
}
a:hover {
  background-size: 100% 4px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div>
  <a href="#">First</a> 
  <a href="#">Second</a> 
  <a href="#">This is the third</a> 
</div>

正如Can I Use-Notes中所提到的,Safari不支持线性渐变的to [side]语法,因此添加下面的行以获得Safari支持。

background-image: -webkit-linear-gradient(left, #f0f0f0, #8c8b8b, #f0f0f0);

(不要忘记根据浏览器版本添加-webkit-transition

相关内容

  • 没有找到相关文章

最新更新