Vue3 + Vite 项目引入 postcss + tailwindcss

一、PostCSS

1. 简介

PostCSS 是一个强大的 CSS 处理工具,它本身是一个工具库,但其核心功能是通过插件扩展,来对 CSS 进行编译、转换和优化。它适用于现代 CSS 开发,提供更灵活、高效的方式来处理样式表。

2. 主要作用

  1. 增强 CSS 功能:

    使用插件来扩展 CSS 的功能,比如支持嵌套规则、变量、循环、条件语句等功能。

  2. 自动添加兼容性前缀:

    借助 autoprefixer 插件,自动为 CSS 添加适配不同浏览器的前缀,避免手动添加。

  3. 编译下一代 CSS 语法:

    使用 postcss-preset-env 插件,支持未来 CSS 的草案语法,并将其转换为当前浏览器支持的代码。

  4. 代码优化:

    压缩 CSS 文件、移除未使用的 CSS 规则,减少文件大小,提高加载性能。

  5. 模块化 CSS 开发:

    通过 postcss-import 插件支持文件的拆分与导入,实现模块化管理。

  6. 集成生态系统:

    可以作为 Webpack、Vite 等构建工具的 CSS 处理工具,与前端生态无缝结合。

4. 常搭配插件

PostCSS 本身是一个 CSS 解析器,所有功能都通过插件实现,插件可以扩展和修改 CSS 的解析和生成过程。

  1. autoprefixer

    自动添加浏览器前缀,兼容不同浏览器。

  2. postcss-import

    支持 @import 导入 CSS 文件。

  3. tailwindcss

    Tailwind CSS 是一个功能类优先的 CSS 框架(utility-first CSS framework),用于快速构建现代网页的用户界面。与传统的组件式 CSS 框架(如 Bootstrap)不同,Tailwind 提供了一组低级的工具类,让开发者可以直接在 HTML 中组合使用这些类,快速实现所需的样式,而无需编写自定义 CSS。
    将 Tailwind CSS 作为 PostCSS 插件安装是将其与构建工具(如 webpack、Rollup、Vite 和 Parcel)集成的最无缝方式。

  4. postcss-pxtorem

    将 px 转换为 rem

5. 安装相关包

npm install postcss postcss-import autoprefixer tailwindcss postcss-pxtorem -D

6. 初始化配置文件

  1. postcss.config.cjs
// postcss.config.cjs
module.exports = {
  plugins: [
    'postcss-import': {},
    'tailwindcss/nesting': {},
    'tailwindcss': {},
    'autoprefixer': {},
    'postcss-pxtorem': {
      rootValue: 16, // 基准值(1rem = 16px)
      exclude: /node_modules/i // 要忽略并保留为 px 的文件路径
    },
  ]
}
  1. tailwind.config.cjs
// tailwind.config.cjs
/** @type {import('tailwindcss').Config} */
module.exports = {
  content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],  // 添加所有模板文件的路径
  theme: {
    extend: {
      colors: {
        // 文本
        'bt-text-primary': '#3B5CFF',
        'bt-text-danger': '#F53F3F',
        'bt-text-mormal': '#030229',
      },
    },
    screens: {
      xs: { max: '768px' },
      sm: { min: '768px' },
      md: { min: '1280px' },
      lg: { min: '1440px' },
      xl: { min: '1900px' }
    }
  }, // 自定义扩展
  plugins: [
    {'postcss-pxtorem': {
        rootValue: 16, // (Number | Function) 表示根元素字体大小或根据input参数返回根元素字体大小
        unitPrecision: 5, // (数字)允许 REM 单位增长到的十进制数字
        propList: ['*'], // 可以从 px 更改为 rem 的属性 使用通配符*启用所有属性
        selectorBlackList: [],// (数组)要忽略并保留为 px 的选择器。
        replace: true, // 替换包含 rems 的规则,而不是添加回退。
        minPixelValue: 0, // 最小的转化单位
        exclude: /node_modules/i // 要忽略并保留为 px 的文件路径
      }
    },
  ] // 插件配置
}
  1. tailwind.css
    全局引入样式文件
// tailwind.css
/** 将每个 Tailwind 层的 @tailwind 指令添加到你的主 CSS 文件中 */
@tailwind base;
@tailwind components;
@tailwind utilities;

7. 集成 vscode 编辑器

