CSS背景(渐变)过渡不起作用
Posted
技术标签:
【中文标题】CSS背景(渐变)过渡不起作用【英文标题】:CSS background (gradient) transition not working 【发布时间】:2013-07-30 22:06:35 【问题描述】:我的 a 标签上的 CSS 过渡没有淡入淡出,就像根本没有过渡一样!我也尝试过使用transition: background 300ms ease-in-out;
,但仍然没有运气
CSS:
.FeatureRow a
padding: 10px;
display: block;
width: 260px;
height: auto;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-webkit-box-shadow: 0px 4px 8px #f5f5f5;
-moz-box-shadow: 0px 4px 8px #f5f5f5;
box-shadow: 0px 4px 8px #f5f5f5;
background-image: -moz-linear-gradient(top,#fbfbfb,#ffffff);
background-image: -webkit-gradient(linear,0 0,0 100%,from(#fbfbfb),to(#ffffff));
background-image: -webkit-linear-gradient(top,#fbfbfb,#ffffff);
background-image: -o-linear-gradient(top,#fbfbfb,#ffffff);
background-image: linear-gradient(to bottom,#fbfbfb,#ffffff);
background-repeat: repeat-x;
transition: all 300ms ease-in-out;
-webkit-transition: all 300ms ease-in-out;
-moz-transition: all 300ms ease-in-out;
-ms-transition: all 300ms ease-in-out;
-o-transition: all 300ms ease-in-out;
.FeatureRow a:hover
background-image: -moz-linear-gradient(top,#C00,#C0F);
background-image: -webkit-gradient(linear,0 0,0 100%,from(#C00),to(#C0F));
background-image: -webkit-linear-gradient(top,#C00,#C0F);
background-image: -o-linear-gradient(top,#C00,#C0F);
background-image: linear-gradient(to bottom,#C00,#C0F);
【问题讨论】:
【参考方案1】:正如 Adrift 所说,这是不支持的;你必须模拟它。
这是CSS
.FeatureRow
padding: 10px;
display: block;
position: relative;
width: 260px;
height: 70px;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
background-image: linear-gradient(0deg,white,gray);
.FeatureRow:after
content: '';
position: absolute;
left: 0px;
top: 0px;
right: 0px;
bottom: 0px;
background-image: linear-gradient(0deg,red,magenta);
opacity: 0;
transition: all 3s ease-in-out;
.FeatureRow:hover:after
opacity: 1;
我们正在用伪元素覆盖您的 div。每个都有一个渐变。伪元素的不透明度设置为 0;当您将其悬停时,您将不透明度更改为 1;并且可以转换此属性。
demo
【讨论】:
不幸的是,这不适用于按钮 欣赏它,这对我有用!【参考方案2】:如其他答案中所述,无法为渐变设置动画。但是,可以为 背景色 设置动画。了解这一点后,您可以在背景颜色上叠加一个透明渐变,这将允许您为渐变中的一种颜色设置动画。
为此,请选择您要设置动画的颜色,将其设置为 背景色,然后将 rgba(0,0,0,0)
(透明)放在其位置。
那么你所要做的就是在 :hover 或使用 javascript 将 background-color 更改为你想要的值
这只适用于过渡渐变的一种颜色。但我认为过渡渐变仍然是一个不错的选择
.squareTile
background: radial-gradient(#203244eb, rgba(0,0,0,0), #203244eb);
background-color: #3596ff;
border-radius: 10px;
width: 100px;
height: 100px;
border: 1px solid black;
cursor: pointer;
transition: 1s;
.squareTile:hover
background-color: #77c577;
<div class="squareTile">
</div>
【讨论】:
这实际上是一个相当聪明的答案。当然,它在非常情况下不会起作用,但要跳出框框思考!【参考方案3】:遗憾的是,目前任何浏览器都没有为动画(或过渡)使用渐变supported。查看Transitions 模块中的this list 以获取所有当前动画属性的列表
【讨论】:
是否可以使用背景图像,然后使用过渡以仅使用背景颜色“覆盖”图像? 很遗憾,您也不能这样做,因为背景图像是不可动画的。看看我的答案中的列表。 太棒了.. 这证明了所有这些新的 CSS3 技巧都变得复杂而无用。【参考方案4】:如前所述,可以对背景渐变进行动画处理,并且目前有一个非常好的工具可以让您使用该功能:
https://www.gradient-animator.com/
示例输出:
.css-selector
background: linear-gradient(270deg, #8ccebd, #146e57);
background-size: 400% 400%;
animation: AnimationName 5s ease infinite;
@keyframes AnimationName
0%background-position:0% 50%
50%background-position:100% 50%
100%background-position:0% 50%
【讨论】:
以上是关于CSS背景(渐变)过渡不起作用的主要内容,如果未能解决你的问题,请参考以下文章