【问题标题】:CSS background (gradient) transition not workingCSS背景(渐变)过渡不起作用
【发布时间】: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);
}

【问题讨论】:

    标签: css hover css-transitions transition


    【解决方案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%}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多