Visual Studio Code 的官方 Tailwind CSS IntelliSense 插件通过为用户提供自动补齐、语法高亮和代码检查等高级功能来增强 Tailwind 开发体验。有如下功能:

  • 自动补齐。类名智能建议,CSS 函数和指令。

  • 代码检查。高亮 CSS 和标记中的错误和潜在错误。

  • 悬停预览。将鼠标悬停在 Tailwind 类名称上可查看完整的 CSS。

  • 语法高亮。提供语法定义,以便正确高亮 Tailwind 功能。

8. 插件版本

"autoprefixer": "^10.4.20",
"postcss": "^8.4.24",
"postcss-import": "^15.1.0",
"postcss-pxtorem": "^6.1.0",
"prettier": "^3.3.3",
"sass": "^1.63.6",
"tailwindcss": "^3.3.2",
"typescript": "^4.9.5",

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/922496.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

clipboard

clipboard 现代复制到剪贴板。无闪光。只有 3kb 的 gzip 压缩。 安装 npm install clipboard --save第三方cdn提供商 <script src"https://cdn.jsdelivr.net/npm/clipboard2.0.11/dist/clipboard.min.js"></script>使用 data-clipboard-target"…

Matlab深度学习(四)——AlexNet卷积神经网络

网络搭建参考&#xff1a;手撕 CNN 经典网络之 AlexNet&#xff08;理论篇&#xff09;-CSDN博客 在实际工程应用中&#xff0c;构建并训练一个大规模的卷积神经网络是比较复杂的&#xff0c;需要大量的数据以及高性能的硬件。如果通过训练好的典型网络稍加改进&#xf…

《Python基础》之循环结构

目录 简介 一、for循环 1、基本语法与作用 2、使用 range() 函数配合 for 循环 3、嵌套的for循环 二、while循环 1、基本语法与作用 2、while 循环嵌套 &#xff08;1&#xff09;、while循环与while循环嵌套 &#xff08;2&#xff09;、while循环与for循环嵌套 简介 …

深入探索JMeter bin目录中的Properties文件:优化性能测试的关键

引言 在现代软件开发中&#xff0c;性能测试是确保应用质量和用户体验的重要环节。Apache JMeter作为一款流行的开源性能测试工具&#xff0c;提供了丰富的功能来模拟各种用户行为和负载情况。本文将深入探讨JMeter中的Properties&#xff08;属性&#xff09;功能&#xff0c…

第三十九篇 ShuffleNet V1、V2模型解析

摘要 ShuffleNet V1 ShuffleNet V1是由旷视科技&#xff08;Megvii&#xff0c;又称Face&#xff09;在2017年底提出的一种轻量级卷积神经网络架构。该网络专为移动设备和边缘计算环境设计&#xff0c;旨在以较低的计算资源实现高效的图像分类和其他计算机视觉任务。 特点与…

JavaScript练习——文本与图形

要求实现下面这个效果&#xff1a; 观察图片&#xff0c;我们的需求如下&#xff1a; 准备画布和上下文&#xff1a;在开始绘制之前&#xff0c;需要有一个HTML5 <canvas> 元素&#xff0c;并且获取其绘图上下文&#xff08;context&#xff09;&#xff0c;这是进行绘图…

