0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

研發(fā)都應(yīng)該了解的如何在vite中接入現(xiàn)代化css工程化方案

京東云 ? 來(lái)源:jf_75140285 ? 2024-10-25 17:25 ? 次閱讀

作者:京東物流 劉微微

背景

好的css工程化方案可以增強(qiáng)我們項(xiàng)目的可維護(hù)性、提高樣式的復(fù)用性、進(jìn)行自動(dòng)化處理等,在提高頁(yè)面加載速度和性能的同時(shí),我們可以有更多的精力進(jìn)行js邏輯的處理。

添加全局樣式文件

使用場(chǎng)景: 有一個(gè)scss/less文件,此文件中定義了一些全局變量,需要在其他的樣式文件中使用,此時(shí)需要將這些變量放在全局

// vite.config.ts
// 全局 scss 文件的路徑
const variablePath = path.resolve("./src/variable.scss");

export default defineConfig({
  // css 相關(guān)的配置
  css: {
    preprocessorOptions: {
      scss: {
        // additionalData 的內(nèi)容會(huì)在每個(gè) scss 文件的開(kāi)頭自動(dòng)注入
        additionalData: `@import "${variablePath}";`
      }
    }
  }
})

CSS Modules

CSS Modules 在 Vite 也是一個(gè)開(kāi)箱即用的能力,Vite 會(huì)對(duì)后綴帶有.module的樣式文件自動(dòng)應(yīng)用 CSS Modules。接下來(lái)我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)使用這個(gè)功能。

首先,將 Header 組件中的index.scss更名為index.module.scss,然后稍微改動(dòng)一下index.tsx的內(nèi)容,如下:

// index.tsx
import styles './index.module.scss';
export function Header() {
  return This is Header
};

PostCSS自動(dòng)添加css兼容前綴

一般你可以通過(guò) postcss.config.js 來(lái)進(jìn)行 postcss 的配置,不過(guò)在 Vite 配置文件中已經(jīng)提供了 PostCSS 的配置入口,我們可以直接在 Vite 配置文件中進(jìn)行操作。

首先,我們來(lái)安裝一個(gè)常用的 PostCSS 插件——autoprefixer:

pnpm i autoprefixer -D

這個(gè)插件主要用來(lái)自動(dòng)為不同的目標(biāo)瀏覽器添加樣式前綴,解決的是瀏覽器兼容性的問(wèn)題。接下來(lái)讓我們?cè)?Vite 中接入這個(gè)插件:

// vite.config.ts 增加如下的配置

export default {
  css: {
    // 進(jìn)行 PostCSS 配置
    postcss: {
      plugins: [
        autoprefixer({
          // 指定目標(biāo)瀏覽器
          overrideBrowserslist: ['Chrome > 40', 'ff > 31', 'ie 11']
        })
      ]
    }
  }
}

CSS 原子化框架

在目前的社區(qū)當(dāng)中,CSS 原子化框架主要包括Tailwind CSS 和 Windi CSS。Windi CSS 作為前者的替換方案,實(shí)現(xiàn)了按需生成 CSS 類(lèi)名的功能,開(kāi)發(fā)環(huán)境下的 CSS 產(chǎn)物體積大大減少,速度上比Tailwind CSS v2快 20~100 倍!當(dāng)然,Tailwind CSS 在 v3 版本也引入 JIT(即時(shí)編譯) 的功能,解決了開(kāi)發(fā)環(huán)境下 CSS 產(chǎn)物體積龐大的問(wèn)題,但這也是后來(lái)的事情了。接下來(lái)我們還是選擇 Windi CSS 作為 CSS 原子化框架來(lái)接入到 Vite 中。

首先安裝 windicss 及對(duì)應(yīng)的 Vite 插件:

pnpm i windicss vite-plugin-windicss -D

隨后我們?cè)谂渲梦募衼?lái)使用它:

// vite.config.ts
import windi from "vite-plugin-windicss";

export default {
  plugins: [
    // 省略其它插件
    windi()
  ]
}

接著要注意在src/main.tsx中引入一個(gè)必需的 import 語(yǔ)句:

// main.tsx
// 用來(lái)注入 Windi CSS 所需的樣式,一定要加上!
import "virtual:windi.css";

這樣我們就完成了 Windi CSS 在 Vite 中的接入,接下來(lái)我們?cè)?Header 組件中來(lái)測(cè)試,組件代碼修改如下:

// src/components/Header/index.tsx
import { devDependencies } from "../../../package.json";

export function Header() {
  return (
    
vite version: {devDependencies.vite}
); }

windicss的 attributify 和 shortcuts

除了本身的原子化 CSS 能力,Windi CSS 還有一些非常好用的高級(jí)功能,在此我給大家推薦自己常用的兩個(gè)能力: attributify 和 shortcuts。

要開(kāi)啟這兩個(gè)功能,我們需要在項(xiàng)目根目錄新建windi.config.ts,配置如下:

import { defineConfig } from "vite-plugin-windicss";

