假设我想在视口的中心放置一个元素,用作弹出消息。它应该满足以下要求:
如果不采用下面基于表格的解决方案,是否有更好的方法来实现这一目标?
<table style="position:absolute;width:100%;height:100%">
<tr>
<td align="center">
<span id="centeredContent">I always remain centered</span>
</td>
</tr>
</table>
答案 0 :(得分:8)
最好的解决方案(在我看来)是使用绝对定位将元素的左上角放置在50%/ 50%,然后使用负边距将元素推回到中心。唯一的缺点是您必须指定元素的宽度和高度。这是一个例子:
HTML:
<div id="centerme">
Hello, world!
</div>
CSS:
#centerme
{
position: absolute;
left: 50%;
top: 50%;
/* You must set a size manually */
width: 100px;
height: 50px;
/* Set negative margins equal to half the size */
margin-left: -50px;
margin-top: -25px;
background-color: cornflowerblue;
}
以下是关于jsfiddle的演示:http://jsfiddle.net/UGm2V/
如果您确实需要居中的内容具有动态高度,那么就有更高级的解决方案。要知道它在旧的IE浏览器中不起作用。 HTML如下:
<div id="outter-container">
<div id="inner-container">
<div id="centred">
<p>I have a dynamic height!</p>
<p>Sup!</p>
</div>
</div>
</div>
外部容器需要覆盖页面的宽度和高度。它是具有绝对定位的块元素
内部容器实际上是一张桌子!这是由display: table
css属性决定的。这里的胜利是你实际上不需要任何表格HTML
#centred div是最后一个必需元素。它仍覆盖页面宽度和高度的100%,但放在其中的任何内容都将在垂直和水平方向上居中。这是你需要的css,并附有解释:
/*
An outter container is needed because the table
won't cover the page width and height on it's own
*/
#outter-container
{
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
}
/*
The inner container is a table which is set to
cover the width and height of the page.
*/
#inner-container
{
display: table;
width: 100%;
height: 100%;
}
/*
This table cell will cover 100% of the page width
and height, but everything placed inside it will
be placed in the absolute centre.
*/
#centred
{
display: table-cell;
vertical-align: middle;
text-align: center;
}
当然,这是一个jsfiddle演示:http://jsfiddle.net/N7ZAr/3/
答案 1 :(得分:3)
如果它是固定大小的元素,您可以执行以下操作:
#centered {
position:absolute;
width:200px;
height:400px;
top:50%;
left:50%;
margin-left:-100px; // negative-half of element's width
margin-top:-200px; // negative-half of element's height
}
这里的诀窍是top:50%; left:50%;
。将其与margin-left
和margin-top
的{{1}}和width
等于 负半 的组合,以及您的元素将在您的页面中居中。
如果您不使用重置样式表,例如Eric Meyer的CSS重置或normalize.css,那么将height
设置为body
以使此技巧起作用非常重要。
这是一个jsfiddle:http://jsfiddle.net/remibreton/fZywe/1/
我所做网站的实例:http://althotels.ca/
答案 2 :(得分:1)
答案 3 :(得分:1)
如果您不知道居中内容的大小,则需要两步居中 示例:http://jsfiddle.net/G6fUE/
<div class="popup-center">
<div class="content">
sadalshd<br />
sadalshd<br />
<img src="http://www.lorempixel.com/200/200" />
sadalshd<br>
</div>
</div>
.popup-center {
position: absolute;
top: 50%;
left: 50%;
}
.popup-center div {
margin-left: -50%;
margin-top: -50%;
}
答案 4 :(得分:0)
对于左/右居中,您可以指定元素的宽度,并将左右边距设置为“自动”。
对于垂直居中,它有点棘手。您可以使用百分比高度,但请记住将身体的高度设置为100%,否则这将无效。
不知道这是否适用于IE7,抱歉。