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/ ...
随机推荐
- JAVA与.NET DES加密解密
项目需要在两个系统间采用DES加密,一个系统为JAVA开发的,另外一个.Net开发的 在网上找了很多写法但加密出的数据两个系统都无法匹配, 在做了小修改以后终于可以用了,已经测试过 JAVA版本 im ...
- MyBatis——案例——查询-多条件查询(多参数接收的三种方法)
查询-多条件查询 编写接口方法:Mapper接口 参数:所有条件查询 List<Brand> selectByCondition(int status,String com ...
- [OI] 欢夏!邪龙?马拉车!
标题来自原神 算法概述 Manacher 算法 用途:寻找回文串,最板子的情况下用于字符串的回文子串计数 给定一个字符串 \(S\),求出它全部的回文子串 容易想到一种暴力的 \(n^{2}\) 做法 ...
- BPF BTF 详解
1. 介绍 BTF(BPF Type Format)是内嵌在BPF(Berkeley Packet Filter)程序中的数据结构描述信息.BPF原本是用于数据包过滤的编程语言,但随着eBPF(ext ...
- ADO.NET组成
SqlConnection(数据库连接器) SqlCommand(数据库命名对象) SqlCommandBuilder(生存SQL命令) SqlDataReader(数据读取器) SqlDataAda ...
- Linux查看显卡 GPU信息
1.Linux查看显卡信息: 1.1查询显卡信息 lspci | grep -i vga 前边的序号 "04:00.0″是显卡的代号 ASPEED Technology, Inc. ASPE ...
- Exchange2016中搜索和删除邮件
Exchange2016中搜索和删除邮件 在以前版本的 Exchange 中,可以运行 Search-Mailbox -DeleteContent 命令搜索并删除电子邮件.你仍可以在 Exchang ...
- 使用 KubeEye 为你的 K8s 集群安全保驾护航
作者:KaliArch(薛磊),某Cloud MSP服务商产品负责人,熟悉企业级高可用/高并发架构,包括混合云架构.异地灾,熟练企业DevOPS改造优化,熟悉Shell/Python/Go等开发语言, ...
- Python实现火柴人的设计与实现
1.引言 火柴人(Stick Figure)是一种极简风格的图形,通常由简单的线段和圆圈组成,却能生动地表达人物的姿态和动作.火柴人不仅广泛应用于动画.漫画和涂鸦中,还可以作为图形学.人工智能等领域的 ...
- Re:从零开始的pwn学习(栈溢出篇)
写在前面:本文旨在帮助刚接触pwn题的小伙伴少走一些弯路,快速上手pwn题,内容较为基础,大佬轻喷.本文默认读者明白最基础的汇编指令的含义,并且已经配置好linux64位环境,明白基础的Linux指令 ...