首页 > 其他分享 >研发都应该了解的如何在vite中接入现代化css工程化方案

研发都应该了解的如何在vite中接入现代化css工程化方案

时间:2024-10-22 14:09:26浏览次数:7  
标签:scss import Vite css 工程化 vite CSS

作者:京东物流 刘微微

背景

好的css工程化方案可以增强我们项目的可维护性、提高样式的复用性、进行自动化处理等,在提高页面加载速度和性能的同时,我们可以有更多的精力进行js逻辑的处理。

添加全局样式文件

使用场景: 有一个scss/less文件,此文件中定义了一些全局变量,需要在其他的样式文件中使用,此时需要将这些变量放在全局

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

export default defineConfig({
  // css 相关的配置
  css: {
    preprocessorOptions: {
      scss: {
        // additionalData 的内容会在每个 scss 文件的开头自动注入
        additionalData: `@import "${variablePath}";`
      }
    }
  }
})

CSS Modules

CSS Modules 在 Vite 也是一个开箱即用的能力,Vite 会对后缀带有.module的样式文件自动应用 CSS Modules。接下来我们通过一个简单的例子来使用这个功能。

首先,将 Header 组件中的index.scss更名为index.module.scss,然后稍微改动一下index.tsx的内容,如下:

// index.tsx
import styles './index.module.scss';
export function Header() {
  return <p className={styles.header}>This is Header</p>
};

PostCSS自动添加css兼容前缀

一般你可以通过 postcss.config.js 来进行 postcss 的配置,不过在 Vite 配置文件中已经提供了 PostCSS 的配置入口,我们可以直接在 Vite 配置文件中进行操作。

首先,我们来安装一个常用的 PostCSS 插件——autoprefixer:

pnpm i autoprefixer -D

这个插件主要用来自动为不同的目标浏览器添加样式前缀,解决的是浏览器兼容性的问题。接下来让我们在 Vite 中接入这个插件:

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

export default {
  css: {
    // 进行 PostCSS 配置
    postcss: {
      plugins: [
        autoprefixer({
          // 指定目标浏览器
          overrideBrowserslist: ['Chrome > 40', 'ff > 31', 'ie 11']
        })
      ]
    }
  }
}

CSS 原子化框架

在目前的社区当中,CSS 原子化框架主要包括Tailwind CSS 和 Windi CSS。Windi CSS 作为前者的替换方案,实现了按需生成 CSS 类名的功能,开发环境下的 CSS 产物体积大大减少,速度上比Tailwind CSS v2快 20~100 倍!当然,Tailwind CSS 在 v3 版本也引入 JIT(即时编译) 的功能,解决了开发环境下 CSS 产物体积庞大的问题,但这也是后来的事情了。接下来我们还是选择 Windi CSS 作为 CSS 原子化框架来接入到 Vite 中。

首先安装 windicss 及对应的 Vite 插件:

pnpm i windicss vite-plugin-windicss -D

随后我们在配置文件中来使用它:

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

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

接着要注意在src/main.tsx中引入一个必需的 import 语句:

// main.tsx
// 用来注入 Windi CSS 所需的样式,一定要加上!
import "virtual:windi.css";

这样我们就完成了 Windi CSS 在 Vite 中的接入,接下来我们在 Header 组件中来测试,组件代码修改如下:

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

export function Header() {
  return (
    <div className="p-20px text-center">
      <h1 className="font-bold text-2xl mb-2">
        vite version: {devDependencies.vite}
      </h1>
    </div>
  );
}

windicss的 attributify 和 shortcuts

除了本身的原子化 CSS 能力,Windi CSS 还有一些非常好用的高级功能,在此我给大家推荐自己常用的两个能力: attributify 和 shortcuts。

要开启这两个功能,我们需要在项目根目录新建windi.config.ts,配置如下:

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

export default defineConfig({
  // 开启 attributify
  attributify: true,
});

首先我们来看看attributify,翻译过来就是属性化,也就是说我们可以用 props 的方式去定义样式属性,如下所示:

<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>

这样的开发方式不仅可以省去了繁琐的 className 内容,而且还加强了语义化,代码更容易维护,可以说大大提升了开发体验。

