寫CSS有些年頭了,經(jīng)歷了不同的時(shí)期用不同的姿勢來編寫CSS,其目的就是給Web元素添加樣式。愛掏網(wǎng) - it200.com但編寫樣式著實(shí)令人感到煩惱,甚至是效率低下,成本極高。愛掏網(wǎng) - it200.com也正因如此,社區(qū)中有很多CSS方法論和框架來幫助開發(fā)快速有效編寫CSS。愛掏網(wǎng) - it200.com雖然這些方法論和框架有助于我們快速編寫CSS,構(gòu)建UI組件,但也有令人感到頭痛之處,比如冗余的代碼,代碼的覆蓋等。愛掏網(wǎng) - it200.com隨著功能第一(Utility-First)CSS的出現(xiàn),讓我看到了編寫CSS的另一種有效的方式,該方式也被認(rèn)為是現(xiàn)代Web中構(gòu)建Web界面最好的選擇。愛掏網(wǎng) - it200.com其中Utility-First CSS的典型作品之一就是Tailwind CSS。愛掏網(wǎng) - it200.com接下來,我們就來了探討Tailwind CSS,我們將了解基于組件的樣式有哪些問題,以及為什么要基于Utility-First CSS來構(gòu)建組件。愛掏網(wǎng) - it200.com
時(shí)至今日,編寫CSS有很多方式,也可以基于一些CSS框架來編寫。愛掏網(wǎng) - it200.com比如2024年CSS狀態(tài)報(bào)告中也有相關(guān)的統(tǒng)計(jì):
或許你在項(xiàng)目中已經(jīng)用了一些CSS方法論,比如BEM、Atomic CSS、OOCSS、SMACSS和ITCSS等,也體驗(yàn)過了在項(xiàng)目中引用社區(qū)中優(yōu)秀的CSS框架,比如大家熟悉的Bootstrap、Foundation等。愛掏網(wǎng) - it200.com
隨著一些優(yōu)秀的JavaScript框架(比如,React和Vue)等出現(xiàn),我們構(gòu)建Web的方式也變了,也致使我們編寫CSS的方式也不同了,社區(qū)中有很多關(guān)于CSS-in-JS的討論,同樣也有不同的方式方法:
如果你面對眾多的編寫CSS的姿勢和管理維護(hù)方式感到困惑的話,建議你可以按照下圖的流程來做選擇:
有關(guān)于這方面的討論,這里就不做過多的闡述了,如果你感興趣的話,可以閱讀:
- 寫CSS的姿勢
- React中編寫CSS的姿勢
雖然這些CSS方法都在試圖著幫助我們解決CSS編寫和管理的問題,但是如果我們能夠編寫實(shí)用程序類(Utility Class),然后在我們的代碼庫中重復(fù)使用它們,就會更容易一些。愛掏網(wǎng) - it200.com這些實(shí)用工具類是詳盡的,可以作為padding
、margin
、font-size
等方面的獨(dú)立指南。愛掏網(wǎng) - it200.com
另外實(shí)用程序類(Utility Class)將解決重復(fù)樣式的問題,因?yàn)槲覀儾辉傩枰帉懭魏巫远x樣式。愛掏網(wǎng) - it200.com此外,如果我們的UI風(fēng)格遵循特定的標(biāo)準(zhǔn),我們也可以在開發(fā)中遵循相同的標(biāo)準(zhǔn)。愛掏網(wǎng) - it200.com其中Tailwind CSS就是社區(qū)中目前具備這些特點(diǎn)的CSS框架之一。愛掏網(wǎng) - it200.com是不是對Tailwind CSS感到好奇,如果是的話,請繼續(xù)往下閱讀。愛掏網(wǎng) - it200.com
Tailwind CSS官網(wǎng)是這么描述的:
換句話說,Tailwind CSS是一個(gè)基于實(shí)用程序的底層CSS框架,旨在簡化Web應(yīng)用程序的構(gòu)建,提高事度,減少編寫定制CSS的關(guān)注,而不需要離開HTML代碼的舒適區(qū),同時(shí)實(shí)現(xiàn)出色的界面。愛掏網(wǎng) - it200.com
比如官網(wǎng)首頁提供的示例,只需要使用幾個(gè)類就可以設(shè)計(jì)出不同的卡片效果(不需要總是聲明一個(gè)大的類來獨(dú)立于你的HTML和寫一堆屬性來制作一些東西):
Erin Lindford
Customer Support
erinlindford@example.com
(555) 765-4321
而且只需要改變HTML中的類名,就可以達(dá)到不同的效果:
其他CSS框架(比如我們熟悉的Bootstrap、Foundation、Bulma等)提供了各種預(yù)定義組件(比如Modal
、Button
、Alert
和Card
等)。愛掏網(wǎng) - it200.com但是有了Tailwind CSS,可以自己做,或者你被迫根據(jù)你的項(xiàng)目模型自己做。愛掏網(wǎng) - it200.com換句話說,你實(shí)際上擁有了組件,你可以在你選擇的任何組件上利用你的定制能力。愛掏網(wǎng) - it200.com這意味著不再需要與框架斗爭,也不需要試圖找出需要覆蓋哪些類才能獲得最初目標(biāo)的結(jié)果。愛掏網(wǎng) - it200.com
Tailwind CSS不像Bootstrap
當(dāng)你看到CSS框架一詞時(shí),我想你馬上會想到Twitter的 Bootstrap (或類似于Bootstrap的CSS框架)。愛掏網(wǎng) - it200.com但它們之間還是存在很大的差異的,其中最大的差異就是:Bootstrap是一組可設(shè)定樣式筆主題的組件,Tailwind 是一組可配置的實(shí)用CSS類;Bootstrap幫助你預(yù)構(gòu)建組件,Tailwind為你提供了快速構(gòu)建自己組件。愛掏網(wǎng) - it200.com
用一個(gè)按鈕的示例來展示他們之間的區(qū)別。愛掏網(wǎng) - it200.com
先來看HTML代碼:
可以看到,在Bootstrap中,HTML要簡潔的多,所以你可能會問,既然Bootstrap更簡單,為什么不使用它呢?為了回答這個(gè)問題,我們來設(shè)想有這么一個(gè)場景:“如果你想讓按鈕在特定的頁面(或組件)上稍微小一點(diǎn)”?你是否想要為這種獨(dú)特的情況創(chuàng)建一個(gè)新的類,比如Bootstrap中的.btn-sm
。愛掏網(wǎng) - it200.com在這種情況下,在Tailwind CSS中只需要使用不同的padding
類,比如py-1
。愛掏網(wǎng) - it200.com相比之下要比Bootstrap容易地多,而且你不需要去修改或增加任何CSS代碼,而只需要調(diào)整HTML中class
的值。愛掏網(wǎng) - it200.com
而且在Tailwind CSS中和Bootstrap(或類似于Bootstrap的其他CSS框架)最大的不同,在class
中可以設(shè)置一些狀態(tài)的類,比如hover:bg-blue-600
。愛掏網(wǎng) - it200.com這在Bootstrap中從未有過的特性和功能。愛掏網(wǎng) - it200.com
另外,在Tailwind CSS中也提供了創(chuàng)建類的可能性,比如在HTML文件中重復(fù)多次使用的組,以為該組件創(chuàng)建一個(gè)類,比如.btn-blue
。愛掏網(wǎng) - it200.com那么在Tailwind CSS中可以像下在這樣使用:
有關(guān)于這方面的具體使用,后續(xù)會花更多的時(shí)間來和大家一起探討。愛掏網(wǎng) - it200.com
接下來,我們再來看一下Bootstrap和Tailwind CSS兩個(gè)框架中CSS的差異性。愛掏網(wǎng) - it200.com同樣拿上面的按鈕Demo為例:
我想你在上面的截圖中已經(jīng)看出他們之間的差異了:Bootstrap中類的樣式是一個(gè)集合(會有一個(gè)或多個(gè)樣式);而Tailwind CSS中的每個(gè)類對應(yīng)的僅是一個(gè)樣式。愛掏網(wǎng) - it200.com
Tailwind CSS不像 Atomic Design
Tailwind CSS也不像 Atomic Design。愛掏網(wǎng) - it200.com了解Atomic Design的同學(xué)都知道,在Atomic Design系統(tǒng)中,可以將元素劃分為最小單元體,將其稱為元子,這些元子可以組合成最終的頁面。愛掏網(wǎng) - it200.com
但Tailwind CSS的類特別像Atomic Design中的 Atoms。愛掏網(wǎng) - it200.com前面的示例可以獲知,在元素上運(yùn)用很多個(gè)不同類就能達(dá)到想要的UI,甚至是頁面的效果。愛掏網(wǎng) - it200.com但在Tailwind CSS中這些類不被稱為是Atoms 類,而是被稱為實(shí)用性類(Utility Class)。愛掏網(wǎng) - it200.com
Tailwind CSS不像 OOCSS
Tailwind CSS也不像OOCSS(Objec