已知有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; }
若有遺漏歡迎補充 ;)