我试图在悬停时用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)))
}
渐变还不支持过渡(尽管目前的规范说它们应该通过插值支持类似渐变到类似渐变的过渡)。
如果你想要一个背景渐变的渐隐效果,你必须在容器元素上设置一个不透明度,然后“过渡”不透明度。
(已经有一些浏览器版本支持渐变过渡(例如IE10。我在2016年在IE中测试了梯度转换,当时它们似乎可以工作,但我的测试代码不再工作了。)
更新:2018年10月
带有无前缀新语法的渐变过渡[例如径向渐变(…)]现在确认在Microsoft Edge 17.17134上工作(再次?)我不知道这是什么时候加入的。在最新的Firefox和Chrome / Windows 10上仍然不能工作。
更新:2021年12月
在最近的基于Chromium的浏览器中,使用@property的变通方法可以实现这一点(但在Firefox中不起作用)。请在YMMV上方看到@mahozad的回答(并点赞)。
::之前,CSS伪元素可以很容易地做到这一点!
.element {
位置:相对;
宽度:200 px;
身高:150 px;
背景图像:线性梯度(45度,蓝色,水);
z - index: 2;
}
{前.element::
位置:绝对的;
内容:“”;
插图:0;/*与{top: 0相同;右:0;底部:0;左:0;}* /
背景-图像:线性梯度(底部,红色,橙色);
z - index: 1;
透明度:0;
过渡:不透明度0.25s线性;
}
{前.element:徘徊::
透明度:1;
}
身体< >
< div class = "元素" > < / div >
身体< / >
你所要做的就是使用::before不透明度为零的伪元素。
打开:悬停,切换::before的不透明度为1,如果你遵循几个简单的步骤,你应该可以让你的过渡工作。
使用background-image设置元素的背景渐变
在不透明度为0的伪元素之前使用::来设置下一个渐变
设置不透明度为1 inside:hover::before
确保你的::before有:
绝对位置
内容:“
比默认元素更低的z-index
顶部,底部,左侧和右侧为零(或简单地插入:0)
过渡目标不透明度与您的偏好的时间间隔
就是这样!现在你应该可以用你喜欢的任何持续时间/延迟/计时函数来调整你的过渡!
在codepend上发现了一个很好的hack,可以修改不透明度属性,但通过利用伪元素实现从一个渐变到另一个渐变。他所做的就是设置:after,这样当你改变实际元素的不透明度时,:after元素就会显示出来,看起来就像渐变一样。我觉得分享一下会有用。
原始代码来源:http://codepen.io/sashtown/pen/DfdHh
.button {
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, #6d8aa0, #8ba2b4);
-webkit-backface-visibility: hidden;
z-index: 1;
}
.button:after {
position: absolute;
content: '';
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 0.3em;
background-image: linear-gradient(to top, #ca5f5e, #d68584);
transition: opacity 0.5s ease-out;
z-index: 2;
opacity: 0;
}
.button:hover:after {
opacity: 1;
}
.button span {
position: relative;
z-index: 3;
}
body {
text-align: center;
background: #ddd;
}
<a class="button" href="#"><span>BUTTON</span></a>
我想让div看起来像一个3D球体,并通过颜色过渡。
我发现渐变背景色还不能过渡。
我在元素前面放置了一个径向梯度背景(使用z-index),并带有一个过渡的固体背景。
/* overlay */
z-index : 1;
background : radial-gradient( ellipse at 25% 25%, rgba( 255, 255, 255, 0 ) 0%, rgba( 0, 0, 0, 1 ) 100% );
然后下面的div.ball:
transition : all 1s cubic-bezier(0.25, 0.46, 0.45, 0.94);
然后改变div.ball的背景颜色,瞧!
https://codepen.io/keldon/pen/dzPxZP
一个更简洁的解决方案是设置背景色并使用蒙版图像。
#container div a {
background-color: blue;
transition: background 0.2s linear;
width: 200px;
height: 150px;
mask-image: radial-gradient(circle at 50% 50%, rgba(0, 0, 0, .7), rgba(0, 0, 0, .4));
}
#container div a:hover {
background-color: red;
}