最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

CSS垂直居中的另類(lèi)實(shí)現(xiàn)代碼詳解(不走尋常路)

  發(fā)布時(shí)間:2020-07-02 16:52:21   作者:快狗打車(chē)前端團(tuán)隊(duì)   我要評(píng)論
這篇文章主要介紹了CSS垂直居中的另類(lèi)實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

眾所周知,“css如何實(shí)現(xiàn)元素垂直居中?”已經(jīng)是一個(gè)老生常談的問(wèn)題了,這個(gè)問(wèn)題目前已經(jīng)有了許多解決方案,這些方案也都有各自適用的場(chǎng)景以及優(yōu)缺點(diǎn),大致如下:

  • flex布局
  • grid布局
  • table布局
  • line-height搭配height
  • position搭配margin
  • position搭配transform
  • ...

那么今天我們就來(lái)理解其中一種有效但不常被使用的方案的原理,它就是:偽元素:before搭配vertical-align:middle實(shí)現(xiàn)元素垂直居中,先來(lái)看一下具體的代碼實(shí)現(xiàn):

<style type="text/css">
  .parent {
    display: inline-block;
    width: 300px;
    height: 300px;
    font-size: 0;
    background: #80848f;
    text-align: center;
  }
  .parent:before {
    display: inline-block;
    width: 20px;
    height: 100%;
    content: '';
    background: #ff9900;
    vertical-align: middle;
  }
  .child {
    display: inline-block;
    width: 50px;
    height: 50px;
    background: #19be6b;
    vertical-align: middle;
  }
</style>
<div class="parent">
  <div class="child">child</div>
</div>

上面的代碼運(yùn)行結(jié)果是這樣的:

相信代碼大家已經(jīng)很熟悉了,但是你真正理解其中的原理嗎?下面我們就看一下它是如何怎樣一步步實(shí)現(xiàn)垂直居中的

分析

首先我們要知道一個(gè)關(guān)鍵知識(shí)點(diǎn),那就是:父元素基線(baseline)的位置是可以改變的,它不是固定的,記住這一點(diǎn)很重要
接著,我們精簡(jiǎn)一下代碼,去掉關(guān)鍵部分

<style type="text/css">
  .parent {
    display: inline-block;
    width: 300px;
    height: 300px;
    /* font-size: 0; */
    background: #80848f;
    text-align: center;
  }
  .parent:before {
    display: inline-block;
    width: 20px;
    height: 100%;
    content: '';
    background: #ff9900;
    /* vertical-align: middle; */
  }
  .child {
    display: inline-block;
    width: 50px;
    height: 50px;
    background: #19be6b;
    /* vertical-align: middle; */
  }
</style>
<div class="parent">
  <div class="child">child</div>
</div>

我們將font-size:0vertical-align:middle注釋后,運(yùn)行結(jié)果如下:

從圖中不難看出,對(duì)于:before偽元素(以下簡(jiǎn)稱(chēng)偽元素)來(lái)說(shuō),加與不加vertical-align:middle,結(jié)果都是一樣的,在垂直方向它始終會(huì)占滿(mǎn)父元素;但對(duì)于.child元素情況就不同了,它在垂直方向的位置發(fā)生了改變,那么這是為什么呢?
其實(shí)偽元素在此處的作用就是為了改變(或者叫重新定義)父元素baseline的位置,我們來(lái)回顧一下vertical-align:middle在MDN文檔中的定義

middle: 使元素的中部與父元素的基線加上父元素x-height的一半對(duì)齊

那么,對(duì)比我們的示例:

  • 偽元素的中部就是它垂直方向的中點(diǎn),這不難理解
  • 父元素的基線我們暫且不管它在哪里,我們只要記住它是可以改變的就足夠了
  • x-height的一半,因?yàn)槲覀冊(cè)诟冈刂袑?code>font-size置為0,所以x-height(小寫(xiě)x字母的高度)的一半也是0,即沒(méi)有高度

