tft每日頭條

 > 圖文

 > css如何實現垂直居中對齊

css如何實現垂直居中對齊

圖文 更新时间:2025-03-18 19:50:04

各位小夥伴在寫前端代碼的時候,經常會遇到元素垂直居中的情況,雖然css垂直居中是一個很簡單的問題,但細細研究下來卻發現原來一個垂直居中并不簡單。

先從一個最簡單的場景說一下吧。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)1

如上圖所示,在一個固定的div框内有一行文字,我們需要把文字水平垂直居中,我相信各位小夥伴都可以解決這個問題,就是給文字一個行高,以及text-align。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)2

但有一天我們發現紅框的文字變成多行的時候,問題就來了

css如何實現垂直居中對齊(css垂直居中方法純幹貨)3

這時候我們就發現我們就發現文字竟然跑到外面去了,這時候我們就發現剛才方法的弊端就是隻适用于單行文字垂直居中。那我們怎麼解決多行文字垂直居中的問題呢?我們先來一個笨辦法試試效果。現在文字有兩行,我們要求文字的行高是30px。那兩行的文字的高度就是60px。外面紅框的高度是100px。如果讓文字垂直居中的話需要給span一個( 100 - 60 ) / 2 = 30px的padding-top。好廢話不多說,上代碼

css如何實現垂直居中對齊(css垂直居中方法純幹貨)4

css如何實現垂直居中對齊(css垂直居中方法純幹貨)5

可運行結果确沒有按照我們想象中的進行,文字并沒有垂直居中,這是為什麼呢?這是因為span默認是行内元素,行内元素給padding-top是不起作用的,這時候我們需要做的就是改變span的display,讓其變成塊元素。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)6

css如何實現垂直居中對齊(css垂直居中方法純幹貨)7

這時候我們發現文字已經垂直居中啦。但這個padding-top需要手動計算出結果,可不可以讓css自動計算出padding-top的值呢(這裡問什麼用padding-top而不用margin-top呢?其實這裡有個很尖銳的問題,先挖個坑,留着以後說明)?答案是可以的,css3中新增的計算屬性calc()就可以幫我們解決這個問題。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)8

需要注意的一點就是calc中的運算符号前後需要各加一個空格

這個時候我們發現即使用calc計算也存在很多問題,這種方法“太笨”了,比如現在文字變成了三行,行距變成了20px。這時候我們需要重新計算padding-top的值。由此我們可以得出這種方法的适用于文字基本固定不變的場景。如何解決動态内容的垂直居中呢?我們先把span的display:block去掉,然後加另外一個屬性vertical-align。這個屬性是用來處理元素垂直對齊方式的

css如何實現垂直居中對齊(css垂直居中方法純幹貨)9

運行結果确跟我們想象的并不一樣

css如何實現垂直居中對齊(css垂直居中方法純幹貨)10

文字沒有垂直居中。vertical-align這個屬性脾氣很怪異,時而有用,時而無用,有很多時候着實讓人摸不着頭腦,關于此屬性的解析我會在後續的文章中做詳細的講解,在這就不過多的闡述。我們都知道html中的單元格是有水平居中與垂直居中的屬性的,那我們可不可以把span變成具有單元格屬性的元素呢?答案當然是肯定的。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)11

css如何實現垂直居中對齊(css垂直居中方法純幹貨)12

文字并沒有垂直居中,其實這是因為需要單元格無法根據父元素的高度在确定自己的高度決定的,決絕方法就是給一個高度即可,

css如何實現垂直居中對齊(css垂直居中方法純幹貨)13

css如何實現垂直居中對齊(css垂直居中方法純幹貨)14

完美。不管文字有多少個,多少行,文字始終會垂直居中了。這種方法是很值得推薦的,因為兼容性好,甚至可以兼容ie6。前提是文字總内容不要超出外邊框

css如何實現垂直居中對齊(css垂直居中方法純幹貨)15

文字可以通過js或者後端程序進行截取。

用vertical-align: middle配合display: table-cell;讓元素居中的在很多時候是很脆弱的,比如一旦使用的float或者絕對定位固定定位等就會失效。

