1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        14種CSS實(shí)現(xiàn)水平或垂直居中的技巧

        共 7196字,需瀏覽 15分鐘

         ·

        2021-08-05 19:25

        前言

        css水平和垂直居中是一個(gè)亙古不變的話題,它常常出現(xiàn)在優(yōu)美的網(wǎng)頁(yè)上以及各大前端面試當(dāng)中。
        說(shuō)來(lái)慚愧,在兩年前面試的時(shí)候,我完全不知道如何做到水平和垂直均居中的方法,那場(chǎng)面別提有多尷尬了(ps:特想找個(gè)地洞鉆進(jìn)去)。。。時(shí)隔兩年,對(duì)于這個(gè)問(wèn)題算是有一些了解了,現(xiàn)做個(gè)小小的整理,也算是對(duì)自己學(xué)習(xí)的總結(jié)。
        注:文中例子沒(méi)寫明html代碼時(shí),使用的是下面結(jié)構(gòu):
        <div class="example example14">    <div class="con">        超級(jí)好用超級(jí)放心            <a href="https://tinypng.com/" target="_blank">在線壓縮圖片</a>        <span>壓縮完可以 </span>     </div></div>

        只是類名會(huì)有所不同。

        1、Line-height

        適用情景:?jiǎn)涡形淖郑ù怪本又校?br>原理:將單行文字的行高設(shè)定后,文字會(huì)位于行高的垂直中間位置。
        html:

        <div class="example">Lorem ipsam.</div>

        css:

        .example{    width: 400px;    background: #afddf3;    line-height: 50px;}

        2、Line-height + inline-block

        原理:將多個(gè)元素或多行元素當(dāng)成一個(gè)行元素來(lái)看待,所以我們必須要將這些數(shù)據(jù)多包一層,并將其設(shè)定為inline-block。

        由于inline-block在不同瀏覽器會(huì)有空隙產(chǎn)生,因此設(shè)定父元素font-size:0來(lái)消除,從而達(dá)到完美的垂直居中。
        css:

        .example2{    width: 400px;    border: 1px solid #dcdcdc;    line-height: 100px;    font-size: 0;}.example2 .con {    display: inline-block;    line-height: 2;    vertical-align: middle;    width: 300px;    font-size: 15px;    background: #afddf3;}

        3、:before + inline-block

        原理::before 偽類元素搭配 inline-block 屬性的寫法應(yīng)該是很傳統(tǒng)的垂直居中的技巧了,此方式的好處在于子元素居中可以不需要特別設(shè)定高度。

        我們將利用:before偽類元素設(shè)定為100%高的inline-block,再搭配上將需要居中的子元素同樣設(shè)置成inline-block性質(zhì)后,就能使用vertical-align: middle來(lái)達(dá)到垂直居中的目的了。
        此方式在以往其實(shí)是個(gè)非常棒的垂直居中解決方案,唯獨(dú)需要特別處理掉inline-block元素之間的4-5px空間這個(gè)小缺陷,不用怕,設(shè)置父元素font-size: 0,子元素font-size: 15px即可。

        CSS:

        .example3 {    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example3::before {    content: '';    display: inline-block;    height: 100%;    width: 0;    vertical-align: middle;}.example .con {    width: 300px;    font-size: 15px;    background: #afddf3;    display: inline-block;    vertical-align: middle;}

        4、table + margin

        適用情景:?jiǎn)螌?duì)象(水平居中)
        原理:將子元素設(shè)置塊級(jí)表格,再設(shè)置水平居中。
        CSS:

        .example4 {    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example .con {    display: table;    margin: 0 auto;    width: 300px;    font-size: 15px;    background: #afddf3;}

        5、table + table-cell + vertical-align: middle

        適用情景:多對(duì)象(垂直居中)
        html:

        <div class="example example5">    <div class="con">        超級(jí)好用超級(jí)放心            <a href="https://tinypng.com/" target="_blank">在線壓縮圖片</a>        <span>壓縮完可以打包下載哦 </span>     </div>    <div class="con">        CSS-TRICKS    </div></div>

        css:

        .example5 {    display: table;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example .con {    display: table-cell;    vertical-align: middle;    width: 300px;    font-size: 15px;    background: #afddf3;}

        6、absolute + margin 負(fù)值

        原理:設(shè)置絕對(duì)定位,top: 50%;后,再設(shè)置高度一半的負(fù)值實(shí)現(xiàn)。說(shuō)來(lái)說(shuō)去,這就是一道簡(jiǎn)單的數(shù)學(xué)題而已。
        缺陷:需要設(shè)置居中元素的高度。
        優(yōu)勢(shì):無(wú)瀏覽器兼容性問(wèn)題
        css:

        .example6 {    position: relative;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example6 .con {    position: absolute;    top: 50%;    height: 80px;    margin-top: -40px;    width: 300px;    font-size: 15px;    background: #afddf3;}

        7、absolute + margin auto

        原理:當(dāng)元素設(shè)置為絕對(duì)定位后,假設(shè)它是抓不到整體可運(yùn)用的空間范圍,所以margin: auto會(huì)失效,但當(dāng)你設(shè)置了top:0;bottom:0;時(shí),絕對(duì)定位元素就抓到了可運(yùn)用的空間了,這時(shí)你的margin:auto就生效了。
        缺陷:定位元素必須有固定的寬高(百分比也算)。
        css:

        .example7 {    position: relative;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example7 .con {    position: absolute;    top: 0;    bottom: 0;    left: 0;    right: 0;    margin: auto;    height: 80px;    width: 300px;    font-size: 15px;    background: #afddf3;}

        8、absolute + translate

        原理:利用絕對(duì)定位時(shí)的top 與right設(shè)置元素的上方跟左方各為50%,再利用transform: translate(-50%, -50%);位移居中元素自身寬與高的50%就能達(dá)成居中的目的了。
        缺陷:translate是css3屬性,低版本瀏覽器不支持。
        顯著優(yōu)勢(shì):無(wú)需固定定位元素的寬高。
        css:

        .example8 {    position: relative;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example8 .con {    position: absolute;    left: 50%;    top: 50%;    transform: translate(-50%, -50%);    font-size: 15px;    background: #afddf3;}

        9、Flex + align-items

        適用情景:多行文字(垂直居中)
        原理:彈性布局,align-items定義flex子項(xiàng)在flex容器的當(dāng)前行的側(cè)軸(縱軸)方向上的對(duì)齊方式,參考CSS-TRICKS。
        缺陷:css3屬性,低版本瀏覽器不支持。
        顯著優(yōu)勢(shì):無(wú)需固定定位元素的寬高,代碼干凈利索。
        css:

        .example9 {    display: flex;    align-items: center;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example9 .con {    font-size: 15px;    background: #afddf3;}

        10、Flex + justify-content

        適用情景:多行文字(水平居中)
        原理:彈性布局,justify-content設(shè)置或檢索彈性盒子元素在主軸(橫軸)方向上的對(duì)齊方式,參考CSS-TRICKS。
        缺陷:css3屬性,低版本瀏覽器不支持。
        顯著優(yōu)勢(shì):無(wú)需固定定位元素的寬高,代碼干凈利索。
        css:

        .example10 {    display: flex;    justify-content: center;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example .con {    height: 80px;    font-size: 15px;    background: #afddf3;}

        11、Flex + :before + flex-grow

        適用情景:多行文字(垂直居中)
        原理:彈性布局,F(xiàn)lex-direction:column;將項(xiàng)目垂直顯示,正如一個(gè)列一樣。flex-grow: [number];規(guī)定項(xiàng)目將相對(duì)于其他靈活的項(xiàng)目進(jìn)行擴(kuò)展的量,參考CSS-TRICKS。
        缺陷:css3屬性,低版本瀏覽器不支持,并且難度稍大,一般不會(huì)想到這種方法。
        顯著優(yōu)勢(shì):無(wú)需固定定位元素的寬高
        css:

        .example11 {    display: flex;    flex-direction: column;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example11:before {    content: '';    flex-grow: .5;}.example11 .con {    font-size: 15px;    background: #afddf3;}

        12、Flex + margin

        缺陷:css3屬性,低版本瀏覽器不支持。
        css:

        .example12 {    display: flex;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example12 .con {    margin: auto;    width: 300px;    font-size: 15px;    background: #afddf3;}

        13、Flex + align-self

        原理:align-self定義flex子項(xiàng)單獨(dú)在側(cè)軸(縱軸)方向上的對(duì)齊方式。
        缺陷:css3屬性,低版本瀏覽器不支持。
        css:

        .example13 {    display: flex;    justify-content: center;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example13 .con {    align-self: center;    width: 300px;    font-size: 15px;    background: #afddf3;}

        14、Flex + align-content

        原理:align-content在彈性容器內(nèi)的各項(xiàng)沒(méi)有占用交叉軸上所有可用的空間時(shí)對(duì)齊容器內(nèi)的各項(xiàng)(垂直),彈性項(xiàng)目有多項(xiàng)此屬性才會(huì)發(fā)揮作用。
        缺陷:css3屬性,低版本瀏覽器不支持。
        css:

        .example14 {    display: flex;    align-content: center;    flex-wrap: wrap;    margin-top: 10px;    width: 400px;    height: 150px;    font-size: 0;    border: 1px solid #dcdcdc;}.example14:before, .example14:after {    content: "";    display: block;    width: 100%;}.example14 .con {    height: 80px;    width: 300px;    font-size: 15px;    background: #afddf3;}

        下面是一個(gè)比較常見的例子,往往是不想讓圖片發(fā)生變形并且不管尺寸大小均會(huì)顯示在容器的正中央(以下例子應(yīng)用的是第8條)。
        html:

        <div class="imgbox-box">   <div class="imgbox">       <img src="imgs/head.jpeg" alt="">   </div>   <div class="imgbox">       <img src="imgs/head.jpeg" alt="">   </div>   <div class="imgbox">       <img src="imgs/head.jpeg" alt="">   </div></div>

        css:

        .imgbox-box {    display: flex;    justify-content: center;    margin-bottom: 40px;}.imgbox {    width: 200px;    height: 200px;    position: relative;    background: #ebf8ed;    overflow: hidden;}.imgbox img {    position: absolute;    left: 50%;    top: 50%;    transform: translate(-50%, -50%);    max-width: 100%;    max-height: 100%;}

        結(jié)語(yǔ)

        有些是水平居中,有些是垂直居中,將它們某兩個(gè)合在一起就能實(shí)現(xiàn)水平和垂直均居中。

        感謝你的閱讀,希望這些小技巧對(duì)你有用。


        學(xué)習(xí)更多技能

        請(qǐng)點(diǎn)擊下方公眾號(hào)


        瀏覽 35
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲第二页 | 粉嫩高清一区二区三区精品视频 | 在线无遮挡| 福利综合网| 首页国产精品 | 色老太HD老太色HD盘 | 三级黄色在线视频 | 久久gogo | 天天爽天天爱天天干 | 国产118页|