我正在尝试使用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)))
}
15 回答
渐变不支持过渡(尽管当前的规范说它们应该像渐变一样支持通过插值来进行渐变过渡) .
如果想要使用背景渐变的淡入效果,则必须在容器元素上设置 opacity 并“转换”不透明度 .
(已经有一些浏览器版本支持渐变过渡(例如IE10 . 我在IE中测试了2016年的渐变过渡,它们似乎在当时工作,但我的测试代码不再有效 . )
Update: October 2018 具有无前缀新语法的渐变过渡[例如径向渐变(...)]现在确认在Microsoft Edge 17.17134上工作(再次?) . 我不知道什么时候加了 . 仍未使用最新的Firefox和Chrome / Windows 10 .
一种解决方法是转换背景位置以产生渐变正在发生变化的效果:http://sapphion.com/2011/10/css3-gradient-transition-with-background-position/
一个解决方案是使用 background-position to mimic the gradient transition. 这个解决方案几个月前在Twitter Bootstrap中使用 .
Update
http://codersblock.blogspot.fr/2013/12/gradient-animation-trick.html?showComment=1390287622614
这是一个简单的例子:
Link state
Hover state
我知道这是一个古老的问题,但是mabye有人在纯CSS中享受我的解决方案 . 渐变从左向右淡化 .
在下文中,锚标签具有子孙 . 孙子具有远背景梯度 . 近处背景中的孩子是透明的,但有渐变过渡到 . 在悬停时,孩子的不透明度在1秒的时间内从0过渡到1 .
这是CSS:
而且,这是HTML:
以上内容仅在最新版本的Chrome中进行了测试 . 这些是悬停之前,悬停中途和完全转换的悬停图像:
FWIW,这是Sass mixin:
Usage:
@include gradientAnimation(red, blue, .6s);
Mixin:
@mixin gradientAnimation( $start, $end, $transTime ){ background-size: 100%; background-image: linear-gradient($start, $end); position: relative; z-index: 100; &:before { background-image: linear-gradient($end, $start); content: ""; display: block; height: 100%; position: absolute; top: 0; left: 0; opacity: 0; width: 100%; z-index: -100; transition: opacity $transTime; } &:hover { &:before { opacity: 1; } } }
摘自Dave Lunny的这篇精彩文章:https://medium.com/@dave_lunny/animating-css-gradients-using-only-css-d2fd7671e759
您可以使用几个堆叠渐变的不透明度中的过渡来消除渐变之间的过渡,如下面的一些答案中所述:
CSS3 animation with gradients .
您也可以转换位置,如下所述:
CSS3 gradient transition with background-position .
这里还有一些技巧:
Animating CSS3 Gradients .
渐变过渡的部分解决方法是使用插入框阴影 - 您可以转换框阴影本身或背景颜色 - 例如如果您创建与背景颜色相同的嵌入框阴影,而不是在背景颜色上使用过渡,则会产生幻觉,即普通背景正在变为径向渐变
尝试使用:before和:after(ie9)
就像声明的那样 . CSS Transitions目前不支持渐变 . 但是你可以在某些情况下通过将其中一种颜色设置为透明来解决它,以便其他一些包装元素的背景颜色透过,然后转换它 .
我在工作中使用它:) IE6 https://gist.github.com/GrzegorzPerko/7183390
如果您使用文本元素,请不要忘记
<element class="ahover"><span>Text</span></a>
.在codepen上发现了一个很好的hack,修改了
opacity
属性,但是通过利用伪元素实现了从一个渐变到另一个渐变的淡入淡出 . 他所做的是设置一个:after
,这样当你改变实际元素的不透明度时,:after
元素会显示出来,看起来好像它是一个淡入淡出 . 认为分享是有用的 .原始代码:http://codepen.io/sashtown/pen/DfdHh
因为仍然没有正式的方法来发布另一个观点,所以不能伤害 . 写了一个轻量级的jQuery插件,您可以使用它来定义背景径向渐变和转换速度 . 这个基本用法然后让它淡入,使用requestAnimationFrame进行优化(非常流畅):
http://codepen.io/Shikkediel/pen/xbRaZz?editors=001
保持原始背景和所有属性完好无损 . 还有突出显示跟踪作为设置:
http://codepen.io/Shikkediel/pen/VYRZZY?editors=001
根据你问题中的css代码,我尝试了如下代码,它适用于我(运行代码片段),请自己尝试:
根据你问题中的css代码,我尝试了如下代码,它适用于我,请自己尝试:
它适合你吗?改变颜色根据您的需要:)
我希望div看起来像3D球体并通过颜色过渡 . 我发现渐变背景颜色不会转换(尚未) . 我在元素前面放置了一个径向渐变背景(使用z-index),并带有过渡的实体背景 .
然后
div.ball
下面:然后改变了
div.ball
的背景颜色和瞧!https://codepen.io/keldon/pen/dzPxZP