UnoCSS 簡化 CSS 的書寫,Nice!

来源:https://www.cnblogs.com/Enziandom/archive/2023/01/11/17043762.html
-Advertisement-
Play Games

CSS 樣式太多,重覆寫 在學習 UnoCSS 之前,我提出幾個問題: 你是否有過寫完了 HTML 之後,跳轉到 style 寫 CSS 這樣來回跳轉的痛苦? 你是否有過不知道如何給節點取類名的痛苦(有的節點確實沒啥必要取類名,但就是需要寫 CSS)? 你是否有過管理重覆、繁雜、繁多的 CSS 而痛 ...


CSS 樣式太多,重覆寫

在學習 UnoCSS 之前,我提出幾個問題:

  1. 你是否有過寫完了 HTML 之後,跳轉到 style 寫 CSS 這樣來回跳轉的痛苦?
  2. 你是否有過不知道如何給節點取類名的痛苦(有的節點確實沒啥必要取類名,但就是需要寫 CSS)?
  3. 你是否有過管理重覆、繁雜、繁多的 CSS 而痛苦?

以上三個問題,在你使用了 UnoCSS 之後,基本上可以解決掉。使用 UnoCSS 可以更加快速地構建你的 HTML 和樣式。這是 UnoCSS 作者對 CSS 的感想:重新構想原子化 CSS。有興趣可以先去讀一讀。文章中有一個關鍵詞“原子化”,使用了之後才可能對這個關鍵詞有反應。

對 CSS 原子化的理解

我們寫 CSS 時,通常都是 類名、id、標簽 選中之後在 style 標簽里寫樣式,通常都是一大坨的 CSS。有時候我們遇到了樣式復用的情況,提取部分相同的樣式到一個 class 中,再給這些節點添加一個 class:

.common {
  font-size: 20px;
  color: white;
  border: 1px solid #cccccc;
}

.a {
  background: green;
}

.b {
  background: blue;
}
<div class="a common"></div>
<div class="b common"></div>

似乎這樣還不讓我們滿意,可復用性還是太低了些,假如第三個節點要用 common class 里的 border 呢?可以這樣做:

.border {
  border: 1px solid #cccccc;
}

.common {
  font-size: 20px;
  color: white;
}
<div class="a common border"></div>
<div class="b common border"></div>
<div class="c common border"></div>

可以想象,樣式越多、這樣提取樣式的工作也就越來越多。像是 Bootstrap 這樣的 CSS 工具庫,給我們做了不少這樣的工作,可以減少很多我們寫 CSS 的時間,直接套上類名就可以了。但問題是,我們引入了 Bootstrap 之後,裡面沒有用到的類樣式,也會被打包到生產環境中,是不是太影響性能了呢?我們的理想是,不用的就不要打包,捨棄掉,而只需要用到的。

UnoCSS

重新構想原子化 CSS - 向你介紹 UnoCSS。我就直接通過案例來向你展示 UnoCSS 到底給我們帶來了什麼好處。先來看看我通過 UnoCSS 寫的一個 Vue 組件:

image

再來看看我沒有用 UnoCSS 的組件的樣子:

image

Vite + UnoCSS

cnpm i -D unocss
// vite.config.ts

// unocss
import Unocss from "unocss/vite";
import { presetAttributify, presetUno } from "unocss";

export default defineConfig(({ command, mode }) => {
  return {
    plugins: [
      vue(),
      Unocss({
        presets: [presetAttributify({}), presetUno()],
        rules: [
          [/^fs-(\d+\.{0,1}\d{0,2})$/, ([, d]) => ({ "font-size": `${d}px` })],
          [/^leh-(\d+\.{0,1}\d{0,2})$/, ([, d]) => ({ "line-height": `${d}` })],
        ]
      })
    ]
  };
});

UnoCSS 有一些自帶的 class,可以使用 https://uno.antfu.me/ 來查詢,沒有自己想要的話,可以通過 rules 來自己設置一個規則,如上,就可以使用啦!

動態生成樣式

來看這張圖,c-#878787,UnoCSS 區別於 Bootstrap 的一個最直觀的特點就是,值是可以動態設置的,而不是靜態的,不需要給每一個顏色寫一個 class:

image

上面的,oy、leh 等等都是如此,如上,leh 是我自己添加的一個 rules,leh-1.4 生成一個樣式line-height: 1.4leh-2就可以生成:line-height: 2

原子化:組裝 CSS

其實我更想說,原子化 CSS ≈ 獨立 CSS,通過 class 來組裝 CSS。而 UnoCSS 會根據給的值動態生成 CSS:

image

結束語

以上都是我自己使用 UnoCSS 的感想。UnoCSS 真的給我省了不少的功夫去寫 CSS。解決了每一次要給節點命名的痛苦!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 最近閱讀 Catcher、BugSnag、Rollbar 三個 Flutter 異常監控開源框架,文章鏈接如下: Flutter 異常監控 - 壹 | 從 Zone 說起 Flutter 異常監控 - 貳 | 框架 Catcher 原理分析 Flutter 異常監控 - 叄 | 從 bugsn ...
  • 一、推送成功收不到消息,推送返回:{"message":"success","requestID":"1523868*****2842718","resultcode":0} 排查步驟: 1、網路不穩定,切換穩定網路進行測試; 2、檢查手機是否為EMUI8.0.0系統,如果是早期的EMUI8.0,則 ...
  • Vue.js是一個漸進式的JavaScript框架,它使用了響應式系統來維護應用程式的狀態。響應式系統是Vue.js的核心部分,它使得應用程式能夠自動地更新視圖,當數據發生變化時。 ...
  • Vue04 12.Vue2 腳手架模塊化開發 目前開發模式的問題: 開發效率低 不夠規範 維護和升級,可讀性比較差 12.1基本介紹 官網地址 什麼是Vue Cli腳手架 12.2環境配置,搭建項目 VUE安裝教程+VScode配置 搭建Vue腳手架工程,需要用到NPM(node package m ...
  • Flexbox 是 CSS3 中的一種佈局模式。它允許元素在一個容器中自動排列,可以使用靈活的方式創建複雜的佈局。Flex 佈局有很多優點,例如,它很容易實現響應式設計,並且可以很容易地對齊和排列元素。 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 在當下前後端分離的主流環境下,前端部分的優化變得越來越重要。為了提升前端的性能和用戶體驗,我覺得可能需要從三個維度採集數據進行分析。 前端埋點。通過埋點收集和統計網頁的UV/PV、設備型號、瀏覽器等數據進行分析,比如可以有針對性對使 ...
  • 手機端 H5 實現自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實現,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,並將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ...
  • 參考文章:http://www.qb5200.com/article/482839.html 單雙向綁定指的是View層跟Model層之間的映射關係 單向綁定vs雙向綁定 react採用單向綁定,vue採用單向綁定和雙向綁定。 在React中Veiw發生改變,用戶通過發生Actions進行處理,Ac ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...