[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案

问题log /tmp/ccByifPx.o: In function main: read.c:(.text0x1a): undefined reference to shm_open read.c:(.text0xd9): undefined reference to shm_unlink collect2: error: ld returned 1 exit status 程序代码 #include <stdio.h> #include <stdlib.h> #…

【redis】哈希类型详解

哈希类型详解 一、哈希类型的介绍二、哈希类型的常用命令2.1 HSET2.2 HGET2.3 HEXISTS2.4 HDEL2.5 HKEYS2.6 HAVLS2.7 HGETALL2.8 HMGET2.9 HLEN2.10 HSETNX2.11 HINCRBY2.12 HINCRBYFLOAT 三、哈希类型命令小结四、哈希类型内部编码五、哈希类型应用场景 一、哈希类型的介绍 …

单片机GPIO的8种工作模式

1、输入 GPIO_MODE_AIN:模拟输入 GPIO_MODE_IN_FLOATING:浮空输入 GPIO_MODE_IPD:下拉输入 GPIO_MODE_IPU:上拉输入 2、输出 GPIO_MODE_OUT_OD:开漏输出&#xff08;特殊情况使用&#xff09; GPIO_MODE_OUT_PP&#xff1a;推挽输出-----点灯&#xff08;通用&#…

YOLO-World解读:零基础学习开放世界模型

文章目录 一、摘要二、引言相关工作方法预训练公式模型架构可重新参数化的视觉-语言路径聚合网络&#xff08;RepVL-PAN&#xff09; 3.4 预训练方案 实验YOLO-World: 利用多样化数据集进行开放词汇对象检测的预训练方法YOLO-World: LVIS数据集上的零样本性能评估YOLO-World: 预…

深入理解下oracle 11g block组成

深层次说&#xff0c;oracle数据库的最少组成单位应该是块&#xff0c;一般默认情况下&#xff0c;oracle数据库的块大小是8kb&#xff0c;其中存储着我们平常所需的数据。我们在使用过程中&#xff0c;难免会疑问道&#xff1a;“oracle数据块中到底是怎样组成的&#xff0c;平…

《智慧教育实时数据分析推荐项目》详细分析

一、项目介绍 1、背景介绍 在互联网、移动互联网的带动下&#xff0c;教育逐渐从线下走向线上&#xff0c;在线教育近几年一直处于行业的风口浪尖&#xff0c;那随着基础设施的不断完善&#xff0c;用户需求也发生不少变化&#xff0c;因此传统教育机构、新兴互联网企业都在探…

stable-diffusion-webui 安装

一、安装 Python 3.11.8 (略) 二、下载stable-diffusion-webui cd E:\AITOOLS git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui 下载完成后&#xff1a; cd E:\AITOOLS\stable-diffusion-webui #运行 webui-user.bat 我们会发现要下载一下&#xff1a…

【Seed-Labs 2.0】The Kaminsky Attack Lab

说在前面 本实验属为Seed-Labs 的DNS LAB 中的第二个实验&#xff0c;是第一个实验的延伸&#xff0c;从攻击者和受害者同一个LAN中变成不在同一个LAN中&#xff0c;该系列一共有五个实验: Local DNS Attack LabThe Kaminsky Attack LabDNS Rebinding Attack LabDNS Infrastr…

类的实例化

文章目录 一、实例化2.1 实例化概念 一、实例化 2.1 实例化概念 用类类型在物理内存中创建对象的过程&#xff0c;称为类实例化出对象。 类是对象进行⼀种抽象描述&#xff0c;是⼀个模型⼀样的东西&#xff0c;限定了类有哪些成员变量&#xff0c;这些成员变量只是声明&…

《图像梯度与常见算子全解析:原理、用法及效果展示》

简介:本文深入探讨图像梯度相关知识&#xff0c;详细介绍图像梯度是像素灰度值在不同方向的变化速度&#xff0c;并以 “pig.JPG” 图像为例&#xff0c;通过代码展示如何选取图像部分区域并分析其像素值以论证图像梯度与边缘信息的关联。接着全面阐述了 Sobel 算子&#xff0c…

解决IDEA报包不存在,但实际存在的问题

前言 最近在把一个亿老项目交割给同事&#xff0c;同事在导入项目运行时遇到IDEA报包不存在&#xff0c;但实际存在的问题&#xff0c;最终通过以下方式解决 现象 在IDEA里启动运行项目&#xff0c;报某个类有问题&#xff0c;引入的包不存在。 点击这个引入的包&#xff0c;可…

C++(进阶) 第1章 继承

C&#xff08;进阶) 第1章 继承 文章目录 前言一、继承1.什么是继承2.继承的使用 二、继承方式1.private成员变量的&#xff08;3种继承方式&#xff09;继承2. private继承方式3.继承基类成员访问⽅式的变化 三、基类和派生类间的转换1.切片 四、 继承中的作⽤域1.隐藏规则&am…

resnet50,clip,Faiss+Flask简易图文搜索服务

一、实现 文件夹目录结构&#xff1a; templates -----upload.html faiss_app.py 前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…

SFP+光模块介绍

SFP光模块介绍 1 SFP光模块简介(Small Form -Factor Pluggable)2 光模块管脚定义 1 SFP光模块简介(Small Form -Factor Pluggable) 光模块&#xff08;Optical Module&#xff09;由光电子器件、功能电路和光接口等组成&#xff0c;光电子器件包括激光发射器(Laser Transmitte…