绝对定位元素的最大宽度
Max width of absolute positioned element
我有一个居中 div(使用绝对定位和 transform:translate(-50%,-50%),如 here 所述)。当 child div 的内容很短时,一切正常。当内容很长时,那么 child div 宽度被限制在容器的 50% div (可能是因为 left 设置为 50%)。
有没有办法让child div只有在内容很长的时候才展开到全宽?
.container {
position: relative;
display: inline-block;
width: 200px;
height: 200px;
margin-left: auto;
margin-right: auto;
border: 2px solid black;
}
.child {
position: absolute;
transform: translate(-50%, -50%);
left:50%;
top:50%;
background:lightgreen;
}
<div class="container">
<div class="child">short</div>
</div>
<div class="container">
<div class="child">long long long long long long long</div>
</div>
编辑:我在 this 答案中找到了帮助我解决这个问题的解释。
只需将 display: table
添加到 child div,这应该会得到您想要的结果。
.container {
position: relative;
display: inline-block;
width: 200px;
height: 200px;
margin-left: auto;
margin-right: auto;
border: 2px solid black;
}
.child {
display: table;
position: relative;
transform: translate(-50%, -50%);
left: 50%;
top: 50%;
background:lightgreen;
}
<div class="container">
<div class="child">short</div>
</div>
<div class="container">
<div class="child">long long long long long long long</div>
</div>
如果你可以使用 flexbox
你也可以这样做:
.container {
display: inline-flex;
align-items: center;
justify-content: center;
vertical-align: top;
width: 200px;
height: 200px;
border: 2px solid black;
}
.child {
background:lightgreen;
}
<div class="container">
<div class="child">short</div>
</div>
<div class="container">
<div class="child">long long long long long long long</div>
</div>
添加一个额外的嵌套元素,让您更好地控制相关元素的动态定位和缩放。
.container {
position: relative;
display: inline-block;
width: 200px;
height: 200px;
margin-left: auto;
margin-right: auto;
border: 2px solid black;
box-sizing: border-box;
}
.child {
position: absolute;
top: 50%;
left: 0;
right: 0;
text-align: center;
}
.child-inner {
background: lightgreen;
left: 0;
right: 0;
display: inline-block;
}
<div class="container">
<div class="child"><div class="child-inner">short</div></div>
</div>
<div class="container">
<div class="child"><div class="child-inner">long long long long long long long</div></div>
</div>
我有一个居中 div(使用绝对定位和 transform:translate(-50%,-50%),如 here 所述)。当 child div 的内容很短时,一切正常。当内容很长时,那么 child div 宽度被限制在容器的 50% div (可能是因为 left 设置为 50%)。
有没有办法让child div只有在内容很长的时候才展开到全宽?
.container {
position: relative;
display: inline-block;
width: 200px;
height: 200px;
margin-left: auto;
margin-right: auto;
border: 2px solid black;
}
.child {
position: absolute;
transform: translate(-50%, -50%);
left:50%;
top:50%;
background:lightgreen;
}
<div class="container">
<div class="child">short</div>
</div>
<div class="container">
<div class="child">long long long long long long long</div>
</div>
编辑:我在 this 答案中找到了帮助我解决这个问题的解释。
只需将 display: table
添加到 child div,这应该会得到您想要的结果。
.container {
position: relative;
display: inline-block;
width: 200px;
height: 200px;
margin-left: auto;
margin-right: auto;
border: 2px solid black;
}
.child {
display: table;
position: relative;
transform: translate(-50%, -50%);
left: 50%;
top: 50%;
background:lightgreen;
}
<div class="container">
<div class="child">short</div>
</div>
<div class="container">
<div class="child">long long long long long long long</div>
</div>
如果你可以使用 flexbox
你也可以这样做:
.container {
display: inline-flex;
align-items: center;
justify-content: center;
vertical-align: top;
width: 200px;
height: 200px;
border: 2px solid black;
}
.child {
background:lightgreen;
}
<div class="container">
<div class="child">short</div>
</div>
<div class="container">
<div class="child">long long long long long long long</div>
</div>
添加一个额外的嵌套元素,让您更好地控制相关元素的动态定位和缩放。
.container {
position: relative;
display: inline-block;
width: 200px;
height: 200px;
margin-left: auto;
margin-right: auto;
border: 2px solid black;
box-sizing: border-box;
}
.child {
position: absolute;
top: 50%;
left: 0;
right: 0;
text-align: center;
}
.child-inner {
background: lightgreen;
left: 0;
right: 0;
display: inline-block;
}
<div class="container">
<div class="child"><div class="child-inner">short</div></div>
</div>
<div class="container">
<div class="child"><div class="child-inner">long long long long long long long</div></div>
</div>