export default defineConfig({
  // 開(kāi)啟 attributify
  attributify: true,
});

首先我們來(lái)看看attributify,翻譯過(guò)來(lái)就是屬性化,也就是說(shuō)我們可以用 props 的方式去定義樣式屬性,如下所示:


  Button

這樣的開(kāi)發(fā)方式不僅可以省去了繁瑣的 className 內(nèi)容,而且還加強(qiáng)了語(yǔ)義化,代碼更容易維護(hù),可以說(shuō)大大提升了開(kāi)發(fā)體驗(yàn)。

shortcuts 用來(lái)封裝一系列的原子化能力,尤其是一些常見(jiàn)的類(lèi)名集合,我們?cè)?windi.config.ts來(lái)配置它:

//windi.config.ts
import { defineConfig } from "vite-plugin-windicss";

export default defineConfig({
  attributify: true,
  shortcuts: {
    "flex-c": "flex justify-center items-center",
  }
});

比如這里封裝了flex-c的類(lèi)名,接下來(lái)我們可以在業(yè)務(wù)代碼直接使用這個(gè)類(lèi)名:


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    574

    瀏覽量

    24933
  • CSS
    CSS
    +關(guān)注

    關(guān)注

    0

    文章

    110

    瀏覽量

    14492
  • 全局變量
    +關(guān)注

    關(guān)注

    1

    文章

    28

    瀏覽量

    9026
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    形式方法的工程化

    形式化工程方法,是以軟件形式方法理論為基礎(chǔ),以系統(tǒng)工程方法引導(dǎo)工業(yè)界工程人員構(gòu)建高質(zhì)量的軟件模型,用以引導(dǎo)后續(xù)的代碼編寫(xiě)和相關(guān)測(cè)試分析
    的頭像 發(fā)表于 03-24 11:01 ?1597次閱讀
    形式<b class='flag-5'>化</b>方法的<b class='flag-5'>工程化</b>

    [原創(chuàng)]逐漸智能現(xiàn)代化公安裝備

    各個(gè)不同開(kāi)展實(shí)際需要,提出了很多加強(qiáng)公安裝備的方案,通過(guò)科學(xué)的概念,科技的手段來(lái)提高公安的辦案能力。也使公安的裝備逐漸智能現(xiàn)代化?!  ?jiān)持公安裝備現(xiàn)代化建設(shè)不動(dòng)搖  早在上世紀(jì)80年代
    發(fā)表于 12-26 12:21

    基于RFID的現(xiàn)代化奶牛場(chǎng)管理應(yīng)用

    0 引言 信息與自動(dòng)現(xiàn)代管理技術(shù)在畜牧業(yè)發(fā)展的地位越來(lái)越重要,基于無(wú)線(xiàn)射頻原理的奶牛自動(dòng)識(shí)別系統(tǒng),是現(xiàn)代化奶牛場(chǎng)管理 不可或缺的一部
    發(fā)表于 07-17 08:31

    怎么強(qiáng)化現(xiàn)代化IC的設(shè)計(jì)環(huán)境?

    數(shù)字設(shè)計(jì)及驗(yàn)證技術(shù)演進(jìn)的概觀(guān)現(xiàn)代化IC設(shè)計(jì)環(huán)境必須強(qiáng)化的方法
    發(fā)表于 04-09 06:17

    在醫(yī)院現(xiàn)代化建設(shè)中部署無(wú)線(xiàn)局域網(wǎng)是否安全?

    無(wú)線(xiàn)局域網(wǎng)技術(shù)在醫(yī)院現(xiàn)代化建設(shè)中有哪些作用?國(guó)內(nèi)外無(wú)線(xiàn)局域網(wǎng)在醫(yī)院應(yīng)用的安全性研究是什么?
    發(fā)表于 05-17 06:56

    嵌入式系統(tǒng)工程化設(shè)計(jì)的相關(guān)資料分享

    了行業(yè)的飛速發(fā)展,可以說(shuō)這個(gè)行業(yè)在風(fēng)口上。但是,也發(fā)現(xiàn)我們的行業(yè)的不足,基礎(chǔ)嚴(yán)重依賴(lài)國(guó)外,企業(yè)設(shè)計(jì)能力參差不齊,從業(yè)人員培訓(xùn)費(fèi)時(shí)費(fèi)力,導(dǎo)致產(chǎn)品可靠性低下,項(xiàng)目遭受重大損失。解決這一問(wèn)題,需要提升我國(guó)嵌入式計(jì)算機(jī)工程化設(shè)計(jì)能力。什么是工程化首先什么是
    發(fā)表于 11-09 06:37

    求一種現(xiàn)代化網(wǎng)絡(luò)的完全響應(yīng)式設(shè)計(jì)方案

    現(xiàn)代化的網(wǎng)絡(luò)可以完全響應(yīng),并且每天都有更多的設(shè)計(jì)師意識(shí)到這一點(diǎn)。 但是,在響應(yīng)式設(shè)計(jì)方面存在一個(gè)艱巨的挑戰(zhàn): 嵌入式內(nèi)容 。從YouTube到Vimeo的每個(gè)視頻網(wǎng)站都具有固定為特定大小的默認(rèn)嵌入
    發(fā)表于 12-23 08:04

    監(jiān)控系統(tǒng)控制軟件的工程化設(shè)計(jì)與實(shí)現(xiàn)

    主要探討微機(jī)監(jiān)控系統(tǒng)控制軟件的工程化設(shè)計(jì)方法,介紹了模塊程序設(shè)計(jì)和結(jié)構(gòu)程序設(shè)計(jì)的基本原理,具體分析了在電鍋爐微機(jī)控制系統(tǒng),采用模塊
    發(fā)表于 03-18 10:33 ?21次下載

    CSS工程化實(shí)踐成果分析

    。 CSS技術(shù)的演進(jìn) CSS是Web開(kāi)發(fā)不可或缺的一部分,在前端工程化不斷進(jìn)步的今天,一方面CSS特性隨著規(guī)范的升級(jí)越來(lái)越豐富,另一方面,
    發(fā)表于 09-27 15:10 ?0次下載

    硬件工程都應(yīng)該掌握防反接電路,你都Get到了嗎?

    硬件工程都應(yīng)該掌握的防反接電路,你都Get到了嗎?
    的頭像 發(fā)表于 02-03 15:05 ?4691次閱讀

    專(zhuān)業(yè)的人士都應(yīng)該且能夠記住這二十個(gè)基本模擬電路

    初級(jí)層次是熟練記住這二十個(gè)電路,清楚這二十個(gè)電路的作用。只要是電子愛(ài)好者,只要是學(xué)習(xí)自動(dòng)、電子等電控類(lèi)專(zhuān)業(yè)的人士都應(yīng)該且能夠記住這二十個(gè)基本模擬電路。
    的頭像 發(fā)表于 11-30 10:09 ?6432次閱讀

    基于工程化參數(shù)優(yōu)化的遙測(cè)伺服系統(tǒng)

    基于工程化參數(shù)優(yōu)化的遙測(cè)伺服系統(tǒng)
    發(fā)表于 06-30 15:57 ?6次下載

    存儲(chǔ)體系結(jié)構(gòu)的現(xiàn)代化

    電子發(fā)燒友網(wǎng)站提供《存儲(chǔ)體系結(jié)構(gòu)的現(xiàn)代化.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 16:58 ?0次下載
    存儲(chǔ)體系結(jié)構(gòu)的<b class='flag-5'>現(xiàn)代化</b>

    喜報(bào)丨軟通動(dòng)力應(yīng)用現(xiàn)代化平臺(tái)工程產(chǎn)品及服務(wù)解決方案榮獲“2023年應(yīng)用現(xiàn)代化典型案例”稱(chēng)號(hào)

    在數(shù)字經(jīng)濟(jì)時(shí)代,應(yīng)用現(xiàn)代化正在成為一個(gè)共識(shí)。 近日,中國(guó)軟件行業(yè)協(xié)會(huì)首屆“應(yīng)用現(xiàn)代化產(chǎn)業(yè)實(shí)踐優(yōu)秀案例”評(píng)選結(jié)果揭曉, 軟通動(dòng)力應(yīng)用現(xiàn)代化研究中心打造的應(yīng)用現(xiàn)代化平臺(tái)
    的頭像 發(fā)表于 11-13 19:30 ?846次閱讀
    喜報(bào)丨軟通動(dòng)力應(yīng)用<b class='flag-5'>現(xiàn)代化</b>平臺(tái)<b class='flag-5'>工程</b>產(chǎn)品及服務(wù)解決<b class='flag-5'>方案</b>榮獲“2023年應(yīng)用<b class='flag-5'>現(xiàn)代化</b>典型案例”稱(chēng)號(hào)

    軟通動(dòng)力應(yīng)用現(xiàn)代化平臺(tái)工程產(chǎn)品及服務(wù)解決方案榮獲“2023年應(yīng)用現(xiàn)代化典型案例”稱(chēng)號(hào)

    的應(yīng)用現(xiàn)代化平臺(tái)工程產(chǎn)品及服務(wù)解決方案榮獲“2023年應(yīng)用現(xiàn)代化典型案例”稱(chēng)號(hào)。該評(píng)選旨在加快推動(dòng)應(yīng)用現(xiàn)代化發(fā)展與推廣應(yīng)用,形成行業(yè)應(yīng)用帶動(dòng)
    的頭像 發(fā)表于 11-14 16:50 ?726次閱讀
    軟通動(dòng)力應(yīng)用<b class='flag-5'>現(xiàn)代化</b>平臺(tái)<b class='flag-5'>工程</b>產(chǎn)品及服務(wù)解決<b class='flag-5'>方案</b>榮獲“2023年應(yīng)用<b class='flag-5'>現(xiàn)代化</b>典型案例”稱(chēng)號(hào)