若要建立可 RWD 的 Layout,也可藉由 calc()
與 box-border
先建立 Column,最後再將 Item 放進 Column 內。
Version
Tailwind CSS 2.0.3
box-border
先建立 4 個 column,再將 item 分別放進 column 內。
<template>
<div class="flex flex-wrap w-11/12 m-auto">
<div class="box-border w-col-4 py-0 px-3">
<div>1</div>
</div>
<div class="box-border w-col-4 py-0 px-3">
<div>2</div>
</div>
<div class="box-border w-col-4 py-0 px-3">
<div>3</div>
</div>
<div class="box-border w-col-4 py-0 px-3">
<div>4</div>
</div>
</div>
</template>
<style scoped>
* {
--column: 4;
}
.w-col-4 {
width: calc(100% / var(--column));
}
</style>
第 2 行
<div class="flex flex-wrap w-11/12 m-auto">
flex
:使用 Flexboxflex-wrap
:設定當各 item 總 width 超越 parent width 時會自動換行,可避免總 width 計算錯誤而不知w-11/12
:以%
設定 box width,使box
能根據 RWD 自動改變m-auto
:自動調整 margin 水平置中
第 3 行
<div class="box-border w-col-4 py-0 px-3">
box-border
:由於calc()
計算時沒有考慮 padding,因此總 width 會超越 parent width 而換行,因此將改用box-border
,如此width
將包含 padding,content width 會自動內縮,因此總 width 不變而不會換行w-col-4
:設定 column width,稍後會建立w-col-4
utilitypy-0
:設定 vertical paddingpx-3
:設定 horizontal padding
19 行
* {
--column: 4;
}
建立 --column
CSS variable,若將來改變 column,只要統一改變 --column
即可。
23 行
.w-col-4 {
width: calc(100% / var(--column));
}
建立 w-col-4
utility,由 calc()
根據 --column
動態計算 column width。
@apply
改用 @apply
將重複 utility 抽出。
<template>
<div class="flex flex-wrap w-11/12 m-auto">
<div class="col-4">
<div>1</div>
</div>
<div class="col-4">
<div>2</div>
</div>
<div class="col-4">
<div>3</div>
</div>
<div class="col-4">
<div>4</div>
</div>
</div>
</template>
<style scoped>
* {
--column: 4;
}
.w-col {
width: calc(100% / var(--column));
}
.col-4 {
@apply box-border w-col py-0 px-3;
}
</style>
第 3 行
<div class="col-4">
由於每個 column 的 utility 都相同,因此抽出 col
class。
27 行
.col-4 {
@apply box-border w-col py-0 px-3;
}
使用 @apply
將所有 utility 整合成單一 class。
Conclusion
- CSS function 也能搭配 Tailwind 使用,只是 Tailwind 精髓在於 utility,因此可藉由
calc()
建立w-col-4
utility 之後,再於 HTML 組合 - 若 HTML 發現有重複的 utility,可再使用
@apply
將重複 utility 組合成新 utility,以利將來維護