是否可以仅使用CSS3转换文本对齐?

时间:2013-08-14 15:22:36

标签: css3 css-transitions

是否可以使用css3转换文本对齐?例如,我想从左到右动画文本对齐,但是,在text-align上添加过渡属性并不起作用。

http://codepen.io/anon/full/lGDwB

5 个答案:

答案 0 :(得分:48)

我发现了一种方法,不仅可以从左到右/从右到左动画,还可以从中心文本中进行动画制作。

诀窍是应用宽度'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>

https://jsfiddle.net/q5kLcfkx/4/

答案 1 :(得分:14)

如果我理解你的目的,一种方法是稍微改变你的布局并为左/右属性设置动画:

Working CodePen

通过将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>

答案 2 :(得分:4)

您可以将文本对齐并增加容器的宽度。

以下是一个示例:CodePen

HTML:

<div class="bg">
  <div class="name">Adam</div>
</div>

CSS:

.bg {
  background: black;
}
.name {
  color: white;
  text-align: right;
  width: auto;
  display: inline-block;
  -webkit-transition-property: width;
  -webkit-transition-duration: 2s;
}
.bg:hover .name {
  width: 100%;
}

答案 3 :(得分:3)

这是一个老问题,但我最近遇到了同样的问题,发现这里的答案不能满足我的用例。

我对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>

答案 4 :(得分:2)

我这样做的方法是简单地使用text-indent而不是text-align。您必须稍微进行试验/错误,以确定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类。它从左到右逐渐消失。

我将此技术与FontAwesome fa-circle图标(content:"\f111";font-family:FontAwesome;)一起使用,以创建一个复选框切换滑块按钮。