shortcuts 用来封装一系列的原子化能力,尤其是一些常见的类名集合,我们在 windi.config.ts来配置它:

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

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

比如这里封装了flex-c的类名,接下来我们可以在业务代码直接使用这个类名:

<div className="flex-c"></div>
<!-- 等同于下面这段 -->
<div className="flex justify-center items-center"></div>

标签:scss,import,Vite,css,工程化,vite,CSS
From: https://www.cnblogs.com/Jcloud/p/18492582

相关文章

  • Webpack5-css
    处理样式资源本章节我们学习使用Webpack如何处理Css、Less、Sass、Scss、Styl样式资源介绍Webpack本身是不能识别样式资源的,所以我们需要借助Loader来帮助Webpack解析样式资源我们找Loader都应该去官方文档中找到对应的Loader,然后使用官方文档找不到的话,可以从社......
  • 第六章 元素应用CSS
    6.1使用CSS设置字体样式font-family:设置字体的类型font-weight:设置字体的粗细font-size:设置字体的大小font-style:设置字体的倾斜6.1.1字体类型字体具有传递语义功能和美学效应两方面作用CSS提供font-family属性来控制文本的字体类型参数:字体名称按优先顺序排列,以逗......
  • HTML+CSS实现点赞效果
    效果演示HTML+CSS实现点赞效果HTML<divclass="heart-container"title="Like"><inputtype="checkbox"class="checkbox"id="Give-It-An-Id"><divclass="svg-container"><svgview......
  • 77.优美的鲜花网店网页 ​Web前端网页制作 大学生期末大作业 html+css+js
    目录一、前言二、网页文件三、网页效果四、代码展示1.HTML2.CSS3.JS五、更多推荐一、前言本实例以鲜花为主题设计,应用html+css+js,包括DIV布局、图片轮翻效果、菜单导航、二级三级菜单、留言板、搜索等,供大家参考。本网页支持如Dreamweaver、HBuilder、Text、Vscode......
  • CSS入门
    CSS层叠样式表样式表优点缺点使用情况控制范围行内样式表书写方便,权重高没有实现样式和结构相分离较少控制一个标签(少)内部样式表部分结构和样式相分离没有彻底分离较多控制一个页面(中)外部样式表完全实现结构和样式相分离需要引入最多控制整个站点......
  • 第六章 元素应用CSS
    6.1使用CSS设置字体样式在学习HTML时,通常也会使用HTML,对文本字体进行一些非常简单的样式设置,而使用CSS对字体样式进行设置远比使用HTML灵活、精确得多。字体样式的常用属性属性说明属性说明font-family设置字体的类型font-welght设置字体的粗细font-size设置字体的......
  • CSS速刷 - 预处理器
    预处理器是什么?lessSass预处理器有啥功能?嵌套,反映了层级和约束变量和计算,减少了重复代码Extend和Mixin代码片段,就像具备同一个功能的函数。循环,适用于复杂有规律的样式importCSS文件模块化1.less嵌套Node写的,通过npm发布。&:同一层级2.Sass嵌套输出和less嵌套......
  • CSS速刷 - CSS动画
    作用:引起注意、愉悦感、反馈、掩饰(加载过程)transition动画补间动画,中间过程可以计算出来。transition:width1s:意味动画属性是width,动画时间是1秒。delay:动画延迟几秒再开始transition-timing-function缓动函数:可以自己定制。关键帧动画animationanimatio......
  • 工程化爬虫的写法
    爬虫工程化是指将爬虫开发成一个稳定、可维护、可扩展的系统。这通常涉及到以下几个方面:模块化设计:将爬虫分解为多个模块,例如数据抓取、数据解析、数据存储、错误处理等。配置管理:使用配置文件来管理爬虫的参数,如目标URL、请求头、代理服务器等。异常处理:合理处理网络请......
  • css面试题
    总结不易,点个赞在走吧文章目录1.介绍一下CSS的盒子模型2.怪异盒模型/IE盒模型如何启用怪异盒模型使用场景3.line-height和height的区别?heightline-height主要区别代码实现height示例line-height示例总结4.CSS选择符有哪些?5.哪些属性可以继承?6.CSS优先级算法如何设......