我知道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>
答案 0 :(得分:2)
我还没有在多个浏览器上对此进行全面测试,但您可能会使用left:50%
和transform:translate(-50%)
技巧以及margin-right:-50%
。把所有这些写在一起感觉很奇怪,但它应该涵盖所有内容。
.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;
此方法适用于大多数现代浏览器,至少是最新版本。我认为唯一值得注意的例外是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)
使用text-align
属性。
答案 3 :(得分:0)
只需使用display: table
和width: 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将使用文本调整大小。一旦达到设定的最大值,它就会停止增长,并限制框内的文字。
.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>