[BS4] Bootstrap 4 自訂容器和欄間距寬度(Custom Container and Gutters Width)
tags: bootstrap4, container, layout, gutter
這篇文章主要是說明 Bootstrap 4 中 .container 的作用,以及 .col 間的間距(gutters)是如何產生的。最後則說明如何自訂自己想要寬度的 container 容器和欄間距。因此不會介紹太多關於 Bootstrap layout 的內容,關於 Bootstrap Layout 的介紹可以參考中文官方文件。
註 1:閱讀前希望你先知道 Flex 和 Bootstrap Container 的基本用法。
註 2:以下說明均是以 max-width: 1140px 的情況說明(.col-xl)。
註 3:可搭配 程式範例 @ CodePen
註 4:如果是要套用到全域的話,請參考文末。
基本的 Bootstrap Container 結構
簡單來說,Bootstrap Container 基本的結構長這樣:
<!-- HTML -->
<div class="container">
<div class="row">
<div class="col">
<div class="h4">Lorem ipsum is placeholder text commonly used.</div>
</div>
</div>
</div>
畫面則會長這樣子:

接下來讓我們看一下這些樣式主要的作用是什麼。
.container
從 Bootstrap 4 原始當中可以看到,.container 的樣式大概是這樣子:
.container {
margin-right: auto;
margin-left: auto;
padding-right: 15px;
padding-left: 15px;
width: 100%;
max-width: 1140px; // 隨螢幕尺寸而變,當螢幕尺寸 ≥ 1200px 時是 1140px。
}
其中 .container 的 margin-right 和 margin-left 是 auto,這是讓它可以水平置中的緣故。
接著當螢幕尺寸為 xl(≥1200px )時, 因為 max-width 是 1140px,而且有 padding-right 和 padding-left 各 15px ,所以 :
- 容器寬為 1140px(如果是使用
.container-fluid則沒有設定max-width) - 內容寬為 1110px
- 左右多於的空間自動分配給 margin
我們用 Chrome Dev Tool 看一下大概會長這樣子,有幾點可以注意的是:
- 左右 margin 100 會隨著螢幕的寬度自動伸縮
- 容器寬雖然是 1140px,但是由於有 padding 15px 的緣故,所以實際上內容的寬度是 1110px。

容器寬雖然是 1140px,但是由於有 padding 15px 的緣故,所以實際上內容的寬度是 1110px。
.row
透過 .row 會讓裡面的內容以 flex 方式排版,原本在 .container 的作用下,內容寬會是 1110px ,但是因為有 margin-right 和 margin-left 為 -15px 的緣故,所以:
- 容器寬為 1140px
- 內容寬為 1140px
.row {
display: flex;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;
}

原本在
.container的作用下內容寬會是 1110px ,但是因為有margin-right和margin-left-15px的緣故,所以容器和內容寬度均變回 1140px。
.col
.col 是 .row 的 flex-item。在剛剛 .row 的作用下,.col 的容器寬再次變成了 1140px ,但由於 .row 裡面有 padding-right 和 padding-left 15px,所以:
- 容器寬為 1140px
- 內容寬為 1110px
.col {
position: relative;
flex-basis: 0;
flex-grow: 1;
max-width: 100%;
width: 100%;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
}
