悬停时的线性渐变底部边框
linear gradient bottom border on hover
我正在尝试将 linear-gradient
应用到 border-bottom
上的 hover
应用到 <a>
但它没有 100% 起作用 我的目标是用HTML 和 CSS 仅在可能的情况下。
这是我的代码:
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>
width
中的width
。
您可以使用此处描述的相同技术: with two box-shadows 在左右边缘创建淡出效果:
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
也取决于浏览器版本)。
我正在尝试将 linear-gradient
应用到 border-bottom
上的 hover
应用到 <a>
但它没有 100% 起作用 我的目标是用HTML 和 CSS 仅在可能的情况下。
这是我的代码:
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>
width
中的width
。
您可以使用此处描述的相同技术:
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
也取决于浏览器版本)。