Tailwind CSS样式优先级控制
前情
Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别,能达到最小化项目CSS。它的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何模板中的 CSS 类名,然后生成相应的样式代码并写入到一个静态 CSS 文件中。Tailwind CSS 快速、灵活、可靠,没有运行时负担。自从接触了Tailwind CSS后,目前已经是我项目的标配了。我最近接手的uni-app项目就被我引入了Tailwind CSS,大大提高了书写样式的开发体验和效率。
问题:
原子化CSS都把样式都打平在同级了,样式优化级只跟出现的先后顺序有关,如果是纯使用Tailwind CSS开发的项目是问题不大的,但是很多时候都是在原有项目上增加Tailwind CSS,我目前手上项目就是我接手后才引入Tailwind CSS的,开发中总是会遇到因为样式优先级不够导致样式冲突不生效的问题,特别是修改原有项目样式的时候被优先级问题困扰。
解决方案1:
通过修改Tailwind.config.js配置让所有原子化CSS都增加!important后辍来全局提高Tailwind CSS生成的样式的优先级
const path = require("path");
const resolve = (p) => {
return path.resolve(__dirname, p);
};
/** @type {import('tailwindcss').Config} */
module.exports = {
// 增加此配置让所有Tailwind CSS样式增加!important后辍达到提高样式优先级
important: true,
content: [
"./index.html",
"./pages/**/*.{html,js,ts,jsx,tsx,vue}",
"./components/**/*.{html,js,ts,jsx,tsx,vue}"
].map(resolve),
// ...
corePlugins: {
// 跨多端可以 h5 开启,小程序关闭
preflight: false,
}
};
问题:此方案全局提高所有原子化样式优先级有点太过头,真正项目并不是所有样式都会有样式冲突的,所以不需要所有的样式都增加!important,导致过多的无用后辍。
解决方案2:
通过修改Tailwind.config.js配置,增加样式层级来提高提高Tailwind CSS生成的样式的优先级
const path = require("path");
const resolve = (p) => {
return path.resolve(__dirname, p);
};
/** @type {import('tailwindcss').Config} */
module.exports = {
// 增加此配置让生成的原子化CSS都会在此样式层级下,以增加原子化CSS的层级来提高样式优先级
important: 'my-app',
content: [
"./index.html",
"./pages/**/*.{html,js,ts,jsx,tsx,vue}",
"./components/**/*.{html,js,ts,jsx,tsx,vue}"
].map(resolve),
// ...
corePlugins: {
// 跨多端可以 h5 开启,小程序关闭
preflight: false,
}
};
问题:此方案虽然能提高样式优先级,但是提高的权重有限,可能并不适合所有场景。
解决方案3(推荐):
单独为特定原子化CSS增加!important后辍来提高样式优先级,也是我一直在使用的方案,我最近接手的一个项目发现前一开发在全局对图片标签宽高做了重置了,我不得不在设置图片宽高的时候增加!前辍以让它生成的原子化CSS添加!important后辍
<image
src="../static/wen.webp"
mode="aspectFill"
class="!zhs-w-[44rpx] !zhs-h-[44rpx]"
/>
最终生成的原子化CSS如下:
.izhs-w-_44rpx_ {
width: 22px !important;
}
.izhs-h-_44rpx_ {
height: 22px !important;
}
总结
方案1和方案3的原理是!important可以让样式权重提高到最高来达到解决样式冲突的问题,而方案2的方式是通过样式层级来提高样式优先级。
方案3是我个人觉得最优化的解决方案,即能解决样式优先级问题,也能保证修改的范围最小化。
此文章虽然是以我手上的uni-app项目作为演示示例,一些写法跟平时的web项目有一些区别,但web项目也是一样支持的。
如果你有更好的提高Tailwind CSS样式优先级的方案,欢迎留言,一起讨论学习进步吧。
友情提示
uni-app项目一般使用的IDE是官方自带的HBuilder x,为了更好的开发体验安装如下插件,即可实现样式名提示了,插件地址:Tailwind CSS语言服务 - DCloud 插件市场。

