css 11種垂直居中方法

2021-09-01 09:27:33 字數 3557 閱讀 6940

1. 使用絕對定位和負外邊距對塊級元素進行垂直居中

html**:

我是測試div

css**:

#box #child

執行結果如下:

這個方法相容性不錯,但是有乙個小缺點:必須提前知道被居中塊級元素的尺寸,否則無法準確實現垂直居中。

2. 使用絕對定位和transform

html**:

我是一串很長很長很長很長很長很長很長很長很長很長很長很長很長很長很長很長的文字

css**:

#box #child

執行結果如下:

這種方法有乙個非常明顯的好處就是不必提前知道被居中元素的尺寸了,因為transform中translate偏移的百分比就是相對於元素自身的尺寸而言的。

3. 另外一種使用絕對定位和負外邊距進行垂直居中的方式

html**:

我也是個測試div

css**:

#box #child

執行結果如下:

這種方式的原理實質上和前兩種相同。補充的一點是:margin的取值也可以是百分比,這時這個值規定了該元素基於父元素尺寸的百分比,可以根據實際的使用場景來決定是用具體的數值還是用百分比。

4. 絕對定位結合margin: auto

html**:

呆呆今天退役了(。﹏。)

css**:

#box #child

執行結果如下:

這種實現方式的兩個核心是:把要垂直居中的元素相對于父元素絕對定位,top和bottom設為相等的值,我這裡設成了0,當然你也可以設為99999px或者-99999px無論什麼,只要兩者相等就行,這一步做完之後再將要居中元素的margin設為auto,這樣便可以實現垂直居中了。

被居中元素的寬高也可以不設定,但不設定的話就必須是這種自身就包含尺寸的元素,否則無法實現。

5. 使用padding實現子元素的垂直居中

html**:

今天西安的霾嚴重的嚇人,剛看了一眼pm2.5是422

css**:

#box #child

執行結果如下:

這種實現方式非常簡單,就是給父元素設定相等的上下內邊距,則子元素自然是垂直居中的,當然這時候父元素是不能設定高度的,要讓它自動被填充起來,除非設定了乙個正好等於上內邊距+子元素高度+下內邊距的值,否則無法精確的垂直居中。

這種方式看似沒有什麼技術含量,但其實在某些場景下也是非常好用的。

6. 設定第三方基準

html**:

今天寫了第一篇部落格,希望可以堅持寫下去!

css**:

#box #base #child

執行結果如下:

這種方式也非常簡單,首先設定乙個高度等於父元素高度一半的第三方基準元素,那麼此時該基準元素的底邊線自然就是父元素縱向上的中分線,做完這些之後再給要垂直居中的元素設定乙個margin-top,值的大小是它自身高度的一半取負,則實現垂直居中。

7. 使用flex布局

html**:

霧霾天氣,太久沒有打球了

css**:

#box

執行結果如下:

這種方式同樣適用於塊級元素:

html**:

程式設計師怎麼才能保護好眼睛?

css**:

#box #child

執行結果如下:

flex布局(彈性布局/伸縮布局)裡門道頗多,這裡先針對用到的東西簡單說一下,想深入學習的小夥伴可以去看阮一峰老師的部落格。(

flex也就是flexible,意為靈活的、柔韌的、易彎曲的。

元素可以通過設定display:flex;將其指定為flex布局的容器,指定好了容器之後再為其新增align-items屬性,該屬性定義專案在交叉軸(這裡是縱向軸)上的對齊方式,可能的取值有五個,分別如下:

flex-start::交叉軸的起點對齊;

flex-end:交叉軸的終點對齊;

center:交叉軸的中點對齊;

baseline:專案第一行文字的基線對齊;

stretch(該值是預設值):如果專案沒有設定高度或者設為了auto,那麼將佔滿整個容器的高度。

8. 第二種使用彈性布局的方式

html**:

答案當然是多用綠色的背景哈哈

css**:

#box #child

執行結果如下:

這種方式也是首先給父元素設定display:flex,設定好之後改變主軸的方向flex-direction: column,該屬性可能的取值有四個,分別如下:

row(該值為預設值):主軸為水平方向,起點在左端;

row-reverse:主軸為水平方向,起點在右端;

column:主軸為垂直方向,起點在上沿;

column-reverse:主軸為垂直方向,起點在下沿。

justify-content屬性定義了專案在主軸上的對齊方式,可能的取值有五個,分別如下(不過具體的對齊方式與主軸的方向有關,以下的值都是假設主軸為從左到右的):

flex-start(該值是預設值):左對齊;

flex-end:右對齊;

center:居中對齊;

space-between:兩端對齊,各個專案之間的間隔均相等;

space-around:各個專案兩側的間隔相等。

9. 還有一種在前面已經見到過很多次的方式就是使用 line-height 對單行文字進行垂直居中

html**:

我是一段測試文字

css**:

#box

執行結果如下:

這裡有乙個小坑需要大家注意:line-height(行高) 的值不能設為100%,我們來看看官方文件中給出的關於line-height取值為百分比時候的描述:基於當前字型尺寸的百分比行間距。所以大家就明白了,這裡的百分比並不是相對于父元素尺寸而言,而是相對於字型尺寸來講的。

10. 使用 line-height 和 vertical-align 對進行垂直居中

html**:

css**:

#box #box img

執行結果如下:

vertical-align並不像看起來那樣天真無邪童叟無欺,以後會單獨拎出來專門寫一篇。

11. 使用 display 和 vertical-align 對容器裡的文字進行垂直居中

html**:

我也是一段測試文字

css**:

#box #child

執行結果如下:

這裡關於vertical-align囉嗦兩句:vertical-align屬性只對擁有valign特性的html元素起作用,例如**元素中的等等,而像這樣的元素是不行的。

valign屬性規定單元格中內容的垂直排列方式,語法:,value的可能取值有四種:

top:對內容進行上對齊

middle:對內容進行居中對齊

bottom:對內容進行下對齊

baseline:基線對齊

關於baseline值:基線是一條虛構的線。在一行文字中,大多數字母以基線為基準。baseline 值設定行中的所有**資料都分享相同的基線。該值的效果常常與 bottom 值相同。不過,如果文字的字型大小各不相同,那麼 baseline 的效果會更好。 

10種CSS水平垂直居中方法

編寫該博文僅僅作為梳理,鞏固學習,加強記憶。場景一 居中元素寬高已知 absolute 負 margin absolute margin auto absolute calc 場景二 居中元素寬高未知absolute transform line height writing mode table ...

CSS垂直居中水平居中方法

center 剛在別人的部落格裡看到這種方法時真的覺得很奇葩,以下是大神的解釋 解釋 1 在普通內容流中,margin auto的效果等同於margin top 0 margin bottom 0。2 position absolute使絕對定位塊跳出了內容流,內容流中的其餘部分渲染時絕對定位部分不...

CSS 16種水平居中垂直居中方法

若是行內元素,給其父元素設定text align center,即可實現行內元素水平居中.若是塊級元素,該元素設定margin 0 auto即可.若子元素包含float left屬性,為了讓子元素水平居中,則可讓父元素寬度設定為fit content,並且配合margin,作如下設定 parent ...