CSS實現(xiàn)元素水平垂直居中的幾種方法

1. 使用Flexbox布局
Flexbox是CSS的強大布局模型,它為我們提供了簡單而靈活的方法來實現(xiàn)元素的水平和垂直居中。
html復(fù)制代碼 <div class="container"> <div class="centered-element"> <!-- 內(nèi)容 --> </div> </div>
css復(fù)制代碼 .container { display: flex; justify-content: center; align-items: center; /* 設(shè)置容器的寬高,如果需要 */ width: 100vw; height: 100vh; } .centered-element { /* 元素樣式 */ }
上面的代碼中,我們使用了Flexbox布局模型,通過display: flex;
將容器設(shè)置為彈性布局容器。justify-content: center;
和align-items: center;
分別使內(nèi)容在水平和垂直方向上居中。
2. 使用絕對定位和transform
另一種常用的方法是使用絕對定位和CSS的transform
屬性來實現(xiàn)元素的居中。
html復(fù)制代碼 <div class="container"> <div class="centered-element"> <!-- 內(nèi)容 --> </div> </div>
css復(fù)制代碼 .container { position: relative; /* 設(shè)置容器的寬高,如果需要 */ width: 100vw; height: 100vh; } .centered-element { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); /* 元素樣式 */ }
上面的代碼中,我們將容器設(shè)置為相對定位,并通過top: 50%;
和left: 50%;
將元素的左上角定位到了容器的中心。然后,通過transform: translate(-50%, -50%);
將元素向左和向上移動自身寬高的一半,從而實現(xiàn)元素在水平和垂直方向上的居中。
3. 使用Grid布局
如果你在項目中已經(jīng)使用了CSS的Grid布局,那么也可以很容易地實現(xiàn)元素的水平和垂直居中。
html復(fù)制代碼 <div class="container"> <div class="centered-element"> <!-- 內(nèi)容 --> </div> </div>
css復(fù)制代碼 .container { display: grid; place-items: center; /* 設(shè)置容器的寬高,如果需要 */ width: 100vw; height: 100vh; } .centered-element { /* 元素樣式 */ }
在上面的代碼中,我們使用了Grid布局,通過display: grid;
將容器設(shè)置為網(wǎng)格容器。然后,通過place-items: center;
將內(nèi)容在網(wǎng)格容器中居中。
4. 使用text-align和line-height
如果你需要讓一個行內(nèi)元素水平垂直居中,你可以使用text-align: center;
將內(nèi)容在水平方向上居中,然后使用line-height
屬性設(shè)置和容器高度相等的行高來實現(xiàn)垂直居中。
html復(fù)制代碼 <div class="container"> <span class="centered-text">居中文本</span> </div>
css復(fù)制代碼 .container { /* 設(shè)置容器的寬高,如果需要 */ width: 100vw; height: 100vh; text-align: center; line-height: 100vh; } .centered-text { /* 元素樣式 */ display: inline-block; vertical-align: middle; }
在上面的代碼中,我們將容器設(shè)置為文本居中,并設(shè)置行高和容器高度相等,從而實現(xiàn)行內(nèi)元素的垂直居中。同時,為了讓行內(nèi)元素居中,我們還使用了display: inline-block;
和vertical-align: middle;
。
5. 利用定位+margin:auto
父級設(shè)置為相對定位,子級絕對定位 ,并且四個定位屬性的值都設(shè)置了0,那么這時候如果子級沒有設(shè)置寬高,則會被拉開到和父級一樣寬高
<style> .father{ width:500px; height:300px; border:1px solid #0a3b98; position: relative; } .son{ width:100px; height:40px; background: #f0a238; position: absolute; top:0; left:0; right:0; bottom:0; margin:auto; } </style> <div class="father"> <div class="son"></div> </div>
這里子元素設(shè)置了寬高,所以寬高會按照我們的設(shè)置來顯示,但是實際上子級的虛擬占位已經(jīng)撐滿了整個父級,這時候再給它一個margin:auto
它就可以上下左右都居中了
6. 利用定位+margin:負(fù)值
絕大多數(shù)情況下,設(shè)置父元素為相對定位, 子元素移動自身50%實現(xiàn)水平垂直居中
<style> .father { position: relative; width: 200px; height: 200px; background: skyblue; } .son { position: absolute; top: 50%; left: 50%; margin-left:-50px; margin-top:-50px; width: 100px; height: 100px; background: red; } </style> <div class="father"> <div class="son"></div> </div>
- 初始位置為方塊1的位置
- 當(dāng)設(shè)置left、top為50%的時候,內(nèi)部子元素為方塊2的位置
- 設(shè)置margin為負(fù)數(shù)時,使內(nèi)部子元素到方塊3的位置,即中間位置
這種方案不要求父元素的高度,也就是即使父元素的高度變化了,仍然可以保持在父元素的垂直居中位置,水平方向上是一樣的操作,但是該方案需要知道子元素自身的寬高,但是我們可以通過下面transform屬性進(jìn)行移動
總結(jié)
根據(jù)元素標(biāo)簽的性質(zhì),可以分為:
- 內(nèi)聯(lián)元素居中布局
- 塊級元素居中布局
內(nèi)聯(lián)元素居中布局
水平居中
- 行內(nèi)元素可設(shè)置:text-align: center
- flex布局設(shè)置父元素:display: flex; justify-content: center
垂直居中
- 單行文本父元素確認(rèn)高度:height === line-height
- 多行文本父元素確認(rèn)高度:disaply: table-cell; vertical-align: middle
塊級元素居中布局
水平居中
- 定寬: margin: 0 auto
- 絕對定位+left:50%+margin:負(fù)自身一半
垂直居中
- position: absolute設(shè)置left、top、margin-left、margin-top(定高)
- display: table-cell
- transform: translate(x, y)
- flex(不定高,不定寬)
- grid(不定高,不定寬),兼容性相對比較差
到此這篇關(guān)于CSS實現(xiàn)元素水平垂直居中的幾種方法的文章就介紹到這了,更多相關(guān)CSS元素水平垂直居中內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- 相信大家在面試的時候也會經(jīng)常碰到css實現(xiàn)元素居中的方法,下面我介紹6種方法給大家,歡迎大家評論區(qū)交流2023-09-07
- 這篇文章主要介紹了css實現(xiàn)元素居中的N種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
- 這篇文章主要介紹了css 不定寬高的元素居中布局解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起2019-09-18
- 這篇文章主要為大家詳細(xì)介紹了css使用flexbox布局容器內(nèi)多元素水平居中的方法,如何使用flexbox布局多元素水平居中?本文為大家進(jìn)行解答,感興趣的小伙伴們可以參考一下2016-03-17
- 這篇文章主要介紹了使用CSS居中浮動元素的方法,是CSS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-07-29
- 這篇文章主要介紹了CSS元素居中布局的簡單方法,文中介紹了內(nèi)嵌元素和塊元素以及行內(nèi)塊三種情況,需要的朋友可以參考下2015-07-18
CSS實現(xiàn)網(wǎng)頁分欄布局的方法:絕對定位和浮動
網(wǎng)頁制作Webjx文章簡介:在CSS中,實現(xiàn)分欄布局有兩種方法。第一種方法是使用四種CSS定位選項(absolute 、static、relative和fixed)中的絕對定位(absolute positioning2009-04-02基本的頁面設(shè)計元素布局比例-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
基本的頁面設(shè)計元素布局比例,給大家做個參考 標(biāo)志圖案: 位置 統(tǒng)計結(jié)果2008-10-17網(wǎng)頁布局 CSS簡單實現(xiàn)垂直居中-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
英文原文: http://www.search-this.com/2008/05/15/easy-vertical-centering-with-css/ 中文譯文: http://www.12sui.cn/blog/71.html 本人英語還沒過四級,所以不2008-10-17