安装插件开发者工具会有莫名的报错,可以忽略,从最近一二周的使用体验上来说是没有什么问题的。
Tailwind CSS样式优先级控制的更多相关文章
- Tailwind CSS in Action
Tailwind CSS in Action Tailwind CSS是一个高度可定制的低级CSS框架,它为您提供了构建定制设计所需的所有构造块,而无需烦恼要覆盖的烦人的自以为是的样式 https:/ ...
- css样式让input垂直居中
css样式让input垂直居中 css代码: .div1{ border: 1px solid #CCC; width:1120px; height:40px; margin:auto; displa ...
- 深度理解CSS样式表,内有彩蛋....
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js设置css样式.
在js设置css样式做法 var obj = document.getElementById('div'); obj.style.width = '100px'; obj.style.height = ...
- CSS样式表
CSS样式及属性 样式标的基本概念 样式表的分类 1.内联样式表 和html联合显示,控制精确,但可重用性差,冗余多. 例:<p style="font-size:14px;" ...
- 脚本工具(获取某个文件夹下的所有图片属性批量生成css样式)
问题描述: 由于有一次工作原因,就是将某个文件夹下的所有图片,通过CSS描述他们的属性,用的时候就可以直接引用.但是我觉得那个文件夹下的图片太多,而且CSS文件的格式又有一定的规律,所有想通过脚本来生 ...
- jQuery所支持的css样式
jQuery所支持的css样式 backgroundPosition borderWidth borderBottomWidth borderLeftWidth borderRightWidth bo ...
- Yii2 assets注册的css样式文件没有加载
准备引入layui.css文件的,在LayuiAssets类中已经配置了资源属性 <?php namespace frontend\assets; use yii\web\AssetBundle ...
- 获取元素计算后的css样式封装
获取元素计算后的css样式封装: function getCss(obj,attribute) { if(obj.currentStyle) { return obj.currentStyle[att ...
- JS实战 · 仿css样式选择器
代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/ ...
随机推荐
- 使用Minio Clinet将老版本Minio的数据迁移到新版本的Minio
1. 关于Minio Client: MinIO Client是一个命令行工具,用于与Minio或云存储服务进行交互.它支持文件系统和Amazon S3兼容的云存储服务(AWS Signature v ...
- 搭建本地nginx-rtmp服务,初体验rtmp推流、拉流
实验环境说明: ubuntu 16.04 进行本实验的前提:需要在ubuntu上搭建好ffmpeg环境,参考我的另一篇博文 ffmpeg编译过程经历的99八十一难 下面开始本文内容 PART1 编译安 ...
- linux操作系统和文件系统,命令(上)
Linux是一个类似于windows的操作系统 Linux操作系统的一种主要使用方式是通过终端软件:终端软件里只能使用键盘不能使用鼠标,在终端软件里通过输入命令完成各种任务 clear命令可以删除终端 ...
- placement new --特殊的内存分配
placement new 是 C++ 中的一种特殊的内存分配技术,用来在指定的内存地址上直接构造对象.与普通的 new 运算符不同,placement new 并不分配新的内存,而是在已经分配好的内 ...
- USB眼图常识
最近一段时间,项目需求,需要对USB眼图进行摸底测试.测试过程很简单,然而debug之路却很不简单.不简单往往也就意味着带来了不少收获. 示波器跨接在接收滤波器的输出端,调整示波器扫描周期,使示波器水 ...
- vue3读取所有的vue文件
- 24个希腊字母与 Tex 表示
大写 小写 英文 中文 Α α Alpha 阿尔法 Β β Beta 贝塔 Γ γ Gamma 伽马 Δ δ Delta 德尔塔 Ε ε Epsilon 艾普西隆 Ζ ζ Zeta 泽塔 Η η Et ...
- Nuxt.js 应用中的 build:manifest 事件钩子详解
title: Nuxt.js 应用中的 build:manifest 事件钩子详解 date: 2024/10/22 updated: 2024/10/22 author: cmdragon exce ...
- Java遇到PKIX path building failed错误的解决办法
Java调用HTTPS可能出现如下错误: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExc ...
- NES 名词解释
本文介绍了 NES(FC.红白机.小霸王)中一些名词或者术语,主要与 PPU 有关. Tile 8x8 像素图像.每像素 2 比特, 共 16 字节大小.每个像素可以使用 4 种颜色. Sprite ...