這樣一下,就相當(dāng)于偽元素的中點(diǎn)只要與父元素的基線對(duì)齊就可以了,因?yàn)?code>x-height是0,所以加與不加無(wú)所謂;再加上Css中元素默認(rèn)是左上方對(duì)齊的,對(duì)于這個(gè)限制,也就是說(shuō)當(dāng)偽元素加上vertical-align:middle后,默認(rèn)情況下它是不會(huì)超出父元素的范圍顯示的,那么這時(shí)偽元素高度已確定:父元素高度的100%,中點(diǎn)也已確定
接下來(lái)偽元素就會(huì)對(duì)父元素說(shuō):我垂直方向的中點(diǎn)已經(jīng)確定了,變是不可能變的,這輩子都不可能變,但我的中點(diǎn)想和你的基線對(duì)齊,你自己看著辦吧
然后父元素妥協(xié)了,將它自身的基線移動(dòng)到與偽元素中點(diǎn)水平對(duì)齊的位置,到此父元素基線的位置也已確定,近似其高度的一半
最后.child元素添加了自己的vertical-align:middle,按照middle: 使元素的中部與父元素的基線加上父元素x-height的一半對(duì)齊這句定義,.child元素的font-size由于繼承關(guān)系也是0,所以它的中點(diǎn)也就自然而然與早已確定的父元素基線對(duì)齊,從而實(shí)現(xiàn)垂直居中,到此結(jié)束

總結(jié)

其實(shí)該種垂直居中方式的原理主要有以下幾個(gè)要點(diǎn):

  • Css中元素默認(rèn)是左上方對(duì)齊的
  • 偽元素高度與父元素保持統(tǒng)一
  • 父元素將font-size置為0,進(jìn)而x-height也被置為0
  • 父元素基線的位置可改變

到此這篇關(guān)于CSS垂直居中的另類(lèi)實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)css 垂直居中內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • CSS3 不定高寬垂直水平居中的幾種方式

    這篇文章主要介紹了CSS3 不定高寬垂直水平居中的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起
    2020-03-26
  • 利用css樣式實(shí)現(xiàn)表格中字體垂直居中的方法

    這篇文章主要介紹了利用css樣式實(shí)現(xiàn)表格中字體垂直居中的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-16
  • CSS3實(shí)現(xiàn)水平居中、垂直居中、水平垂直居中的實(shí)例代碼

    在前端面試中經(jīng)常會(huì)遇到css居中效果的實(shí)現(xiàn),今天小編給大家分享幾種css垂直水平居中的方法,通過(guò)實(shí)例代碼給大家講解,需要的朋友參考下吧
    2020-02-27
  • 手把手教你CSS水平、垂直居中的10種方式(小結(jié))

    這篇文章主要介紹了手把手教你CSS水平、垂直居中的10種方式(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著
    2019-11-07
  • css常用元素水平垂直居中方案

    這篇文章主要介紹了css常用元素水平垂直居中方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)
    2019-08-09
  • css布局教程之如何實(shí)現(xiàn)垂直居中

    這篇文章主要給大家介紹了關(guān)于css布局教程之如何實(shí)現(xiàn)垂直居中的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用css具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下
    2019-07-12
  • CSS實(shí)現(xiàn)垂直居中的幾種方法小結(jié)

    在前端布局過(guò)程中,我們實(shí)現(xiàn)水平居中比較簡(jiǎn)單,一般通過(guò)margin:0 auto;和父元素 text-align: center;就能實(shí)現(xiàn)。今天小編給大家?guī)?lái)了CSS實(shí)現(xiàn)垂直居中的幾種方法小結(jié),感興
    2019-05-14

最新評(píng)論

全椒县| 驻马店市| 四川省| 伊川县| 凤冈县| 页游| 宜兰市| 武陟县| 长沙县| 水城县| 甘洛县| 涪陵区| 文登市| 固镇县| 永康市| 会同县| 固始县| 抚顺市| 密云县| 双流县| 会昌县| 宿州市| 拜城县| 富宁县| 漳浦县| 三门县| 枣强县| 重庆市| 绥滨县| 阿尔山市| 夏河县| 桂林市| 兰西县| 广汉市| 阿城市| 宜宾县| 阳城县| 许昌县| 雷波县| 包头市| 安乡县|