CSS: <垂直居中> 方案解析

導(dǎo)引:

方案一 { keyword: padding & margin }
方案二 { keyword: vertical-align }
方案三 { keyword: absolute | relative }
方案四 { keyword: flex }
方案五(文字垂直居中) { keyword: text-align | line-height }



方案一{ keyword: padding & margin }

提要簡(jiǎn)介: 運(yùn)用 padding(父容器) + margin (子元素) + text-align:center;(父容器的子元素是內(nèi)聯(lián)元素時(shí))

應(yīng)用場(chǎng)景一:

  1. 父元素 和 子元素 都是 塊級(jí)元素
  2. 父元素 寬度(可定也不不定), 高度不定.
<!-- html -->
<div class="parent">
     <div class="son"></div>
   </div>
/* css */
.parent {
  background: #ddd;
  width: 300px;
  padding: 40px 0;  /* 父容器用padding擠壓子元素 實(shí)現(xiàn)子元素垂直居中 */
}
.son {
  width: 50px;
  height: 50px;
  background: red;
  margin: 0 auto; /* 塊級(jí)子元素 水平居中 */
}

示圖:

11111.png

應(yīng)用場(chǎng)景二:

  1. 父元素是塊級(jí)元素, 子元素為內(nèi)聯(lián)元素
  2. 父元素 寬度(可定可不定), 高度不定.
<!-- html -->
<div class="parent">
     <span>x</span>
   </div>
/* css */
.parent {
  background: #ddd;
  width: 300px;
  text-align: center; // 使父容器內(nèi)的 內(nèi)聯(lián)元素水平居中 
  padding: 40px 0; // 父元素不定高度值, 由padding把內(nèi)聯(lián)子元素?cái)D到垂直居中
}
.parent span {
  width: 50px;
  height: 50px;
  background: red;
}

示圖:

22222.png

方案二 { keyword: vertical-align }

運(yùn)用 vertical-align: middle;(垂直方向) 和 父容器設(shè)置 text-align:center(水平方向)

應(yīng)用場(chǎng)景一:

  1. 子元素 必須是 內(nèi)聯(lián) 或 內(nèi)聯(lián)塊元素
  2. 水平居中交給 --> 父元素: text-align:center;
  3. 垂直居中交給 --> vertical-align: middle;父元素 利用 偽類元素 作為參考 來 和 子元素 垂直居中對(duì)齊.
<!-- html -->
<div class="parent">
     <div class="son"></div>
   </div>
/* css */
.parent {
  background: #ddd;
  width: 300px;
  height: 300px;
  text-align: center;  /*  讓內(nèi)聯(lián)子元素水平居中對(duì)齊 */
  vertical-align: middle;  /* 對(duì)齊方式為 垂直居中 */
  
}
.parent .son {
  display: inline-block;
  width: 50px;
  height: 50px;
  background: red;
  vertical-align: middle; /* 對(duì)齊方式為 垂直居中 */
}

.parent::after {
  content: "";
  display: inline-block;
  height: 100%;
  width: 1px;
  background: green;
  vertical-align: middle; /* 對(duì)齊方式為 垂直居中 */
}

示圖


33333.png

方案三 { keyword: absolute | relative }

運(yùn)用 position: relative | absolute ;transform: translate: (-50%, -50%); 的實(shí)現(xiàn)方案.

應(yīng)用場(chǎng)景一: relative

  1. 子元素可以是 內(nèi)聯(lián) 或 塊級(jí)元素
  2. 父元素 寬高固定
  3. 子元素調(diào)用css3樣式: transform
<!-- html -->
   <div class="parent">
     <div class="son">x</div>
   </div>
/* css */
.parent {
  background: #ddd;
  width: 300px;
  height: 300px;
}
.son {
  display: inline | inline-block | block;  /* 子元素為 塊級(jí) 和 內(nèi)聯(lián) 都可以 */
  width: 50px;
  height: 50px;
  background: red;
  position: relative;  /* 相對(duì)定位,子元素默認(rèn)位置是在左上角 */
  top: 50%;  /* 子元素頂線 對(duì)齊 父元素的水平中線 */
  left: 50%; /*  子元素的左側(cè)邊線 對(duì)齊 父元素的垂直中線 */
  transform: translate(-50% ,-50%); /* 子元素以 參考自身寬高 來計(jì)算 變形位移距離  */
}

示圖:

44444.png

應(yīng)用場(chǎng)景二: absolute

  1. 子元素可以是 內(nèi)聯(lián) 或 塊級(jí)元素
  2. 父元素 寬高固定
  3. 子元素調(diào)用css3樣式: transform
