margin: auto
為最簡單的水平置中,但卻只能用於有指定寬度的 Block,為什麼不能使用在 Inline 與 Inline-block 呢 ?
Version
CSS 3
block
<div>
佔據一整行,且 CSS
靠左對齊。
<template>
<div class="item">CSS</div>
</template>
<style>
.item {
margin: auto;
}
</style>
當 <div>
未指定寬度時,block 會佔據一整列,且內容靠左對齊。
也由於佔據一整列沒有 margin,因此 margin: auto
沒有任何意義。
當 <div>
有指定寬度時,margin: auto
就起了作用,自動分配左右 margin 而使 block 水平置中。
<template>
<div class="item">CSS</div>
</template>
<style>
.item {
width: 40px;
margin: auto;
}
</style>
第 6 行
.item {
width: 40px;
margin: auto;
}
width: 40px
:使用width
特別指定 block 寬度margin: auto
:由於<div>
有了明確寬度,因此不再佔據一整列,因此有了 margin,由於設定成auto
,browser 會自動將剩餘寬度分配給左右 margin,因此<div>
能水平置中
若要使
CSS
也能水平置中,讓視覺上更協調,可以加上text-align: center
inline
若改成 inline,儘管設定了 width
,margin: auto
也沒有效果。
<template>
<div class="item">CSS</div>
</template>
<style>
.item {
display: inline;
width: 40px;
margin: auto;
}
</style>
第 6 行
.item {
display: inline;
width: 40px;
margin: auto;
}
display: inline
: 將<div>
轉成 inlinewidth: 40px
:使用width
設定寬度,但 inline 不能設定 width,而是由 content 自動決定寬度,因此為無效設定margin: auto
:inline 無法設定width
,因此 browser 無法根據 width 計算出margin-left
與margin-right
,其margin-left
與margin-right
永遠為0
,連margin: auto
也無法改變,所以無法水平置中
inline-block
若改成 inline-block,儘管設定了 width
,margin: auto
也沒有效果。
但可發現
width
對於 inline-block 有影響,與 inline 不同
<template>
<div class="item">CSS</div>
</template>
<style>
.item {
display: inline-block;
width: 40px;
margin: auto;
}
</style>
第 6 行
.item {
display: inline-block;
width: 40px;
margin: auto;
}
display: inline-block
: 將<div>
轉成 inline-blockwidth: 40px
:使用width
設定寬度, inline-block 可以設定 width,但 inline 不行margin: auto
:inline-block 雖然能設定width
,但繼承了 inline 特性,儘管設定了margin: auto
也無法改變margin-left
與margin-right
為0
特性,所以無法水平置中
Conclusion
- Block 若不設定
width
,也無法使用margin: auto
,因為會直接撐滿一整行,沒有 margin 可言,故無法水平置中 - Block 若有設定
width
,則margin: auto
可藉由width
計算出 margin 空間,故可水平置中 - Inline 無法設定
width
,故margin-left
與margin-right
永遠為0
,連margin: auto
也無法改變,故無法水平置中 - Inline-block 繼承了 inline 特性,雖然可以設定
width
,但margin-left
與margin-right
永遠為0
,連margin: auto
也無法改變,故無法水平置中