先來一手台啤 18 天謝謝。
這些天我們聊到了關於 Media Query, Flex, Grid 以及稍微提一下 clamp()
。現在你覺得什麼樣的場景實際上會需要 @media
呢?大前提就在於,當你需要 變更設計 的時候,你就得明確的使用 @media
來規範你所想要的尺寸,用以達到不同尺寸下,畫面設計上的差異。
當然,@media
不僅是只能做 尺寸 上面的事情,由於這個講起來很佔篇幅,雖然目前還不確定是否可以完賽,但,拿這些來搪塞感覺就不是很好。總之,我大概列出我大概會操作的方向給大家參考。
@media
限制特定尺寸 以下 的容器行為。@media
限制特定尺寸 以上 的單一元件行為。avif
, webp
新格式,並確認 @3x
, @2x
以及 @1x
的存在。然後我還蠻習慣手刻,所以 Bootstrap 的部分我可能會沒有。但通常為了省事(或是業主的錢不多),基本上還是用一些第三方的工具比較順手,像是 Tailwind 也是不錯的選擇。
或許有人會好奇,何謂變更設計?當然,設計師無法考慮到那麼多裝置尺寸,所以基本上都是抓比較泛用的尺寸來進行設計。那麼,當某些畫面上的元素,基於不同的尺寸下,例如設計師的最大參考尺寸是 1920px
來說,中間或許會經過一個 1440px
,而,如果我的尺寸來到 1600px
時,我是該呈現出 1440px
的架構呢?還是可以調整畫面以符合 1600px
的呈現?
通常基於業主的預算,大多都是下縮到
1440px
。
如果設計師的圖面是四個 column
排成 6 x 4
的話,而 1440px
是 4 x 6
個排列方式。那麼在 1600px
的時候,到底要維持 6 x 4
還是 4 x 6
呢?在這個情況下,無論哪一種排版方式,圖面上的區塊皆不會依照設計圖面的尺寸來走,像是這種時候,你只能回頭看一下你們家的設計師。
確認過眼神,基於業主的預算,就是容器下縮到
1440px
。
當然,也是會有人來靠么說 1600px
怎麼那麼醜,到底會不會切版。
基於職業道德(
沒有預算),我們就說 OK 好就可以了。我就不會!
上面所提及的 1920px
, 1440px
及 1600px
三種尺寸,最後者 1600px
就是屬於模糊地帶。一來設計師沒有特別針對這樣的尺寸製作,二來業主也不想多付錢。那麼,在容器規則上,講簡單點就是下修到 1440px
,但實際上到底會發生什麼事情?
1920px
來設計。6 x 4
的時候,簡單的把 1920 / 6 = 320px
當成是一個 column
尺寸。1440px
時,此時的 column
尺寸變成了 1440 / 4 = 360px
。1440px
套用到 1600px
尺寸上時,單純的 1600 / 4 = 400px
,就不符合 1440px
的設計。這種向下採用的方式,通常在 Mobile First 的設計流程中不會發生,但我舉這個例子比較好理解。
而且絕大多數人,都從桌機版開始 往下 製作。
此時你的容器應該是,
@media (min-width: 1600px) {
.grid {
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(6, 1fr);
}
}
但是這樣的 1fr
會變成 400px
,其實沒關係,我們這邊的目的是要確保 4 x 6
這件事情的發生。接下來,由於 1440px
的規則當中,每個區塊的尺寸是 360px
,所以,你在這個尺寸下,就必須要再次包裝你的區塊,確保他符合 360px
這個尺寸。
@media (min-width: 1600px) {
.grid {
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(6, 1fr);
}
.item {
width: 360px;
height: 360px;
margin: auto;
}
}
然後另外一個問題來了,你會發現留白的 間距 變大了,好的,這時候只能針對大容器再次給一個尺寸。
@media (min-width: 1600px) {
.grid {
width: 1440px;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(6, 1fr);
margin: auto;
}
.item {
width: 360px;
height: 360px;
margin: auto;
}
}
然後大容器可能跟其他人也歪掉了,逼不得已只好在 <body>
第一層包一個超大的 <div class="super">
,
@media (min-width: 1600px) {
.super {
/* 請不要這樣做 */
width: 1440px;
margin: auto;
}
}
多想兩分鐘,你可以不要一直包一直包。
以上一直包的事情,如果是 Mobile First 基本上不會發生,僅會發生一次設定尺寸為 1440px
而已。至於為什麼?後面幾天我再來聊一下由行動裝置開始的這件事情。
連續吃兩天和牛有點膩。
通常這種時候,比較偏向 AWD 的人就會覺得,幹嘛搞得那麼複雜,就行動裝置一套,電腦一套就好了。說實在的也沒有不可以,但,當我收到用 1152px
設計的手機版之後,我就再也不相信這種鬼話了。
當然,如果業主可以接受
1152px
以下都顯示為手機版,我也沒啥意見。
Blog 同步刊登:[12th 鐵人賽] 模糊地帶, Day 18