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/ ...
随机推荐
- 关于HOJ的搭建和二开经验小结
经验在最后,先说流程. 除了HOJ,之前先装的HDU,属实难用,然后是hustOJ,嗯很好用,但架不住丑,对管理员实在不友好. 好了不闲记,进入正题: 一.流程 1.官网文档先过一遍. 2.配置好do ...
- BOOST库array使用 类似std库的vector
BOOST库的array, 类似std库的vector. 下图所示书籍的下载地址,我的另一篇博客内有记载: https://www.cnblogs.com/happybirthdaytoyou/p/ ...
- USB 逻辑分析仪分析丢包怎么分析(lecroy USB 逻辑分析仪)
使用 LeCroy USB 逻辑分析仪分析 USB 数据传输中的丢包现象,通常涉及以下步骤: 1. 设置触发条件 在 LeCroy USB 逻辑分析仪中,设置适当的触发条件来捕获数据包丢失的场景.常见 ...
- USB协议基础篇
初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB. 一,从最常见的名词说起 1.1 什么是USB 这个我就不多解释了,直译就是通用串行总线.再不明白 ...
- 【PyTorch】state_dict详解
这篇博客来自csdn,完全用于学习. Introduce 在pytorch中,torch.nn.Module模块中的state_dict变量存放训练过程中需要学习的权重和偏执系数,state_dict ...
- webgl和canvas的区别
webgl和canvas的区别 WebGL和Canvas的主要区别在于它们的渲染方式.功能复杂性.以及编程难度.12 渲染方式:Canvas使用2D渲染上下文来绘制图形和图像,基于像素的绘图系统, ...
- 08 ELMo模型(双向LSTM模型解决词向量多义问题)
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- kotlin协程——>基础、取消与超时
Kotlin使用挂起函数为异步操作,使用kotlinx.coroutines中的launch.async 1. 第⼀个协程程序 import kotlinx.coroutines.* fun main ...
- SqlUtils 使用
一.前言 随着 Solon 3.0 版本发布,新添加的 SqlUtils 接口,用于操作数据库,SqlUtils 是对 Jdbc 原始接口的封装.适合 SQL 极少或较复杂,或者 ORM 不适合的场景 ...
- 使用 OpenFunction 在任何基础设施上运行 Serverless 工作负载
作者: 霍秉杰:KubeSphere 可观测性.边缘计算和 Serverless 团队负责人,Fluent Operator 和 OpenFunction 项目的创始人,还是多个可观测性开源项目包括 ...