上面讨論的方法都是限制知道外部元素具體的高度情況下的垂直居中,一旦外部高度改變,那我們就需要修改span相對應的參數,很不方便,也不靈活。那外部容器高度不确定的情況下如何做到垂直居中呢?

我們可以利用最經典的方式positon margin

css如何實現垂直居中對齊(css垂直居中方法純幹貨)16

運行結果:

css如何實現垂直居中對齊(css垂直居中方法純幹貨)17

完美,綠色的方塊已垂直居中。這時候我們修改外部元素的高度綠色的塊也會居中。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)18

css如何實現垂直居中對齊(css垂直居中方法純幹貨)19

内部元素用到top與margin-top兩個屬性來控制元素垂直居中,雖然margin-top可以用calc()來計算,但還是需要在寫一次内部元素的高度,那有什麼辦法解決這一問題呢?其實很簡單,

css如何實現垂直居中對齊(css垂直居中方法純幹貨)20

css如何實現垂直居中對齊(css垂直居中方法純幹貨)21

給絕地定位的元素一個初始left,top,bottom, right。那元素的margin:auto就會起作用。

如果這時候讓文字也在綠色框中垂直居中呢?我們想到了很經典的vertical-align: middle配合display: table-cell。但這裡用了絕對定位,用vertical-align: middle不會起作用。那我們解決這問題呢?

很簡單我們在span裡面在嵌套一層。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)22

運行結果:

css如何實現垂直居中對齊(css垂直居中方法純幹貨)23

完美。垂直中的垂直。

那問題又來了,如果外部元素的高度位置,内部元素的高度未知,如何做到内部元素相對于外部元素垂直居中呢?

解決這個問題的方法有很多種,大部分是用css3去處理的。當然css2也是可以完成的。我再這裡寫幾種比較常見的

這裡用文字垂直居中舉例說明,為什麼用文字呢?因為文字的高度是不固定的,文字的多少會影響元素的高度,所有用文字垂直居中來演示再好不過了。

第一種是用::before僞元素配合vertical-align

css如何實現垂直居中對齊(css垂直居中方法純幹貨)24

css如何實現垂直居中對齊(css垂直居中方法純幹貨)25

這裡需要注意的就是display: inline-block元素之間的間距問題。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)26

css如何實現垂直居中對齊(css垂直居中方法純幹貨)27

由于display: inline-block間距的問題導緻文字達到一定寬度的時候會整體移出外部元素,解決辦法是吧外部元素的字體大小設置為0,然後再在内部元素内加一個字體大小即可。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)28

css如何實現垂直居中對齊(css垂直居中方法純幹貨)29

是不是很完美。但這時候對有強迫症的我來說發現一個問題,就是文字左右邊距竟然不一樣。

css如何實現垂直居中對齊(css垂直居中方法純幹貨)30

這個問題的解決方法也很簡單,來一個text-align: justify;文字兩端對齊

css如何實現垂直居中對齊(css垂直居中方法純幹貨)31

css如何實現垂直居中對齊(css垂直居中方法純幹貨)32

第二種方法就是定位配合位移。

前文提到用posrtion配合top以及margin-top實現垂直居中,前提是需要知道居中元素的高度,如果用css3的transform: translate()屬性的話就無需知道内部元素的高度啦

css如何實現垂直居中對齊(css垂直居中方法純幹貨)33

css如何實現垂直居中對齊(css垂直居中方法純幹貨)34

是不是感覺css3真的很神奇。

第三種方法就是利用flex

css如何實現垂直居中對齊(css垂直居中方法純幹貨)35

css如何實現垂直居中對齊(css垂直居中方法純幹貨)34

是不是很簡單粗暴,内容部元素都不需要寫任何樣式。果然還是css3好用啊

第四種方法就是利用Grid template

這個用的css3的列,使用不是很多,有興趣的小夥伴可以自行了解一下。

關于flex跟Grid讓元素垂直居中可以裂變出很多種方法,在這裡我就不一一列舉了,以後介紹flex或者grid的時候會詳細介紹,再次不在贅述。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved