已知有css
html, body { margin: 0; height: 100%; } #child { width: 200px; height: 200px; background: black; }
<div id="child"></div>
将元素 #child
竖直居中于窗口中部html
对未知高度的元素适用。jsfiddle布局
#child { position: absolute; /* fixed */ top: 50%; transform: translateY(-50%); }
注意此法中的 top: 50%
不能以 margin-top: 50%
代替。由于给 margin-top
设置百分比值时使用的是父元素的宽度而非高度。flex
只适用于固定高度的内部元素。jsfiddleflexbox
#child { position: absolute; /* fixed */ top: 0; bottom: 0; margin: auto 0; }
vertical-align
做用于表格元素时,会对表格中的元素起做用。
对未知高度的元素适用。jsfiddle.net
html { display: table; } body { display: table-cell; vertical-align: middle; }
vertical-align
做用于非表格内联(块)元素时,是控制元素自己在当前行的竖直位置。记得把父元素的字号设置为 0
。
对未知高度的子元素适用,可是要已知父元素高度。jsfiddlecode
body { font-size: 0; line-height: 100vh; } #child { display: inline-block; vertical-align: middle; }
简单粗暴的方法,不须要管子元素按行仍是按列排列。
对未知高度的元素适用。jsfiddleorm
body { display: flex; } #child { margin: auto 0; }
注意对于不一样的排列方式 flex-direction
选择不一样的 CSS 属性 align-items: center
或 justify-content: center
。好处是 autoprefix
后兼容旧版 flexbox
语法。
对未知高度的元素适用。jsfiddlehtm
body { display: flex; align-items: center; }
若是将书写模式改成竖直,text-align
就变为竖直居中。
对未知高度的元素适用。jsfiddleget
body { writing-mode: vertical-lr; text-align: center; } #child { display: inline-block; }
相似的,将书写模式改成竖直,块元素就变为独占一列,margin: auto 0
就会生效。
须要固定内部元素高度。jsfiddle
body { writing-mode: vertical-lr; } #child { margin: auto 0; }
若有遗漏欢迎补充 ;)