CSS居中完全指南——構(gòu)建CSS居中決策樹(shù)

CSS居中完全指南——構(gòu)建CSS居中決策樹(shù)

css居中

1.Horizontally 水平居中

1.1 inlineinline-*元素水平居中

給需要居中的元素一個(gè)block父元素,需要居中子元素為 文本 或者 inline, inline-block, inline-table, inline-flex

核心代碼

.center-children {
  text-align: center;
}

JSbin演示地址
效果:

`inline`或`inline-*`元素水平居中

1.2block元素水平居中

父元素為block,子元素也為bolck,且子元素設(shè)置了寬度(沒(méi)寬度子元素就繼承父元素寬度,居中沒(méi)有意義).
無(wú)論正在居中塊級(jí)元素的寬度或父級(jí)的寬度如何,都會(huì)起作用您访。

方法:子元素margin: 0 auto;左右外邊距設(shè)置為自動(dòng)填充

核心代碼

.center-me {
  margin: 0 auto;
}

效果:


`block`元素水平居中

block元素水平居中JSbin演示地址

1.3多個(gè)block元素水平居中

1.3.1 多個(gè)block元素一行排列水平居中

  • 方法一:利用inline-block,原理是將子元素轉(zhuǎn)化為inline-block.再用text-align: center;
  • 方法二:利用display: flex.注意:子元素高度會(huì)保持一致.看下方例子.
    核心代碼:
.inline-block-center {
  text-align: center;
}
.inline-block-center div {
  display: inline-block;
  text-align: left;
}

.flex-center {
  display: flex;
  justify-content: center;
}

效果:

多個(gè)`block`元素一行排列水平居中

多個(gè)block元素一行排列水平居中JSbin演示地址

1.3.2 多個(gè)block元素每行一個(gè)水平居中

因?yàn)槊總€(gè)block元素獨(dú)占一行,所以方法仍然是margin: 0 auto;

演示:


多個(gè)`block`元素每行一個(gè)水平居中

多個(gè)block元素每行一個(gè)水平居中JSbin演示

2.Vertically垂直居中

垂直居中比較麻煩

2.1 inlineinline-* 元素單行垂直居中

需要垂直居中的元素為單行的inlineinline-* 元素,例如一個(gè)text或者a鏈接(包括a鏈接變化而成的按鈕)

2.1.1 方法一:上下使用相同的padding(推薦)

上下和左右使用相同的padding可以不用設(shè)置寬高,既可以在修改文本內(nèi)容是自適應(yīng),又可以減少出現(xiàn)BUG的幾率.
核心代碼:

.link {
  padding-top: 30px;
  padding-bottom: 30px;
}

演示:


方法一:上下使用相同的`padding`

方法一:上下使用相同的paddingJSbin演示地址

2.1.2 方法二:設(shè)置line-height與高度相同

核心代碼

.center-text-trick {
  height: 100px;
  line-height: 100px;
  white-space: nowrap;
/*nowrap文本內(nèi)的換行無(wú)效內(nèi)容只能在一行顯示*/
}
設(shè)置line-height與高度相同

設(shè)置line-height與高度相同JSbin演示地址

2.2 多行文本垂直居中

多行文本使用增加上下padding垂直居中的方法仍然有效且良好,不需設(shè)置寬高,推薦使用.
如果這樣做不起作用产还,那么文本所在的元素可能是table或者table-cell元素黄刚,無(wú)論是真正的table還是后期自己添加的CSS.
下面說(shuō)說(shuō)這兩種情況使用其他方法的垂直居中.

2.2.1:方法一:display: table;vertical-align: middle;

核心代碼:

.center-table {
  display: table;
  
}
.center-table p {
  display: table-cell;
  vertical-align: middle;
}
多行文本垂直居中

table+vertical-align: middle多行文本垂直居中JSbin演示

2.2.2 使用flex布局多行文本居中

一個(gè)flex-child可以簡(jiǎn)單地在flex-parent的中心.
核心代碼

.flex-center-vertically {
  display: flex;
  justify-content: center;
  flex-direction: column;
  height: 400px;
}
使用`flex`多行文本居中

使用flex多行文本居中JSbin演示地址

2.3 block元素垂直居中

2.3.1已知block元素高度

原理是絕對(duì)定位,top: 50%;然后 margin-top設(shè)置為負(fù)邊距且值為他本身高度的一半.
核心代碼:

.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  height: 100px;
  margin-top: -50px; /* account for padding and border if not using box-sizing: border-box; */
}

注意:使用 position: absolute;絕對(duì)定位會(huì)使元素脫離文檔流