<!-- html -->
   <div class="parent">
     <div class="son">x</div>
   </div>
/* css */
.parent {
  background: #ddd;
  width: 300px;
  height: 300px;
  position: relative;  /* 父元素設(shè)置為 子元素的定位參考,必不可少 */
}
.son {
  display: inline | inline-block | block;  /* 子元素為 塊級(jí) 和 內(nèi)聯(lián) 都可以 */
  width: 50px;
  height: 50px;
  background: red;
  position: absolute;  /* 絕對(duì)定位,子元素默認(rèn)位置是在左上角 */
  top: 50%;  /* 子元素頂線 對(duì)齊 父元素的水平中線 */
  left: 50%; /*  子元素的左側(cè)邊線 對(duì)齊 父元素的垂直中線 */
  transform: translate(-50% ,-50%); /* 子元素以 參考自身寬高 來計(jì)算 變形位移距離  */
}

示圖:

55555.png

方案四 { keyword: flex }

提要: 運(yùn)用 flex 布局, 主軸對(duì)齊調(diào)用 justify-content, 側(cè)軸(交叉軸)對(duì)齊 align-items.

應(yīng)用場(chǎng)景一:

  1. 父子元素 塊級(jí) 內(nèi)聯(lián)都可以
  2. 水平居中: justify-content: center;
  3. 垂直居中: align-items: center;
<!-- html -->
  <div class="box">
    <div class="son"></div>
  </div>
/* css */
.box {
  width: 400px;
  height: 400px;
  background: #ddd;
  border: 1px solid red;
  
  display: flex;  /* 元素設(shè)置為flex, 此元素的 display:felx */ 
  justify-content: center; /* 水平居中設(shè)置 */
  align-items: center;   /* 垂直居中設(shè)置 */
}
.box .son {
  width: 100px;
  height: 100px;
  background: blue;
}

圖示:

3123123.jpg

方案五(文字垂直居中) { keyword: text-align | line-height }

提要: 文字居中 依據(jù) 父元素 text-align, 子元素里 line-height;

應(yīng)用場(chǎng)景一:

  1. 父子元素 塊級(jí) 內(nèi)聯(lián)都可以
  2. 水平居中: 父容器text-align: center;
  3. 垂直居中: 文字標(biāo)簽 line-height: (number= wrapper.height) px ;
<!-- html -->
  <div class="box">
    <p>xxxxx</p>
  </div>
/* css */
* {   /*  設(shè)置通類,必須 */
padding: 0;
margin: 0;
box-sizing: border-box;
}
.box {

border: 1px solid red;
width: 100px;
height: 100px;
background: #ddd;
text-align: center;  /* 文字水平居中 */
}
.box p {

line-height: 100px; /* 文字垂直方向居中,參數(shù)等于父容器高度值 */
}

圖示:

77777.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吓蘑,一起剝皮案震驚了整個(gè)濱河市朋譬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌您市,老刑警劉巖浅碾,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅戈,死亡現(xiàn)場(chǎng)離奇詭異养渴,居然都是意外死亡炮沐,警方通過查閱死者的電腦和手機(jī)敦第,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門峰弹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芜果,你說我怎么就攤上這事鞠呈。” “怎么了右钾?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蚁吝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我舀射,道長(zhǎng)窘茁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任脆烟,我火速辦了婚禮山林,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邢羔。我一直安慰自己驼抹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布拜鹤。 她就那樣靜靜地躺著框冀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敏簿。 梳的紋絲不亂的頭發(fā)上明也,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼诡右。 笑死安岂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帆吻。 我是一名探鬼主播域那,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼猜煮!你這毒婦竟也來了次员?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤王带,失蹤者是張志新(化名)和其女友劉穎淑蔚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愕撰,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刹衫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搞挣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片带迟。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖囱桨,靈堂內(nèi)的尸體忽然破棺而出仓犬,到底是詐尸還是另有隱情,我是刑警寧澤舍肠,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布搀继,位于F島的核電站,受9級(jí)特大地震影響翠语,放射性物質(zhì)發(fā)生泄漏叽躯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一啡专、第九天 我趴在偏房一處隱蔽的房頂上張望险毁。 院中可真熱鬧,春花似錦们童、人聲如沸畔况。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跷跪。三九已至,卻和暖如春齐板,著一層夾襖步出監(jiān)牢的瞬間吵瞻,已是汗流浹背葛菇。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留橡羞,地道東北人眯停。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卿泽,于是被迫代替她去往敵國(guó)和親莺债。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354