是否可以使用 css3 转换文本对齐?例如,我想为从左到右的文本对齐设置动画,但是,在 text-align 上添加一个过渡属性并不能解决问题。
5 回答
我发现了一种不仅可以从左到右/从右到左制作动画的方法,还可以从居中的文本中制作动画。
诀窍是应用宽度为“0”。
ul {
background: #fff;
padding: 16px;
border: 1px solid #e2e2e2;
}
li {
list-style: none;
letter-spacing: 1px;
font: 12px 'Tahoma';
line-height: 24px;
color: #444;
text-align: center;
white-space: nowrap;
width: 100%;
transition: width .8s ease;
}
ul:hover > li {
width: 0;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<ul>
<li>this</li>
<li>is a list</li>
<li>of entries</li>
<li>with various widths.</li>
<li>hover over it</li>
<li>to apply crazy css magic!</li>
</ul>
</body>
</html>
如果我了解您的目的,一种方法是稍微更改布局并为左/右属性设置动画:
right
通过将span
元素的 设置到屏幕的左侧,这利用了溢出可见的优势。
在悬停时,right
设置为0
,在屏幕上转换元素。
注意:在这种情况下,当向左过渡时,您确实会失去一点缓动,因为它一直过渡到零而不是文本的自然宽度。
.bg {
background: black;
width: 100%;
height: 20px;
position: relative;
}
.name {
color: white;
left: 0;
position: absolute;
text-align: right;
right: 100%;
-webkit-transition-property: all;
-webkit-transition-duration: 2s;
}
.bg:hover .name {
position: absolute;
right: 0;
left: 0;
}
<div class="bg">
<span class="name">Adam</span>
</div>
您可以将文本向右对齐并增加容器的宽度。
.name {
text-align: right;
width: 0px;
transition: width 2s;
/* needed for when the name is more than one word */
white-space: nowrap;
}
.bg:hover .name {
width: 100%;
}
<div class="bg">
<div class="name">Hello world</div>
</div>
这是一个老问题,但我最近遇到了同样的问题,发现这里的答案对我的用例不满意。
我对 dc5 解决方案的最大担忧是它使用动画的慢速位置属性,这对过渡不利,因为它们需要重新布局并且不是硬件加速的。
我的解决方案完全基于并利用了始终基于目标元素的宽度/高度transform: transitionX()
的事实:translate()
这是我的解决方案:
setTimeout(function() {
$('.b').addClass('left');
}, 5000);
.b {
transform: translateX(50%);
transition: transform ease-in-out 1000ms;
}
.c {
display: inline-block;
transform: translateX(-50%);
background: green;
transition: transform ease-in-out 1000ms;
}
.b.left,
.b.left .c {
transform: translateX(0%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="b">
<div class="c">CENTERED TEXT</div>
</div>
我这样做的方法是简单地使用文本缩进而不是文本对齐。您必须进行一些试验/错误才能确定 px、rem、em、% 或任何您想通过文本缩进移动项目的位置。
.tsetup
{
text-indent:0;
transition: text-indent 150ms linear;
}
.tright
{
text-indent:50px; /* adjust me by trial and error */
}
所以,我可以将tsetup
类添加到我的元素中。当我单击它时,我添加了tright
类。当我再次单击它时,我删除了tright
该类。它从左到右做了一个很好的渐变。
我将此技术与 FontAwesomefa-circle
图标一起使用(content:"\f111";font-family:FontAwesome;)
来制作复选框切换滑块按钮。