已知`block`元素高垂直居中演示

已知block元素高垂直居中演示

2.3.2 block元素高度未知垂直居中

借助CSS3中的transform屬性向Y軸反向偏移50%的方法實(shí)現(xiàn)垂直居中时呀。但是部分瀏覽器存在兼容性的問(wèn)題。
核心代碼:

.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

transform用法

`block`元素高度未知垂直居中

block元素高度未知垂直居中JSbin演示

2.3.3 使用flex布局block元素高度未知垂直居中

核心代碼:

.parent {
  display: flex;
  flex-direction: column;
  justify-content: center;
}
用flex布局`block`元素高度未知垂直居中

用flex布局block元素高度未知垂直居中JSbin演示

3.Both Horizontally and Vertically水平垂直居中

3.1有固定寬高的元素

核心代碼:
依舊是絕對(duì)定位+寬高一半的負(fù)邊距

.parent {
  position: relative;
}

.child {
  width: 300px;
  height: 100px;
  padding: 20px;

  position: absolute;
  top: 50%;
  left: 50%;

  margin: -70px 0 0 -170px;
}
有固定寬高的元素

有固定寬高的元素JSbin演示

3.2 寬高不固定

利用2D變換欧漱,在水平和垂直兩個(gè)方向都向反向平移寬高的一半,從而使元素水平垂直居中葬燎。

核心代碼

.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
不知寬高

寬高不固定水平垂直居中JSbin演示

3.3 使用flex布局垂直水平居中

核心代碼:

.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}
使用flex布局垂直水平居中

使用flex布局垂直水平居中JSbin演示

3.4 使用grid布局垂直水平居中

核心代碼:

body, html {
  height: 100%;
  display: grid;
}
span { /* thing to center */
  margin: auto;
}
使用flex布局垂直水平居中

使用flex布局垂直水平居中JSbin演示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末误甚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谱净,更是在濱河造成了極大的恐慌窑邦,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壕探,死亡現(xiàn)場(chǎng)離奇詭異冈钦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)李请,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門瞧筛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人导盅,你說(shuō)我怎么就攤上這事较幌。” “怎么了白翻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵乍炉,是天一觀的道長(zhǎng)绢片。 經(jīng)常有香客問(wèn)我,道長(zhǎng)岛琼,這世上最難降的妖魔是什么底循? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮槐瑞,結(jié)果婚禮上熙涤,老公的妹妹穿的比我還像新娘。我一直安慰自己困檩,他們只是感情好灭袁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著窗看,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倦炒。 梳的紋絲不亂的頭發(fā)上显沈,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音逢唤,去河邊找鬼拉讯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鳖藕,可吹牛的內(nèi)容都是我干的魔慷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼著恩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼院尔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起喉誊,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤邀摆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后伍茄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體栋盹,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年敷矫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了例获。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡曹仗,死狀恐怖榨汤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情整葡,我是刑警寧澤件余,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響啼器,放射性物質(zhì)發(fā)生泄漏旬渠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一端壳、第九天 我趴在偏房一處隱蔽的房頂上張望告丢。 院中可真熱鬧,春花似錦损谦、人聲如沸岖免。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颅湘。三九已至,卻和暖如春栗精,著一層夾襖步出監(jiān)牢的瞬間闯参,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工悲立, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹿寨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓薪夕,卻偏偏與公主長(zhǎng)得像脚草,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子原献,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案馏慨? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,748評(píng)論 1 92
  • 1. 前言 前端圈有個(gè)“梗”:在面試時(shí)嚼贡,問(wèn)個(gè)css的position屬性能刷掉一半人熏纯,其中不乏工作四五年的同學(xué)。在...
    YjWorld閱讀 4,440評(píng)論 5 15
  • 原網(wǎng)址https://segmentfault.com/a/119000 簡(jiǎn)言 CSS居中是前端工程師經(jīng)常要面對(duì)的...
    殺個(gè)程序猿祭天閱讀 701評(píng)論 0 1
  • 《槐花的種種可能性之一》 槐花開(kāi)了 花香彌漫秩贰,白色的氣味里更迭出 夏季的幻覺(jué) 神秘的鳥(niǎo)停在濕漉漉的枝頭 那些值得信...
    十年顧子溪閱讀 232評(píng)論 0 4
  • 戰(zhàn)友你好, 我是71班首月值月生劉偉偉柔吼,編號(hào)007-5372毒费,現(xiàn)向你申請(qǐng):希望能夠成為班訓(xùn)營(yíng)三期紐帶。 作為007...
    偉動(dòng)力閱讀 646評(píng)論 2 2