我有一个包装器div元素,它包含一个div,里面又包含div;这些div在运行时添加或删除。 HTML和CSS看起来像这样:
<div id="Wrapper">
<div class="InnerGreen">
<div class="InnerContent"></div>
<div class="InnerContent"></div>
</div>
</div>
#Wrapper{
width:600px;
height:50px;
margin:10px 20px;
background:blue;}
.InnerGreen{
background:green;
margin:10px auto; // this doesn't center
overflow:hidden;
display:inline-block;}
.InnerContent{
background:yellow;
height:30px;
width:40px;
float:left;
margin:3px 5px;}
我正在使用inline-block
将.InnerGreen
包裹在Wrapper
内;但是,margin:auto
似乎并没有将div水平居中。当然,如果我定义.InnerGreen
的宽度,这是有效的,但实际上,.InnerContent
div是所有不同大小的div的集合,因此我无法设置.InnerGreen
的宽度在运行时。
如何让margin:auto
工作?这里是jsfiddle。
感谢您的建议。
答案 0 :(得分:7)
内联元素没有边距。通过告诉.InnerGreen
充当inline-block
,您实际上是在告诉它在定位方面采取内联方式。另一方面,您仍然可以使用text-align:
#Wrapper {
text-align: center;
}
请参阅updated JSFiddle。
答案 1 :(得分:2)
从技术上讲,这可能不是正确的做法,但你可以将text-align:center
放在你的包装div上。
答案 2 :(得分:0)
据我所知,如果无法确定元素的宽度,则无法使用margin:auto方法。它不是很优雅,但您可以使用居中的表格完成此任务:
<center>
<table>
<tr><td align="center">
<div>This will be centered.</div>
</td></tr>
</table>
</center>
答案 3 :(得分:0)
你可以使用jquery将div放在中心位置,这可能是......
<script type="text/javascript">
$(function() {
var containerWidth = $(".InnerGreen").width();
$(".InnerGreen).css("width", containerWidth);
});
</script>
然后你应该完成余下的CSS设置。
您可能还想在您的样式中添加height:auto,就像在运行时添加内部内容一样,它将更好地控制元素的增长。