我已经看过一百万个关于如何居中放置块元素的问题,而且似乎有几种流行的方法可以做到,但是它们都依赖于固定的像素宽度。然后,要么margin:0 auto使用绝对定位,要么使用绝对/相对定位left:50%; margin-left:[-1/2 width];等等。我们都知道,如果元素的宽度设置为%,则此方法将无效。
margin:0 auto
left:50%; margin-left:[-1/2 width];
真的没有办法真正流畅地执行此操作吗?我说的是使用%宽度( 不是 用固定宽度越来越小的设置十二个媒体查询)。
%
当心:有大量的解决方案使用流行语“响应”,但 没有 回答我的问题(因为它们始终使用固定宽度)。这是一个例子。
更新: 我差点忘了:如何处理限制居中元素的最大宽度并仍将其保持在中心?请参阅@smdrager的回答下的我的评论。现实生活中的例子。我希望弹出消息或包含文本段落的灯箱效果在窗口中居中显示,文本根据宽度流畅地环绕。但是我不希望文本框延伸得太远,以至于文本难以阅读(想象一个4英尺长的屏幕,其中三段被延伸到一行文本上)。如果您向大多数方法添加最大宽度,则达到最大宽度时,居中框将停止居中。
水平和垂直居中
实际上,以百分比为单位的高度和宽度会使居中更加容易。您只需将div左端和左端偏移一半的面积即可。
因此,如果您的身高是40%,则100%-40%= 60%。因此,您需要上下30%。其次是:30%的技巧。
仅水平居中
使用内联块。但是,此处的其他答案不适用于IE 8及更低版本。您必须为此使用CSS hack或条件样式。这是黑客版本:
.inlineblock { display: inline-block; zoom: 1; display*: inline; /* ie hack */ }
通过使用媒体查询,您可以结合两种技术来达到所需的效果。唯一的并发症是身高。您使用嵌套的div在%宽度和
@media (max-width: 1000px) { .center{} .center-inner{left:25%;top:25%;position:absolute;width:50%;height:300px;background:#f0f;text-align:center;max-width:500px;max-height:500px;} } @media (min-width: 1000px) { .center{left:50%;top:25%;position:absolute;} .center-inner{width:500px;height:100%;margin-left:-250px;height:300px;background:#f0f;text-align:center;max-width:500px;max-height:500px;} }