根据文本是否为多行来对齐文本?

时间:2015-06-05 13:56:48

标签: css css3 text-align

我正在寻找一种CSS解决方案,根据文本是否分成多行而不同地对齐文本。没有Javascript,谢谢。不过,我对边缘浏览器的支持感到满意。

这就是我想要实现的目标:

enter image description here

当文字内容仅填充一行时,我希望它遵守text-align: center;。否则,我希望它是text-align: left

我知道我可以根据以下内容使用Javascript分配不同的类:

  • 字符数
  • 元素高度与行高

但这些解决方案并不通用,并且有很多复杂因素。我正在寻找的是一个CSS(可能是CSS3边缘)解决方案,解决了迄今为止我无法解决的问题。

1 个答案:

答案 0 :(得分:8)

这是一个纯CSS解决方案:



div {
   background-color: yellow;
   width: 200px;
}
  
div span {
   display: inline-block;     
   position: relative;
   left: 50%;       /* move content to the right until the left side is aligned to the middle of the div container (at 100px)  */
   -webkit-transform: translateX(-50%); /* move half of content's width back to the left. This centers content.*/ 
   -moz-transform: translateX(-50%);
   transform: translateX(-50%);
}

<div>
  <span>this is a single line content</span>
</div>
<br />
<div>
  <span>this is a single line</span>
</div>
<hr />
<div>
  <span>this is an example of multi line content</span>
</div>
<br />
<div>
  <span>this is an example of very long multi line content that occupies three rows</span>
</div>
&#13;
&#13;
&#13;

通过将您的内容放在inline-block中,您可以将此类内容的宽度限制在div容器内。

如果您无法在标记中添加额外元素(span),则仍可以使用div来执行您想要的操作

div {
  background-color: yellow;
  max-width: 200px;
  display: inline-block;
  position: relative;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -moz-transform: translateX(-50%);
  transform: translateX(-50%);
}

然而,黄色背景仅覆盖内容区域,而不是200px。我尝试过使用伪元素:before无济于事。