<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【CSS】1859- 原子化真的是現(xiàn)代前端CSS的救星嗎

          共 6744字,需瀏覽 14分鐘

           ·

          2023-11-11 02:05

          本文作者系360奇舞團(tuán)前端開發(fā)工程師

          文章標(biāo)題:從 Tailwind CSS 到 UnoCSS —— 原子化真的是現(xiàn)代前端CSS的救星嗎

          小編前言

          追憶往昔,穿越前朝,CSS也是當(dāng)年前端三劍客之一,風(fēng)光的很,隨著前端跳躍式的變革,CSS在現(xiàn)代前端開發(fā)中似乎有點(diǎn)默默無聞起來。

          不得不說當(dāng)看到UnoCss之前,我甚至都還沒聽過原子化CSS[1]這個概念(不夠卷,慚愧,慚愧),很久沒關(guān)注過CSS相關(guān)的內(nèi)容了。

          原子化CSS本身的概念和 Tailwind CSS、UnoCSS[2] 設(shè)計(jì)都比較簡單,這里主要想聊一下在現(xiàn)代前端中,原子化CSS到底是不是完美的解決方案,是不是解決CSS問題的正確方向。

          概念-原子化CSS

          原子化 CSS 是一種 CSS 的架構(gòu)方式,它傾向于小巧且用途單一的 class,并且會以視覺效果進(jìn)行命名。

          聽起來厲害,但實(shí)現(xiàn)的最終方式超級簡單,核心就是預(yù)置一大堆 class 樣式,盡量將這些 class 樣式簡單化、單一化,在開發(fā)過程中,可以直接在 DOM 中寫預(yù)置好的 class 名快速實(shí)現(xiàn)樣式,而不需要每次寫簡單枯燥大量的 css 樣式,如下代碼所示:

          1. 先預(yù)置一組class列表
          .m-10 { margin10px; }
          .p-5 { padding5px; }
          .text-red { color: red; }
           // 無數(shù)個....
          1. 編碼時在dom中直接寫class名,快速實(shí)現(xiàn)樣式
          <div class="m-10 p-5 text-red">
            測試dom
          </div>

          而預(yù)置的class列表中的樣式,有著一定的規(guī)律,開發(fā)者可以通過學(xué)習(xí)快速掌握,利用多個class在dom中的組合快速實(shí)現(xiàn)效果

          ????,是不是看起來有點(diǎn)熟悉?(死去的 Bootstrap 攻擊我),所以你覺得這是冷飯新炒,還是實(shí)用主義?

          Tailwind CSS 廣受歡迎

          Cover image for 4 Reasons why I start using Tailwind CSS in every project

          tailwindcss 的 github[3] 上目前居然已經(jīng)有了 70.8K  個 star !!,最開始我是難以置信它竟會如此受歡迎的,npm 周下載量也超六百多萬 。

          Tailwind CSS 主張讓你無需離開 HTML 即可快速構(gòu)建網(wǎng)站,并有許多非常非常實(shí)用的優(yōu)點(diǎn)

          • 對 class 極致的封裝,最大程度提高復(fù)用性
          • 易擴(kuò)展的的各種自定義配置
          • 構(gòu)建時清除未引用的 css 樣式,解決生產(chǎn)環(huán)境 CSS 冗余的問題
          • 舒適的響應(yīng)式開發(fā)體驗(yàn)
          • 函數(shù)、指令、布局、動畫,......等等

          幾乎囊括了開發(fā)者日常原生 CSS 開發(fā)中遇到的所有頭痛,不舒服的開發(fā)體驗(yàn),所以說他確實(shí)是很實(shí)用的工具。Tailwind CSS 真的是為前端開發(fā)者造福了。

          在前端構(gòu)建工具鏈中 Tailwind CSS 作為 PostCSS[4] 插件可與其他預(yù)處理器[5]結(jié)合使用,并優(yōu)化生成的 CSS 文件。。

          UnoCSS

          Tailwind CSS 在過去幾年廣受歡迎,近兩年 UnoCSS 又脫穎而出,這里需要先夸一下 UnoCSS 官網(wǎng)的圖標(biāo)&文字&背景色的色彩漸變聯(lián)動主題,很酷!!

          Cover image for UnoCSS, Vite + Vue3 easy setup

          按 UnoCSS 作者的說法,UnoCSS 并非要替代 Tailwind CSS 而是從另一個角度使原子化CSS在業(yè)務(wù)中融合的更完美

          UnoCSS 作者是 Vite 團(tuán)隊(duì)成員,我覺得正是因?yàn)樗鳛?Vite 的開發(fā)者,對于工程化構(gòu)建具有很高的敏感度,所以才能創(chuàng)造出 UnoCSS 將原子化的CSS與前端工程融合到極致。

          那么 UnoCSS 做了哪些事呢:

          1. 按需生成
            • 生成業(yè)務(wù)真正使用到的 class ,同時在開發(fā)和生產(chǎn)環(huán)境使用
            • 對比 Tailwind CSS 只在生產(chǎn)環(huán)節(jié)清除無引用代碼,UnoCSS 在開發(fā)環(huán)節(jié)也通過文件監(jiān)聽按需傳輸,獲得更快地性能(雖然已經(jīng)很快了,但再快一點(diǎn)總歸是個提升嘛)
          "傳統(tǒng)的方式"
          "按需分配的方式"
          1. 極具靈活性

            • UnoCSS 對自己定位是一個 CSS 引擎而非一個框架,所以它與 Tailwind CSS 應(yīng)該是包含關(guān)系,UnoCSS 作為規(guī)則的制定者,而 Tailwind CSS 可以作為其中的一組 preset

              import UnocssPlugin from '@unocss/vite'

              import PresetTachyons from '@unocss/preset-tachyons'
              import PresetBootstrap from '@unocss/preset-bootstrap'
              import PresetTailwind from '@unocss/preset-tailwind'
              import PresetWindi from '@unocss/preset-windi'
              import PresetAntfu from '@antfu/oh-my-cool-unocss-preset'

              export default {
                plugins: [
                  UnocssPlugin({
                    presets: [
                      // PresetTachyons,
                      PresetBootstrap,
                      // PresetTailwind,
                      // PresetWindi,
                      // PresetAntfu
                      // 選擇其中一個...或多個!
                    ]
                  })
                ]
              }
            • 屬性化書寫 class 名

              // 將冗長的 calss 按類型區(qū)分,更方便閱讀理解
              <button class="bg-blue-400 hover:bg-blue-500 text-sm text-white font-mono font-light py-2 px-4 rounded border-2 border-blue-200 dark:bg-blue-500 dark:hover:bg-blue-600">
                Button
              </button>

              // 改變?yōu)?br><button 
                bg="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600"
                text="sm white"
                font="mono light"
                p="y-2 x-4"
                border="2 rounded blue-200"
              >

                Button
              </button>
            • 在自定義規(guī)則上,UnoCSS 提供更加靈活的靜態(tài)&動態(tài)匹配規(guī)則

            • 編譯進(jìn)一步優(yōu)化(比如不再解析AST),生產(chǎn)構(gòu)建速度再度提升

          UnoCSS 等于是做了個更上層的引擎,以后再有新的原子化CSS框架也可以兼容進(jìn)來了,省得你有選擇困難癥。

          原子化CSS并非現(xiàn)代前端CSS的救星

          Tailwind CSS 與 UnoCSS 的特性和使用方法并非本文主要想講的,具體細(xì)節(jié)大家可移步官網(wǎng)查看,這里主要想討論下

          Tailwind CSS 或 UnoCSS 的原子化CSS 會是現(xiàn)代前端解決CSS問題的最佳實(shí)踐嗎?

          我覺得答案是否定的

          從我的直接觀感,原子化CSS更像是一個輔助型的實(shí)用工具,而非CSS問題的解決方案,作為輔助工具,它確實(shí)是能在某類業(yè)務(wù)場景或者業(yè)務(wù)發(fā)展的某個階段提供非常大的幫助,但從整個復(fù)雜多變的前端業(yè)務(wù)場景上看,它的能力是有限的

          • 最直觀的的結(jié)果就是當(dāng)業(yè)務(wù)復(fù)雜度提升到某個階段后,原子化CSS的性價比將急劇下降,帶來的HTML代碼冗余,可讀性差,難以維護(hù)的問題將直接影響到業(yè)務(wù)開發(fā)。

          • 尤其是現(xiàn)在無論是 Vue 的單文件組件還是 React 的函數(shù)式組件,都會將部分 JS 邏輯注入 HTML 中,如果 CSS 邏輯也要通過 class 名組合的方式注入其中,那就太混亂了。

          • 但 Vue 或 React 各自的組件化設(shè)計(jì)思想,都可以通過各自的組件化拆分來解決代碼冗余的問題,使其可適用于各種簡單&復(fù)雜的業(yè)務(wù)場景,是一套完善的最佳實(shí)踐,而原子化CSS 沒有辦法做組件化拆分的,所以隨著業(yè)務(wù)復(fù)雜度的上升,代碼冗余遲早會發(fā)生,這直接限制了此類框架的普及,所以它無法作為前端CSS問題的根本解決方案。

          從設(shè)計(jì)思想上,原子化CSS看起來也與目前主流的組件化,函數(shù)式編程顯得格格不入。

          適用場景

          在一些簡單的業(yè)務(wù)場景上,原子化CSS確實(shí)有非常大的優(yōu)勢,比如快速開發(fā)響應(yīng)式H5,業(yè)務(wù)復(fù)雜度低的中后臺系統(tǒng),簡單的官網(wǎng)頁面。

          而在一些復(fù)雜的業(yè)務(wù)場景,比如復(fù)雜的C端業(yè)務(wù),大型的系統(tǒng)就不在那么適用了。

          聲明

          原創(chuàng)文章,轉(zhuǎn)載請注明作者和文章原鏈接 從 Tailwind CSS 到 UnoCSS —— 原子化真的是前端CSS的救星嗎[6]

          參考資料

          [1]

          重新構(gòu)想原子化CSS: https://antfu.me/posts/reimagine-atomic-css-zh

          [2]

          unocss.dev: https://unocss.dev/

          [3]

          tailwindcss: https://github.com/tailwindlabs/tailwindcss

          [4]

          postcss.org: https://postcss.org/

          [5]

          sass-lang.com: https://sass-lang.com/

          [6]

          從 Tailwind CSS 到 UnoCSS —— 原子化真的是前端CSS的救星嗎?: https://juejin.cn/post/7263049551136636983

          - END -


          往期回顧

          #

          如何使用 TypeScript 開發(fā) React 函數(shù)式組件?

          #

          11 個需要避免的 React 錯誤用法

          #

          6 個 Vue3 開發(fā)必備的 VSCode 插件

          #

          3 款非常實(shí)用的 Node.js 版本管理工具

          #

          6 個你必須明白 Vue3 的 ref 和 reactive 問題

          #

          6 個意想不到的 JavaScript 問題

          #

          試著換個角度理解低代碼平臺設(shè)計(jì)的本質(zhì)

          回復(fù)“加群”,一起學(xué)習(xí)進(jìn)步

          瀏覽 433
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品视频一区二区三区 | 国产又黄又爽 | 五月丁香啪| 丁香色五月在线 | 色鬼av |