我试图在悬停时用css过渡缩略图,这样在悬停时,背景渐变就会淡入。转换没有工作,但如果我简单地将其更改为rgba()值,它就可以工作。不支持渐变吗?我也尝试使用图像,它也不会过渡图像。
我知道这是可能的,因为在另一篇文章中有人做到了,但我不知道具体是怎么做到的。这里有一些CSS工作:
#container div a {
-webkit-transition: background 0.2s linear;
-moz-transition: background 0.2s linear;
-o-transition: background 0.2s linear;
transition: background 0.2s linear;
position: absolute;
width: 200px;
height: 150px;
border: 1px #000 solid;
margin: 30px;
z-index: 2
}
#container div a:hover {
background: -webkit-gradient(radial, 100 75, 100, 100 75, 0, from(rgba(0, 0, 0, .7)), to(rgba(0, 0, 0, .4)))
}
2021年:现在可以动画渐变了(Firefox和Safari还不行)
随着Chrome 85, Edge和Opera添加了对@property规则的支持,现在我们可以在CSS中这样做:
@property --myColor1 {
syntax: '<color>';
initial-value: magenta;
inherits: false;
}
@property --myColor2 {
syntax: '<color>';
initial-value: green;
inherits: false;
}
其余都是常规的CSS。
设置变量为初始渐变颜色,并设置这些变量的过渡:
div {
/* Optional: change initial value of the variables */
/* --myColor1: #f64; --myColor2: brown; */
background: linear-gradient(var(--myColor1), var(--myColor2));
transition: --myColor1 3s, --myColor2 3s;
}
然后,在所需的规则上,为变量设置新的值:
div:hover {
--myColor1: #f00;
--myColor2: yellow;
}
@property——myColor1 {
语法:“< >颜色”;
初值:# 0 f0;
继承:错误;
}
@property——myColor2 {
语法:“< >颜色”;
初始值:rgb(40,190,145);
继承:错误;
}
div {
宽度:200 px;
身高:100 px;
background: linear-gradient(var(——myColor1), var(——myColor2));
——myColor1 3s,——myColor2 3s;
}
div:{徘徊
——myColor1:红色;
——myColor2: # E1AF2F;
}
<div>悬停在我上方</div>
在这里查看完整的描述和示例,并参考这里的@property规范。
@property规则是CSS Houdini技术的一部分。要了解更多信息,请参考这里和这里,并观看这个视频。
基于你的问题中的css代码,我已经尝试代码如下,它为我工作(运行代码片段),请自己尝试:
#container div a {
display: inline-block;
margin-top: 10%;
padding: 1em 2em;
font-size: 2em;
color: #fff;
font-family: arial, sans-serif;
text-decoration: none;
border-radius: 0.3em;
position: relative;
background-color: #ccc;
background-image: linear-gradient(to top, #C0357E, #EE5840);
-webkit-backface-visibility: hidden;
z-index: 1;
}
#container div a:after {
position: absolute;
content: '';
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 0.3em;
background-image: linear-gradient(to top, #6d8aa0, #343436);
transition: opacity 0.5s ease-out;
z-index: 2;
opacity: 0;
}
#container div a:hover:after {
opacity: 1;
}
#container div a span {
position: relative;
z-index: 3;
}
<div id="container"><div><a href="#"><span>Press Me</span></a></div></div>
基于你的问题中的css代码,我已经尝试代码如下,它为我工作,请自己尝试:
#container div a {
display: inline-block;
margin-top: 10%;
padding: 1em 2em;
font-size: 2em;
color: #fff;
font-family: arial, sans-serif;
text-decoration: none;
border-radius: 0.3em;
position: relative;
background-color: #ccc;
background-image: linear-gradient(to top, #C0357E, #EE5840);
-webkit-backface-visibility: hidden;
z-index: 1;
}
#container div a:after {
position: absolute;
content: '';
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 0.3em;
background-image: linear-gradient(to top, #6d8aa0, #343436);
transition: opacity 0.5s ease-out;
z-index: 2;
opacity: 0;
}
#container div a:hover:after {
opacity: 1;
}
#container div a span {
position: relative;
z-index: 3;
}
这对你有用吗?
根据您的需要更改颜色:)
一种解决方案是使用背景位置来模拟梯度过渡。
几个月前,Twitter Bootstrap就使用了这个解决方案。
更新
http://codersblock.blogspot.fr/2013/12/gradient-animation-trick.html?showComment=1390287622614
这里有一个简单的例子:
链接状态
.btn {
font-family: "Helvetica Neue", Arial, sans-serif;
font-size: 12px;
font-weight: 300;
position: relative;
display: inline-block;
text-decoration: none;
color: #fff;
padding: 20px 40px;
background-image: -moz-linear-gradient(top, #50abdf, #1f78aa);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#50abdf), to(#1f78aa));
background-image: -webkit-linear-gradient(top, #50abdf, #1f78aa);
background-image: -o-linear-gradient(top, #50abdf, #1f78aa);
background-image: linear-gradient(to bottom, #50abdf, #1f78aa);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff50abdf', endColorstr='#ff1f78aa', GradientType=0);
background-repeat: repeat-y;
background-size: 100% 90px;
background-position: 0 -30px;
-webkit-transition: all 0.2s linear;
-moz-transition: all 0.2s linear;
-o-transition: all 0.2s linear;
transition: all 0.2s linear;
}
悬停状态
.btn:hover {
background-position: 0 0;
}
发布另一个视图也无妨,因为仍然没有一个官方的方法来做到这一点。写了一个轻量级的jQuery插件,你可以用它来定义背景径向渐变和过渡速度。这个基本的用法会让它淡入,用requestAnimationFrame优化(非常流畅):
$('#element').gradientFade({
duration: 2000,
from: '(20,20,20,1)',
to: '(120,120,120,0)'
});
http://codepen.io/Shikkediel/pen/xbRaZz?editors=001
保持原始背景和所有属性完整。也有高亮跟踪作为设置:
http://codepen.io/Shikkediel/pen/VYRZZY?editors=001