我想让内容设置为动画,以便字母从“T”向右滑动。
以下是jsfiddle以下内容:
.two {
width: auto;
-webkit-transition: all 1s ease;
}
.two:before {
content: "T";
width: auto;
}
.two:hover {
width: auto;
}
.two:hover:before {
display: none;
}
.two:hover:after {
content: "This is a Label";
width: auto
}
<div class="two">
</div>
答案 0 :(得分:5)
您可以通过合并svg
&#39; linearGradient
和mask
并使用JavaScript来移动x1
和{{来设置每个字母的不透明度。 1}} x2
linearGradient
和mouseover
事件的mouseleave
属性。
var grad = document.getElementById('gradient');
// higher 'animSpeed' yeilds lower speed
var animSpeed = 20;
var two = document.getElementsByClassName('two')[0];
two.addEventListener('mouseenter', function() {
for (i = 0; i < two.offsetWidth; i++) {
var anim = setTimeout(function() {
var x1 = (parseInt(grad.getAttribute('x1').slice(0, -1), 10) + 1) + '%';
var x2 = (parseInt(grad.getAttribute('x2').slice(0, -1), 10) + 1) + '%';
grad.setAttribute('x1', x1);
grad.setAttribute('x2', x2);
}, animSpeed * i)
}
});
two.addEventListener('mouseleave', function() {
for (i = 0; i < two.offsetWidth; i++) {
var anim = setTimeout(function() {
var x1 = (parseInt(grad.getAttribute('x1').slice(0, -1), 10) - 1) + '%';
var x2 = (parseInt(grad.getAttribute('x2').slice(0, -1), 10) - 1) + '%';
grad.setAttribute('x1', x1);
grad.setAttribute('x2', x2);
}, animSpeed * i)
}
})
&#13;
<svg>
<defs>
<linearGradient id="gradient" x1="-15%" y1="0%" x2="0%" y2="0%">
<stop stop-color="white" offset="0" />
<stop stop-color="black" offset="1" />
</linearGradient>
<mask id="mask" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox">
<rect width="1" height="1" fill="url(#gradient)" />
</mask>
</defs>
<foreignObject width="90px" height="100%" x="2" y="12" mask="url(#mask)">
<div class="two">This is a label</div>
</foreignObject>
</svg>
&#13;
您可以transition
transform
属性。
的 Updated Fiddle 强>
.two {
display: block;
width: 300px;
padding: 15px;
}
.two:before {
content: "T";
}
.two:hover:before {
display: none;
}
.two:after {
position: absolute;
content: "This is a Label";
transform: translateX(-150%);
transition: transform 1s ease;
}
.two:hover:after {
content: "This is a Label";
transform: translateX(0%);
}
&#13;
<div class="two"></div>
&#13;
答案 1 :(得分:2)
:before
掩码如果您只想使用CSS,我们可以创建一个在文本上滑动的面具,然后向右推动以显示div中的文本。
.two {
width: 100px;
position: relative;
overflow: hidden;
}
.two:before {
content: '';
position: absolute;
left: 0.6em;
top: 0;
height: 100%;
width: 100%;
background: #FFF;
transition: left 1s;
}
.two:hover:before {
left: 100%;
}
.color:before {
background: #F00;
}
&#13;
<div class="two">This is a Label</div>
It looks like this (hover):
<div class="two color">This is a Label</div>
&#13;
答案 2 :(得分:1)
只有:before
和:after
psuedo元素才能实现这一点。我建议采用另一种类似的方法。
/* start SLIDE-IN code */
.two > .capitalT > .else {
position: relative;
left: -100px;
opacity: 0;
transition: left 0.5s, opacity 0.5s;
}
.two > .capitalT:hover > .else {
left: 0;
opacity: 1;
}
/* end SLIDE-IN code */
<div class="two"><span class="capitalT"><span class="t">T</span><span class="else">his is a Label</span></span>
</div>
答案 3 :(得分:1)