[譯] 你不需要基於 CSS Grid 的柵格佈局系統

LeviDing發表於2019-02-28

在過去的幾個星期裡,我開始看到基於 CSS Grid 的佈局框架和柵格系統的出現。我們驚訝它為什麼出現的這麼晚。但除了使用 CSS Grid 柵格化佈局,我至今還沒有看到任何框架能提供其他有價值的東西。他們沉醉於模仿過去的做法,而不是著眼於未來。這使得發展受到限制。其中一個常見的問題就是,這些框架仍需要在標記語言中使用行包裝器。

為什麼 Grid 有些不同?

Grid 是一個柵格系統。它允許你在 CSS 中定義列和行,而不需要在標記語言中定義它們。你不需要其他工具幫助你實現一個看起來像柵格的效果,實際上它就是柵格!

傳統的設定佈局的方法需要使用行包裝器進行標記的原因是,我們是通過為物件分配寬度的方式來偽造網格的。然後我們通過調整物件佈局,從而在網格間製造出間隙。在一個基於 float 的網格佈局中,你需要將每行元素包裝起來並清除浮動,以使下一行中的內容不浮動。在一個基於 Flex 的網格中,需要你對每行定義新的 Flex 容器,或者你需要恰當靈活地使用包裝器,flex-basismargin 來獲得相同的效果。

Grid 不需要這些行包裝器,因為你已經定義了相應的行軌跡和用於對齊的線條。且不會有網格內的內容溢位到其他行的危險。 如果你定義了行包裝器,那麼每一行都將成為一個新的一維網格佈局。如果你將自己限制在一個維度上,那使用 Grid 並沒有比 Flexbox 更好。

基於 Grid 的佈局框架有什麼值得借鑑的地方?

框架這個詞在這不是太恰當,但是我認為在一個團隊中,一套 Sass helper 在規範化使用 Grid 方面是很有幫助的。如果你已經探究了相關的規範,你會發現要實現相同效果,會有很多種不同的方法。你可以命名區域,使用行號或行名。你可能傾向於明確給出所有元素的位置,或是儘可能依賴於自動佈局。如果團隊中的每個人都使用不同的方法,最終將使得編寫出來的程式碼難以閱讀和維護。

對於程式碼向後相容也是如此。如果你已經決定如何處理不支援 Grid 佈局的瀏覽器,某些工具可以幫助你確保你所做的決定能夠在不同的地方以相同的效果展現出來。此外,這種方法在專案開發層面上比直接匯入其他公司的方法更有用。

在你開始使用新的“Grid Layout 框架”前,請確保你首先了解 Grid 網格佈局的工作原理。知道你為什麼要建立一個抽象,它提供什麼以及使用它的副作用是什麼。

擁抱新的可能

我剛剛從 Patterns Day 回來,並且 我的一張幻燈片在 Twitter 上被提及了好幾次

“Flexbox 與 Grid 有很大區別。如果你先使用了舊的方法來進行開發,那你將失去使用 Flexbox 和 Grid 進行創新的可能”。

上面這張 PPT 的背景是處理老版本的瀏覽器,也就是處理瀏覽器相容問題。我鼓勵人們首先考慮新的瀏覽器。要開始使用良好的標記, 首先要為那些支援 Grid 和 Flexbox 等的瀏覽器進行設計。如果你從舊版本的瀏覽器開始,會讓他們的效能成為限制你能力的因素。

建立規範的標記,整理那些過時了的沒有必要的元素。使用 Grid 和其他新方法來設計你的網站。然後, 你可以通過提供一些更簡單的東西, 來解決不支援新功能的瀏覽器的相容問題。也許你的 Grid 佈局設計使用了跨行等設計方案,這種效果很難在不支援額外標記方法的舊版本瀏覽器中實現精準的佈局。你可以使用 flexbox 做向後相容,建立一個沒有跨行的佈局方案。雖然這樣不那麼整潔,但也完全可以使用,而且不需要為數量在逐漸減少的那部分使用者來增加額外標記。

你可以 點選這來看相關示例。這是我釋出在 Grid by Example 上的數個帶有向後相容方案的模式之一。

如果把自己限制在過去,例如在舊的瀏覽器中只能使用 Grid 的部分功能,或使用那些自身受限的框架,那你就會失去使用 Grid 時產生創意的可能。既然這樣又何必使用 Grid?你也可以只使用舊的程式碼方案,但這的確很可惜。

如果你在尋找柵格框架時找到本文,那你找對地方啦!學習並使用 CSS Grid 佈局,可能你沒有必要再找除此之外的材料了。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOSReact前端後端產品設計 等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃

相關文章