前端面試中,CSS相關(guān)的問題一般不會問的太多,但是有一個問題經(jīng)常被選為面試題。那就是:div 水平垂直居中你有哪些辦法?
這道題可以考察候選人對CSS布局方式的理解,而且非常貼近日常工作,比較適合作為面試題。今天我就幫大家梳理一下CSS實現(xiàn)div水平垂直居中的方法,建議收藏。
為了演示,首先創(chuàng)建兩個嵌套的 div,然后設(shè)置一下大小和背景顏色這樣比較容易看出效果。代碼如下:
// html
<div class="outer outer-box">
<div class="inner inner-box"></div>
</div>
// css
<style>
.outer {
height: 100px;
width: 100px;
background-color: royalblue;
}
.inner {
height: 50px;
width: 50px;
background-color: red;
}
<style>
設(shè)置完的效果就是這樣,然后我們需要把內(nèi)部的div 水平垂直居中。準(zhǔn)備就緒,正式開始。我們分別使用 Flex 布局,Position布局, Grid布局三種方式。
Flex 是Flexible Box的縮寫,意為”彈性布局”。Flexible Box 模型是一種一維的布局模型,一次只能處理一個維度上的布局。flex布局有兩根軸線,主軸和交叉軸。flex就是根據(jù)這兩個軸線布局元素。
1.1 對外層div設(shè)置flex布局
在外層 div 上設(shè)置 justify-content: center; align-items: center; 屬性, display 設(shè)置為 flex。即可實現(xiàn)水平垂直居中。
1.2 內(nèi)外div分別設(shè)置
結(jié)果如下圖:
Flex實現(xiàn)水平處置居中
Position布局是傳統(tǒng)的布局方式,position屬性指定定位方式,利用CSS盒模型實現(xiàn)定位布局。
2.1 內(nèi)部div使用 margin 屬性居中
2.2 內(nèi)部 div 使用 transform 屬性居中
實現(xiàn)結(jié)果如下:
Grid(網(wǎng)格)布局被稱為最強大的CSS布局方案,它可以將一個頁面劃分為幾個主要區(qū)域,以及定義這些區(qū)域的大小、位置、層次等關(guān)系。
上面這種布局,Grid非常擅長。Flex布局屬于一維布局,Grid布局可以將容器分為行和列,對單元格進行布局,屬于二維布局。
3.1 外層div使用 place-content 屬性
3.2 外層div使用Grid布局
3.3 內(nèi)外div分別設(shè)置
實現(xiàn)結(jié)果如下:
常見的問題也不見得簡單,前端知識還是常學(xué)常新的。了解不同類型的CSS布局方式,對處理實際問題也很有幫助。
以上就是CSS實現(xiàn)div水平垂直居中的7種方式。如果你有別的方式,歡迎和大家一起分析。
如果覺得文章對您有幫助,歡迎收藏,轉(zhuǎn)發(fā)~
端面試題中經(jīng)常會出現(xiàn)這個問題,接下來,小郭就帶你揭秘幾種最常見的答案。
關(guān)注我!了解更多前端干貨!
先設(shè)定一個html結(jié)構(gòu)以及css的基本樣式。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>如何讓div實現(xiàn)水平居中</title> </head> <body> <div id="dad"> <div id="son"></div> </div> </body> </html>
css樣式
#dad{ width: 400px; height: 200px; border: 3px solid green; margin: 30px auto; } #son{ width: 100px; height: 100px; background: purple; }
方法一:純margin
/*css處添加下面代碼*/ #son{ margin:0 auto; }
方法二:position定位
/*css處添加下面代碼*/ #dad{ position: relative; } #son{ position: absolute; left:50%; margin-left:-50px; } /*注意:margin-left是負(fù)值,是#son這個div寬的一半*/?
方法三:flexbox
/*css處添加下面代碼*/ #dad{ display: flex; justify-content: center; } /*注意:彈性盒子的大部分屬性都是寫在父級上的*/
以上三種是最常見的,下期我們來講講其他奇形怪狀的方法~
關(guān)注我,帶你了解更多前端干貨!
學(xué)前端,就選銳盈課堂!
自己是一名從事了多年開發(fā)的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年年初我花了一個月整理了一份最適合2019年學(xué)習(xí)的web前端學(xué)習(xí)干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關(guān)注我的頭條號并在后臺私信我:前端,即可免費獲取
Html5-CSS之五大居中方式
你是不是也對元素居中的知識點很是模糊?是不是苦于找不到一個總結(jié)的通俗易懂的說明?是不是自己懶得去總結(jié)?恭喜你,搜到這篇博客! 這是鄙人在前端的學(xué)習(xí)與實踐中總結(jié)出的元素的五大居中方式,黏貼了代碼并對代碼做了解釋,希望對迷茫的有所幫助!
下面的居中示例中,統(tǒng)一使用了同一個div作為父元素和p作為子元素
設(shè)置一個div,并且設(shè)置了div的寬高邊框,div里面設(shè)置一個塊元素p,設(shè)置了它的寬高和背景色
css居中方式1
<!doctype html> <html> <head> <meta charset="utf-8"> <title>五大居中1</title> <style> *{margin:0;} div{width:200px;height:300px;border:2px solid #000;margin:200px auto; text-align:center;font-size:0; } div p{width:100px;height:100px;background:#666; display:inline-block;vertical-align:middle; } div:after{content:"";display:inline-block;height:100%;vertical-align:middle;} </style> </head> <body> <div> <p></p> </div> </body> </html>
這里利用了偽元素讓子元素p在div盒子里左右水平居中只需要在它的父元素div里加text-align:center;垂直方向居中需要在父元素后面加了一個偽元素,并使得樣式為inline-block;height:100%;就是和父元素一樣高,vertical-align:middle;垂直居中,也就是p元素相對與偽元素居中,由于偽元素和div一樣高,所以相當(dāng)于p元素在div里垂直居中。
css居中方式2
<!doctype html> <html> <head> <meta charset="utf-8"> <title>五大居中2</title> <style> *{margin:0;} div{position:relative;width:300px;height:400px;border:1px solid #000;margin:100px auto;} p{position:absolute;left:0;bottom:0;right:0;top:0;margin:auto;width:100px;height:100px;background:#f99;} </style> </head> <body> <div> <p></p> </div> </body> </html>
這里利用了定位居中
子元素p設(shè)置position:absolute脫離文檔流,默認(rèn)以html作為父元素,所以我們給父元素div設(shè)置position:relative;使得p以div為父元素做位置的變動,left:0;tight:0;top:0;bottom:0;(只有設(shè)置了定位的元素才可以使用這種方式來移動),最后margin:auto;就會水平和垂直都居中。
css居中方式3
<!doctype html> <html> <head> <meta charset="utf-8"> <title>五大居中3</title> <style> *{margin:0;} div{display:flex;justify-content:center;align-items:center;width:300px;height:400px;border:1px solid #000;margin:100px auto;} p{width:100px;height:100px;background:#f99;} </style> </head> <body> <div> <p></p> </div> </body> </html>
這里利用了彈性盒居中
父元素div設(shè)置成彈性盒樣式,justify-content:center;主軸居中
align-items:center;垂直居中(而且這兩個只能設(shè)置在父元素上,彈性盒知識)
css居中方式4
<!doctype html> <html> <head> <meta charset="utf-8"> <title>五大居中4</title> <style> *{margin:0;} div{position:relative;width:300px;height:400px;border:1px solid #000;margin:100px auto;} p{width:100px;height:100px;background:#f99;position:absolute; left:50%;top:50%;margin:-50px 0 0 -50px;} </style> </head> <body> <div> <p></p> </div> </body> </html>
利用定位線左上角居中,然后左移子元素寬度的一半,再上移子元素高度的一半。
css居中方式5
<!doctype html> <html> <head> <meta charset="utf-8"> <title>五大居中5</title> <style> *{margin:0;} div{position:relative;width:300px;height:400px;border:1px solid #000;margin:100px auto;} p{position:absolute;width:100px;height:100px;background:#f99;left:50%;top:50%; transform:translate(-50%,-50%);} </style> </head> <body> <div> <p></p> </div> </body> </html>
利用動畫移動屬性transform
結(jié)語
相信看了上面的有關(guān)Html5、css的元素五大居中方式,你們就可以解決自己的小問題了,但是也要養(yǎng)成一個總結(jié)的好習(xí)慣。好記性不如爛筆頭!以前留下來的話語總是有他的道理。Come on!
原文鏈接:https://blog.csdn.net/qq_38110274/article/details/102756968
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。