比較這兩種工具在設(shè)置 React 應(yīng)用樣式時的方法。風(fēng)格化根據(jù)您編寫的內(nèi)容生成實用程序優(yōu)先的CSS。它適用于任何框架和任何工具。帶樣式的組件是用于設(shè)置 React 組件樣式的庫。本文不是關(guān)于哪種工具更好,而是關(guān)于比較使用這些工具設(shè)置應(yīng)用樣式時的方法。
設(shè)置
對于下面的所有示例,我將使用 vite-react 設(shè)置。
樣式化需要安裝和一些配置。這是因為 CSS 是在應(yīng)用初始化之前在構(gòu)建期間生成的:
npm i -D @stylify/unplugin
和配置.js:
您可以嘗試編輯堆棧閃電戰(zhàn)上的風(fēng)格化+維特+反應(yīng)和風(fēng)格化+下一個示例。
樣式化組件只需要安裝庫,就可以立即使用。
npm i styled-components
語法和用法
如果要使用“帶樣式的組件”設(shè)置元素的樣式,可以使用 CSS API 或創(chuàng)建組件:
生成的 CSS 如下所示:
另一方面,樣式化獲取文件內(nèi)容并為每個匹配的選擇器生成CSS。默認(rèn)情況下,每個選擇器都是一個實用程序,并且僅生成一次。
默認(rèn)情況下,語法是本機 CSS 。此外,在編寫值時,您可以使用(兩個下劃線)而不是空格和(帽子)作為引號。它類似于Tailwind,但不必學(xué)習(xí)和記住自定義選擇器和快捷方式。如果您了解 CSS,那么您已經(jīng)知道樣式化選擇器。如果您需要更短或自定義的選擇器,可以添加自己的宏。property:value__^
無需定義組件即可立即寫入選擇器。
輸出:
但是,沒有人想要帶有實用程序的臃腫模板。有時組件是必需的。它們可以在配置中全局定義,也可以在文件中本地定義(通過內(nèi)容選項),并在文件中使用它們。在文件中,它需要一個沒有周圍括號的 javascript 對象。建議在注釋中使用該定義,因為幾乎任何文件格式都可以處理注釋。在樣式化中,組件是一個CSS類,它可以用于任何元素:
CSS 中的選擇器附加到它需要的每個選擇器。因此,選擇器/重復(fù)項較少,CSS較小。title
在生產(chǎn)方面,可以選擇器可以縮小:
HTML:
CSS:
媒體查詢
當(dāng)我們需要為各種媒體查詢使用不同的樣式時,我們可以在樣式化組件中像這樣執(zhí)行此操作:
使用樣式化,您可以使用預(yù)定義的屏幕或動態(tài)屏幕:
變量
變量可以直接在樣式化組件中使用:
樣式化允許您定義變量,然后在選擇器中使用它們:
當(dāng)存在我們需要各種類型的一個按鈕的情況時,我們需要在Stylify中編寫完整的選擇器:
關(guān)鍵幀
樣式化零部件中的關(guān)鍵幀可以按如下方式定義:
在風(fēng)格化中,它看起來有點不同:
一個簡單的動畫示例:
設(shè)置關(guān)鍵幀樣式示例
普通選擇器
當(dāng)涉及到全局樣式和簡單選擇器時,可以使用在樣式化組件中定義它們:createGlobalStyle
在樣式化中,使用普通選擇器也可以實現(xiàn)相同的操作。選擇器直接注入到生成的 CSS 文件中。
拆分?jǐn)鄬訏呙?/strong>
在優(yōu)化方面,樣式化組件是一個很好的工作,因為它會自動將CSS拆分為關(guān)鍵和非關(guān)鍵,并注入所用組件的CSS。但是,編譯是在應(yīng)用運行時完成的。
風(fēng)格化不是這樣工作的。
它根據(jù)您的配置生成CSS文件,您必須告訴應(yīng)用程序何時應(yīng)加載CSS。
您可以為每個頁面/組件/布局單獨配置捆綁包。即使您可以根據(jù)需要拆分CSS,但由于實用程序/組件組合,CSS的大小將相對較小,因為選擇器僅生成一次。因此,有時只有前端+管理員CSS是有意義的。樣式化網(wǎng)站的 Kb 小于 20 Kb,其他網(wǎng)站在 30–50 Kb 之間,
還有一個功能是,它不會減慢應(yīng)用程序的速度,因為 CSS 是在應(yīng)用程序初始化之前生成的。