如何将div中绝对定位元素中的可变长度文本居中?

时间:2017-06-13 20:43:37

标签: html css

我知道how to center absolute positioned element in div的解决方案。但我的情况是,我有一个可变长度的文本,而不是固定长度的div。

我希望div保持文本的长度,同时保持居中。我想我可以使用js以编程方式更改宽度,但这听起来太乱了,是否有纯粹的CSS解决方案?

示例:http://jsfiddle.net/tling/3KTUM/307/

.outer_div {
  background-color: #999;
  border: 0px solid black;
  width: 300px;
  height: 200px;
  float: left;
  position: relative;
}

.inner_div {
  position: absolute;
  background-color: #BBB;
  width: 100px;
  /*adjustable width with text ?*/
  height: 50px;
  color: black;
  margin: 0 auto;
  right: 0;
  left: 0;
}
<div class="outer_div">
  <div class="inner_div">Text Text Text</div>
</div>

5 个答案:

答案 0 :(得分:2)

我还没有在多个浏览器上对此进行全面测试,但您可能会使用left:50%transform:translate(-50%)技巧以及margin-right:-50%。把所有这些写在一起感觉很奇怪,但它应该涵盖所有内容。

&#13;
&#13;
.outer_div
{
  background-color: #999; 
  border: 0px solid black; 
  width: 300px; 
  height: 200px; 
  /*float:left; */
  position: relative;
}

.inner_div
{
  position: absolute; 
  background-color: #BBB; 
  display:inline-block;
  color:black; 
  left:50%;
  margin-right: -50%;
  transform: translateX(-50%);
}
&#13;
<div class="outer_div" style="" >
		<div class="inner_div">Text Length May Change  </div>  
</div>
<br>
<div class="outer_div" style="" >
		<div class="inner_div">Change  </div>  
</div>
<br>
<div class="outer_div" style="" >
		<div class="inner_div">Text Length May Change  Text Length May Change  </div>  
</div>
&#13;
&#13;
&#13;

试验:

此方法适用于大多数现代浏览器,至少是最新版本。我认为唯一值得注意的例外是Safari 8。

https://www.browserstack.com/screenshots/0d780368ad54ecdd31cf5c62e70ff79f2b9a5a11

答案 1 :(得分:2)

使用flexbox可以解决问题。我冒昧地将内部div的宽度最大化等于外部div。

.outer_div {
  background-color: #999;
  border: 0px solid black;
  width: 300px;
  height: 200px;
  display: flex;
  justify-content: space-around;
  align-items: center;
}

.inner_div {
  background-color: #BBB;
  width: auto;
  max-width: 300px;
  /*adjustable width with text ?*/
  height: 50px;
  color: black;
}
<div class="outer_div">
  <div class="inner_div">Text Text Text</div>
</div>

答案 2 :(得分:0)

答案 3 :(得分:0)

只需使用display: tablewidth: auto;

即可
.inner_div {
    position: relative;
    background-color: #BBB;
    width: auto;
    height: 50px;
    color: black;
    margin: 0 auto;
    display: table;
}

答案 4 :(得分:0)

我会在这里使用flexbox,因为它是最简单,最灵活的选择。 另外,您可能需要考虑使用“max-width”,而不是使用“width”。这意味着在某个点之下,您的div将使用文本调整大小。一旦达到设定的最大值,它就会停止增长,并限制框内的文字。

More information on flexbox.

.outer_div {
  background-color: #999;
  border: 0px solid black;
  width: auto;
  max-width: 300px;
  height: 200px;
  display: flex;
  justify-content: center;
  align-items: center; /* Vertical alignment, use "flex-start" for top align */
}

.inner_div {
  background-color: #BBB;
  width: auto;
  max-width: 300px; /* Max-width will prevent uncontrolled growth */
  height: 50px;
  color: black;
}
<div class="outer_div">
  <div class="inner_div">Variable text length.</div>
</div>