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 或使用 javascriptbackground-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背景(渐变)过渡不起作用的主要内容,如果未能解决你的问题,请参考以下文章

背景图像过渡在CSS中不起作用[重复]

Firefox 的背景图像的 CSS3 过渡不起作用

具有线性渐变的CSS过渡[重复]

CSS背景色过渡在特定浏览器中不起作用(桌面+移动)

如何在 CSS 中从 HEX 过渡到渐变? [复制]

CSS3 过渡不起作用