日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

談?wù)凜SS實(shí)現(xiàn)水平垂直居中布局的方法


最近面試的時(shí)候,面試官問到了CSS水平垂直居中布局的方式,對(duì)于剛?cè)肭岸藳]多久的我,無疑是一臉懵逼,閑了趕緊查閱資料分析一波,給各位分享一下,避免落坑。

首先先說明一下html和一些基礎(chǔ)css樣式,下面就不再贅述!

html

<body>
    <div class="div1">
        <div class="box  size">垂直水平居中</div>
    </div>
</body>

公共css代碼如下

<style type="text/css">
/* 公共樣式 */
.div1{
    width: 300px;
    height: 300px;
    border:1px solid aqua;
}
.box{
    background: #00FFFF;
}
.box.size{
    width:100px;
    height:100px;
}
</style>

這些css樣式在后續(xù)介紹中默認(rèn)帶上,不再贅述!

一、 absolute 和 margin auto(常用)

同樣居中元素的寬高必須固定,并且需要得知子元素的寬高
這種方式通過設(shè)置各個(gè)方向的距離都是0,此時(shí)再將margin設(shè)為auto,就可以在各個(gè)方向上居中了

.div1{
    position: relative;
}
.box{
    position: absolute;
    top:0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
}

     

二、absolute 和margin(負(fù)值)

簡單說一下原理,利用了絕對(duì)定位,絕對(duì)定位的百分比是相對(duì)于父元素的寬高,所以我們可以根據(jù)這個(gè)原理將元素居中顯示。但是要注意:絕對(duì)定位是基于子元素的左上角來說的,但是要想讓子元素居中顯示,就要解決這個(gè)問題。
此時(shí)可以利用margin的負(fù)值來實(shí)現(xiàn)效果,當(dāng)外邊距為負(fù)值時(shí),元素向相反方向定位,這樣我們將子元素的外邊距設(shè)置為子元素的寬高的一半就可以實(shí)現(xiàn)了。(PS:缺點(diǎn)就是必須得到子元素的寬高)

.div1{
    position: relative;
}
.box{
    top: 50%;
    left: 50%;
    position: absolute;
    margin-top: -50px;
    margin-left: -50px;
}

三、absolute 和 calc

同樣需要子元素的寬高固定,并知道寬高,css3具有計(jì)算屬性。

top的百分比是基于元素左上角減去寬度的一半即可(PS:依賴calc的兼容性)

.div1{
    position: relative;
}
.box{
    position: absolute;
    top: calc(50% - 50px ); 
    /* 減號(hào)前后沒有空格,該樣式不生效*/
    left: calc(50% - 50px );
}

    

當(dāng)我在寫這段代碼的時(shí)候,發(fā)現(xiàn)一個(gè)有趣的事情,calc(50%-50px)如果減號(hào)前后沒有空格的話,樣式就不會(huì)生效,寫上空格的話,就會(huì)正常生效了,具體原因我也不太清楚emmmmm

下面的方法將不需要知曉子元素的寬高即可設(shè)置

html修改為:

<body>
    <div class="div1">
        <div class="box">水平垂直居中,不需要子元素固定寬高</div>
    </div>
</body>

公共css如下

.div1{
    width: 300px;
    height: 300px;
    border: 1px solid red;
}
.box{
    background: #00FFFF;
}

四、flex(常用)

flex是現(xiàn)代的布局方案僅僅需要幾行代碼即可實(shí)現(xiàn)居中效果

.div1{
    display: flex;
    justify-content: center;
    align-items: center;
}

五、line-height

利用行內(nèi)元素居中屬性也可以做到水平垂直居中。把box設(shè)置為行內(nèi)元素,通過text-align就可以實(shí)現(xiàn)水平居中vertical-align 也可以在垂直方向做到居中(PS:這種方法需要在子元素中將文字顯示重置為想要的效果)

.div1{
    line-height: 300px;
    text-align: center;
    font-size: 0px;
}
.box{
    font-size: 10px;
    display: inline-block;
    vertical-align: middle;
    line-height:initial;
    /* 修正文字 */
    text-align: left;
}

六、absolute 和 transform

不需要子元素寬高固定,但是依賴于translate2d的兼容性

.div1{
    position: relative;
}
.box{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
}

七、css-table

css新增的table屬性,可以把普通元素改變?yōu)閠able元素的顯示效果,也可以實(shí)現(xiàn)水平居中

.div1{
    display:table-cell;
    text-align: center;
    vertical-align: middle;
}
.box{
    display:inline-block;
}

以上就是我總結(jié)的一些居中布局的方法了,還有什么其他的歡迎補(bǔ)充!

個(gè)人感覺: 我比較喜歡 absolute +margin auto 、flex、absolute 和 transform,移動(dòng)端最好用flex吧,pc端我喜歡 absolute +margin auto





分享到:
標(biāo)簽:CSS 水平垂直 居中布局
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定