今天我在尝试使用一些CSS3,主要是过渡效果。
我想实现的是,在鼠标悬停在li元素上时,背景会从左至右填充成不同的颜色,最好能填充到一半或全部。我已经开始了一个jsfiddle。
我需要使用这个属性吗?
-vendor-prefix transition
有人能给我一些关于如何实现这个的指导吗?
谢谢。
今天我在尝试使用一些CSS3,主要是过渡效果。
我想实现的是,在鼠标悬停在li元素上时,背景会从左至右填充成不同的颜色,最好能填充到一半或全部。我已经开始了一个jsfiddle。
我需要使用这个属性吗?
-vendor-prefix transition
有人能给我一些关于如何实现这个的指导吗?
谢谢。
background: linear-gradient(to left, red 50%, blue 50%) right;
background-size: 200% 100%;
当鼠标悬停时,更改背景位置为left
,并使用transition: all 2s ease;
,位置将逐渐改变(如果使用linear
,效果会更好)。
background-position: left;
关于 -vendor-prefix,请参阅您问题下的评论。
额外说明:
如果您想要颜色中的“transition”效果,您可以将其宽度增加到300%,并使过渡从34%(略大于1/3)开始,到65%结束(略少于2/3)。
background: linear-gradient(to left, red 34%, blue 65%) right;
background-size: 300% 100%;
div {
font: 22px Arial;
display: inline-block;
padding: 1em 2em;
text-align: center;
color: white;
background: red; /* default color */
/* "to left" / "to right" - affects initial color */
background: linear-gradient(to left, salmon 50%, lightblue 50%) right;
background-size: 200%;
transition: .5s ease-out;
}
div:hover {
background-position: left;
}
<div>Hover me</div>
在悬停时,单个CSS代码就可以完成此技巧:
box-shadow: inset 100px 0 0 0 #e0e0e0;
完整演示可在我的JSFiddle中找到:
100px
值需要硬编码,这样在多个宽度不同的元素之间使用该类会更加困难。 - armadadrive也不是最好的选择。可以使用伪元素实现类似的效果:https://jsfiddle.net/f198x4bq/19/。通过在
::before`上过渡变换和不透明度属性,以及在按钮上过渡颜色属性,可以实现相同的效果,并解决@armadadrive指出的问题。 - Phlame<button class="btn btn--animation-from-right">
<span class="btn__text-static">Cover left</span>
<div class="btn__text-dynamic">
<span class="btn__text-dynamic-inner">Cover left</span>
</div>
</button>
.btn {
padding: 10px 20px;
position: relative;
border: 2px solid #222;
color: #fff;
background-color: #222;
position: relative;
overflow: hidden;
cursor: pointer;
text-transform: uppercase;
font-family: monospace;
letter-spacing: -1px;
[class^="btn__text"] {
font-size: 24px;
}
.btn__text-dynamic,
.btn__text-dynamic-inner {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top:0;
left:0;
right:0;
bottom:0;
z-index: 2;
transition: all ease 0.5s;
}
.btn__text-dynamic {
background-color: #fff;
color: #222;
overflow: hidden;
}
&:hover {
.btn__text-dynamic {
transform: translateX(-100%);
}
.btn__text-dynamic-inner {
transform: translateX(100%);
}
}
}
.btn--animation-from-right {
&:hover {
.btn__text-dynamic {
transform: translateX(100%);
}
.btn__text-dynamic-inner {
transform: translateX(-100%);
}
}
}