CSS佈局之水平居中和垂直居中
一、前言
開發中給標籤(元素)設定居中的使用場景非常頻繁,不同的標籤型別設定方式也不同,本文旨在總結一套常用和標準的設定方式,同時也深入解析這樣實現的原理。首先,我們大概來過一下一些必要的HTML知識點,有經驗的童鞋可以略過。
二、HTML標籤型別
1,HTML有N多標籤,根據顯示的型別,主要可以分為3大類。
- 塊級標籤:獨佔一行的標籤。能隨時設定寬度和高度(比如div、p、h1、h2、ul、li)。
- 行內標籤(內聯標籤):多個行內標籤能同時顯示在一行。寬度和高度取決於內容的尺寸(比如span、a、label)。
- 行內-塊級標籤(內聯-塊級標籤):多個行內-塊級標籤可以顯示在同一行。能隨時設定寬度和高度(比如input、button)。
2,修改標籤的顯示型別。不同型別的標籤在進行佈局時都有它們的侷限性,要麼不能多行顯示,要麼不能設定標籤的尺寸,比如說塊級標籤div
在頁面中隨處可見,但是獨佔一行,如果我們需要它能夠在多行顯示,就需要修改標籤的顯示型別為行內-塊級標籤,因為行內-塊級標籤既可以多行顯示又可以設定標籤的寬高。當然我們可以根據不同的佈局需求來修改標籤的顯示型別。在CSS中,我們可以通過display
屬性來達到目的,下面是它的可選取值:
- none:隱藏標籤
- block:讓標籤變為塊級標籤
- inline:讓標籤變為行內標籤
- inline-block:讓標籤變為行內-塊級標籤
三、水平居中
1. 行內標籤、行內-塊級標籤
在父標籤的樣式中設定:
text-align: center
在這裡text-align有兩個作用:
- text-align會讓所有的子標籤水平居中對齊。
- text-align是繼承屬性,子標籤因為繼承了text-align的居中屬性,裡面的內容也會居中對齊。
PS:給子標籤自己設定text-align,只會作用於標籤中的內容的對齊方式。
2. 塊級標籤
1> 先上案例,在body
中新增了一對div標籤
main,裡面又巢狀了一對div標籤
test,我們知道塊級標籤獨佔一行,可以修改寬高尺寸,所以為了演示,我們修改main的寬度為300px,高度為200px。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML標籤的居中</title>
<style>
#main{
background-color: red;
width: 300px;
height: 200px;
}
.test{
background-color: yellow;
}
</style>
</head>
<body>
<div id="main">
<div class="test">我是塊級標籤</div>
</div>
</body>
</html>
顯示效果如下:
2> 我們在父標籤main中新增text-align
屬性為center
,顯示效果如下:
看起來貌似跟行內標籤一樣,只需要在父標籤中新增text-align
屬性為center
即可,但是塊級標籤可以設定寬高尺寸,所以我們來改變一下子標籤test
的尺寸,設定寬度為200px,再來看看樣式和效果:
.test{
background-color: yellow;
width: 200px;
}
我們可以發現,子標籤test
的內容是水平居中了,因為繼承了父標籤的text-align
屬性,但是標籤自身沒有水平居中。那怎麼才能居中呢,我們想可不可以從標籤的外邊距margin
入手呢,比如先設定子標籤test
的左外邊距為auto
,樣式和效果如下:
.test{
background-color: yellow;
width: 200px;
margin-left: auto;
}
我們可以看到子標籤test
向右靠齊了,那我們想可不可以再新增一個右外邊距為auto
呢,樣式和效果如下:
.test{
background-color: yellow;
width: 200px;
margin-left: auto;
margin-right: auto;
}
我們可以看到子標籤test
終於水平居中了,達到了我們想要的效果?。下面總結一下塊級標籤設定水平居中的方式,分兩步:
- 在父標籤的樣式中設定:
text-align: center
- 同時在自身的樣式中設定:
margin:0 auto
PS:margin-left
和 margin-right
可以用margin
這一個多值屬性來代替,兩個值時,第一個代表上下兩個外邊距的值,第二個代表左右兩個外邊距的值。
四、垂直居中
1. 行內標籤、行內-塊級標籤
在父標籤的樣式中新增:
line-height: height
1> line-height:內容的高度,這裡的內容比如有文字或圖片。
2> height:標籤內容的真實高度,標準的盒子模型中真實的內容尺寸等同於padding
包含的內容的尺寸(包括padding
的值),IE的盒子模型中真實的內容尺寸等同於border
包含的內容的尺寸(包括border
的值),具體可以參考CSS盒子模型。如下樣式程式碼:
#main{
background-color: red;
width: 300px;
height: 200px;
text-align: center;
line-height: 200px;
}
2. 塊級標籤
1> 先上案例,在body
中新增了一對div標籤
main,裡面又巢狀了一對div標籤
test,我們知道塊級標籤獨佔一行,可以修改寬高尺寸,所以為了演示,我們修改main的寬度為300px,高度為200px。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML標籤的居中</title>
<style>
#main{
background-color: red;
width: 300px;
height: 200px;
text-align: center;
line-height: 200px;
}
.test{
background-color: yellow;
width: 200px;
margin: 0 auto;
}
</style>
</head>
<body>
<div id="main">
<div class="test">我是塊級標籤</div>
</div>
</body>
</html>
顯示效果如下:
看起來貌似又沒問題,現在我改變一下塊級標籤的高度,把height
改為100px,效果如下:
可以看到文字內容還是在中間,但是子標籤test
的高度已經改變了,為什麼文字內容還在中間呢,這是因為父標籤main
設定了line-height
等於height
的原因,子標籤test
繼承了父標籤line-height
的值,所以我們可以在子標籤裡面設定自身的line-height
的值,樣式程式碼和效果如下:
.test{
background-color: yellow;
width: 200px;
height: 100px;
line-height: 100px;
margin: 0 auto;
}
好了,接下來需要做的是讓子標籤test
在父標籤垂直居中顯示。有兩種方式,第一種,用彈性佈局的思想,只需在子標籤test
中新增下列屬性:
display: flex;
flex-direction: column;
justify-content: center;
第二種,用定位的技巧來實現:
<style>
#main{
background-color: red;
width: 300px;
height: 200px;
text-align: center;
line-height: 200px;
position: relative;
}
.test{
background-color: yellow;
width: 200px;
height: 100px;
line-height: 100px;
margin: 0 auto;
position: absolute;
top:50%;
left:50%;
transform: translate( -50%, -50%);
}
</style>
最終效果:
五、總結
最後以一張圖來總結:
最後,如果有什麼問題歡迎向我指出,謝謝。
相關文章
- CSS垂直居中和水平居中CSS
- CSS水平居中和垂直居中CSS
- CSS水平居中和垂直居中的方法CSS
- 水平居中和垂直居中
- CSS 佈局之水平居中佈局CSS
- css水平垂直居中CSS
- css經典佈局系列一——垂直居中佈局CSS
- CSS之居中佈局CSS
- 水平垂直居中佈局的多種實現方式
- CSS視窗垂直水平居中CSS
- 影片直播app原始碼,CSS div水平垂直居中和div置於底部APP原始碼CSS
- [css佈局1]不知寬高情況下,水平垂直居中的幾種方式CSS
- css 水平垂直居中實現方式CSS
- 淺談居中問題(水平居中、垂直居中、水平垂直居中)
- CSS佈局 --- 居中佈局CSS
- 【20190129】CSS-垂直水平居中相關CSS
- CSS div水平垂直居中效果詳解CSS
- flex彈性佈局 垂直居中Flex
- 水平居中、垂直居中、水平垂直居中、浮動居中、絕對定位居中…….幫你搞定
- 元素垂直水平居中
- div 水平垂直 居中
- css居中與佈局CSS
- 佈局總結-水平居中佈局的實現
- CSS元素(文字、圖片)水平垂直居中方法CSS
- css實現垂直水平居中的幾種方法CSS
- css實現水平垂直居中的幾種方式CSS
- CSS實現水平垂直居中的方式有哪些?CSS
- 元素水平居中,垂直居中方法
- Flutter佈局篇(1)–水平和垂直佈局詳解Flutter
- Flutter佈局篇(1)--水平和垂直佈局詳解Flutter
- GO QT5 水平垂直佈局GoQT
- CSS如何佈局與居中CSS
- CSS佈局-各種居中CSS
- 一起搞懂 CSS 水平居中與垂直居中的16個方法CSS
- CSS 垂直居中CSS
- 三行CSS程式碼實現水平垂直居中CSS
- 【CSS三種居中方案全解】CSS水平垂直居中常用方法集結CSS
- div垂直居中-CSS元素垂直居中方法CSS
- 如何實現水平垂直居中?