CSS 垂直水平完全居中手冊(cè)

居中一直是CSS中被抱怨的典型。為什么實(shí)現(xiàn)起來(lái)這么辛苦?所以有人被嘲笑。我覺(jué)得問(wèn)題不是沒(méi)有辦法做到,只是視情況而定,有很多不同方式,但是很難弄清楚應(yīng)該用何種方式。

因此我寫(xiě)了這篇文章,希望能把他變得容易點(diǎn)。

水平居中

內(nèi)聯(lián)元素(inline or inline-*)居中?

你可以讓他相對(duì)父級(jí)塊級(jí)元素居中對(duì)齊

.center-children {

text-align: center;

}

塊級(jí)元素(block level)居中?

你可以通過(guò)設(shè)置margin-left和margin-right為auto讓它居中(同時(shí)還要設(shè)置width,否則它就會(huì)承滿整個(gè)容器,無(wú)法看出居中效果),如。

.center-me {

margin: 0 auto;

}

如果有很多塊級(jí)元素呢?

如果你有很勻塊級(jí)元素需要水平居中成一行,你最好使用一個(gè)不同的display類(lèi)型。這是一個(gè)使用inline-block和flex的例子。

I'm an element that is block-like with my siblings and we're centered in a row.

I'm an element that is block-like with my siblings and we're centered in a row. I have more content in me than my siblings do.

I'm an element that is block-like with my siblings and we're centered in a row.

I'm an element that is block-like with my siblings and we're centered in a row.

I'm an element that is block-like with my siblings and we're centered in a row. I have more content in me than my siblings do.

I'm an element that is block-like with my siblings and we're centered in a row.

body {

background: #f06d06;

font-size: 80%;

}

main {

background: white;

margin: 20px 0;

padding: 10px;

}

main div {

background: black;

color: white;

padding: 15px;

max-width: 125px;

margin: 5px;

}

.inline-block-center {

text-align: center;

}

.inline-block-center div {

display: inline-block;

text-align: left;

}

.flex-center {

display: flex;

justify-content: center;

}

垂直居中

垂直居中在CSS中有點(diǎn)棘手

內(nèi)聯(lián)元素(inline or inline-*)居中,像文本和鏈接那樣的?

它是一行的嗎?

有時(shí)侯元素可以表現(xiàn)像垂直居中,只是因?yàn)樗鼈冇邢嗟鹊纳舷聀adding

.link {

padding-top: 30px;

padding-bottom: 30px;

}

如果padding因?yàn)槟承┰虿荒苡茫椅谋静粫?huì)換行的情況下,你可以使用line-height,讓其與height相等去對(duì)齊文本。

.center-text-trick {

height: 100px;

line-height: 100px;

white-space: nowrap;

}

它是多行的?

上下等padding的方式也可以讓多行居中,但是如果這方法沒(méi)用,你可以讓這些文字的容器按table cell模式顯示,然后設(shè)置文字的vertical-align屬性對(duì)齊,就像talbe那樣

I'm vertically centered multiple lines of text in a real table cell.

I'm vertically centered multiple lines of text in a CSS-created table layout.

body {

background: #f06d06;

font-size: 80%;

}

table {

background: white;

width: 240px;

border-collapse: separate;

margin: 20px;

height: 250px;

}

table td {

background: black;

color: white;

padding: 20px;

border: 10px solid white;

/* default is vertical-align: middle; */

}

.center-table {

display: table;

height: 250px;

background: white;

width: 240px;

margin: 20px;

}

.center-table p {

display: table-cell;

margin: 0;

background: black;

color: white;

padding: 20px;

border: 10px solid white;

vertical-align: middle;

}

塊級(jí)元素(block level)垂直居中?

你知道元素的高度嗎?

出于很多方面的原因,不知道網(wǎng)頁(yè)布局的高度是相當(dāng)普遍的。

但是如果你的布局有一個(gè)固定高度,你就可以這樣垂直居中:

.parent {

position: relative;

}

.child {

position: absolute;

top: 50%;

height: 100px;

margin-top: -50px; /* 如果沒(méi)有使用: border-box; 的盒子模型則需要設(shè)置這個(gè) */

}

元素的高度是未知的

盡管未知,但你仍有可能向上推移50%的寬度

.parent {

position: relative;

}

.child {

position: absolute;

top: 50%;

transform: translateY(-50%);

}

你可以使用flexbox嗎?

這并不奇怪,使用flexbox會(huì)容易非常多

I'm a block-level element with an unknown height, centered vertically within my parent.

body {

background: #f06d06;

font-size: 80%;

}

main {

background: white;

height: 300px;

width: 200px;

padding: 20px;

margin: 20px;

display: flex;

flex-direction: column;

justify-content: center;

resize: vertical;

overflow: auto;

}

main div {

background: black;

color: white;

padding: 20px;

resize: vertical;

overflow: auto;

}

同時(shí)水平和垂直居中

元素有固定的寬度和高度

如果元素的寬度和高度是固定的,你需要先絕對(duì)居中,然后上移和左移50%的寬度即可,這種方案有極好的跨瀏覽器支持。

.parent {

position: relative;

}

.child {

width: 300px;

height: 100px;

padding: 20px;

position: absolute;

top: 50%;

left: 50%;

margin: -70px 0 0 -170px;

}

元素的寬度高度未知

如果你不知道高度和寬度(可變的),你可以使用transofrm屬性在兩個(gè)方向都平移負(fù)50%

.parent {

position: relative;

}

.child {

position: absolute;

top: 50%;

left: 50%;

transform: translate(-50%, -50%);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,159評(píng)論 1 92
  • 在CSS的世界里居中一直都是人們抱怨的一件事?!熬觽€(gè)中為什么就這么難呢?”人們無(wú)奈的說(shuō)。我認(rèn)為困難的不是怎么做他,...
    _MChao閱讀 444評(píng)論 0 0
  • 1、垂直對(duì)齊 如果你用CSS,則你會(huì)有困惑:我該怎么垂直對(duì)齊容器中的元素?現(xiàn)在,利用CSS3的Transform,...
    kiddings閱讀 3,299評(píng)論 0 11
  • 1.絕對(duì)定位居中技術(shù) 我們一直用margin:auto實(shí)現(xiàn)水平居中,而一直認(rèn)為margin:auto不能實(shí)現(xiàn)垂直居...
    DecadeHeart閱讀 1,664評(píng)論 0 3
  • 在三大火爐之一的重慶長(zhǎng)大,雪對(duì)我來(lái)說(shuō),特別遙不可及。在這個(gè)元旦,如愿以償?shù)娜チ吮狈降墓枮I??梢哉f(shuō),這是一場(chǎng)圓夢(mèng)之...
    二楞子吃苦杏仁閱讀 425評(píng)論 0 1

友情鏈接更多精彩內(nèi)容