CSS中實現塊級元素水平居中的N種方法

2021-10-08 15:05:06 字數 2575 閱讀 4363

css中的居中可分為水平居中和垂直居中。

水平居中分為行內元素居中和塊狀元素居中兩種情況,而塊狀元素又分為定寬塊狀元素居中和不定寬塊狀元素居中。

下面詳細介紹這幾種情況。

一、水平居中

1、行內元素居中

顧名思義,行內元素居中是只針對行內元素的,比如文字(text)、(img)、按鈕等行內元素,

可通過給父元素設定 text-align:center 來實現。

另外,如果塊狀元素屬性display 被設定為inline時,也是可以使用這種方法。

但有個首要條件是子元素必須沒有被float影響,否則一切都是無用功。

hello world

2、塊狀元素居中

(1)、定寬塊狀元素居中

滿足定寬(塊狀元素的寬度width為固定值)和塊狀兩個條件的元素可以通過設定「左右margin」值為「auto」來實現居中。

hello world

(2)、不定寬塊狀元素居中

在實際工作中我們會遇到需要為「不定寬度的塊狀元素」設定居中,比如網頁上的分頁導航,因為分頁的數量是不確定的,所以我們不能通過設定寬度來限制它的彈性。(不定寬塊狀元素:塊狀元素的寬度width不固定。)

有三種方法可以對不定寬塊狀元素進行居中:

方法1:

將要顯示的元素加入到 table 標籤當中,然後為 table 標籤設定「左右margin」值為「auto」來實現居中; 或使用 display : table;然後設該元素「左右margin」值為「auto」來實現居中。後面的display:table; 方法會更簡潔。

為什麼加入table標籤? 是利用table標籤的長度自適應性—即不定義其長度也不預設父元素body的長度(table其長度根據其內文字長度決定),因此可以看做乙個定寬度塊元素,然後再利用定寬度塊狀居中的margin的方法,使其水平居中。

或者:

方法2:

改變塊級元素的 display 為 inline 型別(設定為 行內元素 顯示),然後使用 text-align:center 來實現居中效果。

這種方法相比第一種方法的優勢是不用增加無語義標籤,但也存在著一些問題:它將塊狀元素的 display 型別改為 inline,變成了行內元素,所以少了一些功能,比如設定長度值(變成inline-block就可以設定寬高)。

方法3:

通過給父元素設定 float,然後給父元素設定 position:relative 和 left:50%,子元素設定 position:relative 和 left: -50% 來實現水平居中。

hello world

先設定父元素wrap清除浮動,然後左浮動。定位讓wrap向右偏移50%。然後定義子元素相對于父元素向左偏移50%。脫離父元素。加個邊框就可以明白一些了。另外用絕對定位也是可以的。

二、垂直居中

垂直居中可分為父元素高度確定的單行文字,以及父元素高度確定的多行文字。

1、父元素高度確定的單行文字的豎直居中的方法是通過設定父元素的 height 和 line-height 高度一致來實現的。(height: 該元素的高度,line-height: 顧名思義,行高,指在文字中,行與行之間的 基線間的距離 )。

2、父元素高度確定的多行文字

有兩種方法:

方法1:

使用插入 table (包括tbody、tr、td)標籤,同時設定 vertical-align:middle。

hello world

hello world

hello world

或者:

方法2:

設定塊級元素的 display 為 table-cell(設定為**單元顯示),啟用 vertical-align 屬性。但這種方法相容性比較差, ie6、7 並不支援這個樣式。

參考:

Css之關於塊級元素水平居中

第一種方法 塊級元素如div可以使用margin left auto和margin right auto來實現,但前提是這個塊級元素必須是設定了固定寬度的。對於不能確定寬度的塊級元素就不能這們做了,但是我們可以用table這個標籤來實現。它的寬度由內部的元素決定 撐開 即使不給它設定固定寬度,對它設...

Css之關於塊級元素水平居中

第一種方法 塊級元素如div可以使用margin left auto和margin right auto來實現,但前提是這個塊級元素必須是設定了固定寬度的。對於不能確定寬度的塊級元素就不能這們做了,但是我們可以用table這個標籤來實現。它的寬度由內部的元素決定 撐開 即使不給它設定固定寬度,對它設...

水平居中塊級元素較好的實現

如上圖所示,要做圖中黃色區域的到期提醒,要求提醒的內容 提醒的內容是指黃色背景上的圖示和文字 居中顯示。我將圖中的驚嘆號標識做為提醒內容的背景處理,而這就要求內容區有乙個高度,所以內容區必須是block level的。但block level的元素的寬度預設等於父元素的寬度,這樣的話內容將從黃色左邊...