使用 calc()
與 Media Query,我們可根據 iPhone、iPad、iPad Pro、MacBook Air 與 iMac 分別設定不同 Column Width。
Version
CSS 3
RWD
iPhone 為一欄。
iPad 為兩欄。
iPad Pro 為三欄。
MacBook Air 為四欄。
iMac 為六欄。
<template>
<div class="box">
<div class="col">
<div>1</div>
</div>
<div class="col">
<div>2</div>
</div>
<div class="col">
<div>3</div>
</div>
<div class="col">
<div>4</div>
</div>
<div class="col">
<div>5</div>
</div>
</div>
</template>
<style scoped>
* {
--sm-column: 1;
--md-column: 2;
--lg-column: 3;
--xl-column: 4;
--2xl-column: 5;
}
.box {
display: flex;
flex-wrap: wrap;
width: 95%;
margin: auto;
}
.col {
width: calc(100% / var(--sm-column));
padding: 10px;
box-sizing: border-box;
}
@media screen and (min-width: 768px) {
.col {
width: calc(100% / var(--md-column));
}
}
@media screen and (min-width: 1024px) {
.col {
width: calc(100% / var(--lg-column));
}
}
@media screen and (min-width: 1280px) {
.col {
width: calc(100% / var(--xl-column));
}
}
@media screen and (min-width: 1536px) {
.col {
width: calc(100% / var(--2xl-column));
}
}
</style>
25 行
* {
--sm-column: 1;
--md-column: 2;
--lg-column: 3;
--xl-column: 4;
--2xl-column: 6;
}
設定各種 device 下的欄數:
--sm-column: 1
:iPhone 為一欄--md-column: 2
:iPad 為兩欄--lg-column: 3
:iPad Pro 為三欄--xl-column: 4
:MacBook Air 為四欄--2xl-column: 6
:iMac 為六欄
33 行
.box {
display: flex;
flex-wrap: wrap;
width: 95%;
margin: auto;
}
設定 box style:
display: flex
:使用 Flexboxflex-wrap: wrap
:設定當各 item 總 width 超越 parent width 時會自動換行,可避免總 width 計算錯誤而不知width: 95%
:以%
設定 box width 支援 RWDmargin: auto
:自動調整 margin 水平置中
37 行
.col {
width: calc(100% / var(--sm-column));
padding: 10px;
box-sizing: border-box;
}
設定 iPhone 下各 column style:
width: calc(100% / var(--sm-column))
:iPhone 為一欄,使用calc()
由100%
除以1
padding: 10px
:以 column 的 padding 作為各 item 的 margin 方便計算box-sizing: border-box
:因為改以 column padding 作為各 item margin,因此box-sizing
從預設content-box
改成border-box
方便calc()
計算
CSS 由小寫到大,預設即為 iPhone style
43 行
@media screen and (min-width: 768px) {
.col {
width: calc(100% / var(--md-column));
}
}
設定 iPad 各 column style:
width: calc(100% / var(--md-column))
: iPad 為兩欄,使用calc()
由100%
除以2
49 行
@media screen and (min-width: 1024px) {
.col {
width: calc(100% / var(--lg-column));
}
}
設定 iPad Pro 各 column style:
width: calc(100% / var(--lg-column))
:iPad Pro 為三欄,使用calc()
由100%
除以3
55 行
@media screen and (min-width: 1280px) {
.col {
width: calc(100% / var(--xl-column));
}
}
設定 MacBook Air 各 column style:
width: calc(100% / var(--xl-column))
:MacBook Air 為四欄,使用calc()
由100%
除以4
61 行
@media screen and (min-width: 1536px) {
.col {
width: calc(100% / var(--2xl-column));
}
}
設定 iMac 各 column style:
width: calc(100% / var(--2xl-column))
:iMac 為六欄,使用calc()
由100%
除以6
Conclusion
- Media query 的 breakpoint 參考 Tailwind CSS 的設定,共分 sm、md、lg、xl 與 2xl,主要是考慮 iPad Pro 與 iMac 這兩個較尷尬解析度