我知道百分比的 margin-top 是相对于宽度的...这就是为什么我不能总是垂直和水平居中一个高度为 50%,宽度为全屏幕 50% 的 div。
当你调整大小时,margin-top 是相对于宽度的。CSS
#mini {
height : 50%;
width : 50%;
background-color : #FFFFFF;
margin-top : 25%;
margin-left : 25%;
}
我知道百分比的 margin-top 是相对于宽度的...这就是为什么我不能总是垂直和水平居中一个高度为 50%,宽度为全屏幕 50% 的 div。
当你调整大小时,margin-top 是相对于宽度的。#mini {
height : 50%;
width : 50%;
background-color : #FFFFFF;
margin-top : 25%;
margin-left : 25%;
}
#hello {
position : absolute;
width : 100%;
height : 100%;
background-color : #123456;
text-align: center;
}
#hello:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
}
#mini {
height : 50%;
width : 50%;
background-color : #FFFFFF;
display: inline-block;
vertical-align: middle;
}
基于http://css-tricks.com/centering-in-the-unknown/。
Horizontal centering (easy):
#hello {
text-align: center;
}
#mini {
display: inline-block;
}
Vertical centering:
Make line's height to be 100% height with a ghost element:
#hello:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
}
Center #mini
vertically (relatively to that line) with vertical-align
:
#mini {
display: inline-block;
vertical-align: middle;
}
基本上所有浏览器都支持,包括IE 8及以上版本。
如果您使用真实元素作为ghost而不是:before
伪元素,也可以支持IE7。但这并不符合语义规范。
html
/body
元素设置为height:100%
和width:100%
。table
。display:table-cell
和vertical-align:middle
。margin:0px auto
。text-align:center
,假设它是一个inline
元素。
HTML
<div id="parent">
<div id="child"></div>
</div>
CSS
html, body {
height:100%;
width:100%;
margin:0px;
}
body {
display:table;
}
#parent {
display:table-cell;
vertical-align:middle;
background:#123456;
}
#child {
height:50%;
width:50%;
background:white;
margin:0px auto;
}
#mini
元素绝对定位在其父元素中心位置。然后,我们使用CSS transform将元素本身偏移其宽度和高度的一半:#mini {
height: 50%;
width: 50%;
background-color : #FFFFFF;
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
今天,CSS 2D 变换在浏览器中得到了相当广泛的支持,全球支持率约为80%。如果您想支持IE9用户,您可能还需要包括 -ms-
厂商前缀。
看起来你需要使用一些JavaScript。使用jQuery:
$(document).ready(function() {
var topMargin = $(window).height()*.25;
$("#mini").css('margin-top', topMargin);
})
$(window).resize(function() {
var topMargin = $(window).height()*.25;
$("#mini").css('margin-top', topMargin);
})
在这里试验代码:http://jsfiddle.net/dphaener/2n4PL/
第一个函数在页面加载时设置边距,第二个函数在每次调整窗口大小时设置边距。