前端样式库推广——TailwindCss

官方网址: https://tailwindcss.com/docs/installation/using-vite
中文官方文档:https://www.tailwindcss.cn/
github地址:tailwindcss
正在使用tailwindcss的网站:https://tailwindcss.com/showcase

一看github,竟然有高达86.5+stars,这库不简单
它就是近几年很流行的 “原子化CSS框架” ——TailwindCss!

在这里插入图片描述

tailwindcss

  • 一、TailwindCss功能展示
  • 二、有什么优势?
    • 1. 原子化css+高度定制化
    • 2. 支持伪类写法
    • 3. 强大的响应式
  • 三、相关辅助插件推荐
    • 1. Tailwind CSS IntelliSense 补全+提示
    • 2. 加强可读性-headwind (vscode)
    • 3. clsx的额外拓展
    • 4. tailwind-merge
  • 四、实战可能的问题
    • 1. Design tokens 与 Tailwindcss 结合使用
    • 2. 动态样式
    • 3. 公共样式的复用问题
  • 总结

一、TailwindCss功能展示

相信看了上图+以下效果之后,就了解这个库了,实质就是对于css写法进行优化的库,让开发重点关注html页面编写,不必将关注点切到css文件
在这里插入图片描述

二、有什么优势?

1. 原子化css+高度定制化

原子化即指单一原则,针对最小单位的css,它只对应一条具体的样式。
而TailwindCSS其实就是一个聚合了很多个原子类的库,提供了大量系统预设类名
在这里插入图片描述

2. 支持伪类写法

例如hover:focus:等,效果如下:在这里插入图片描述
而平常使用的内联Style中无法支持 ,也就是 hover: 等状态下的样式,必须在另外的css文件中编写。

3. 强大的响应式

TailwindCSS 提供响应式处理,例如sm:md:lg:,实现在不同宽度屏幕下的样式
产物单位会自动转换成rem,当然也可以是其它比如em或者px等。

tailwindcss vs 手写媒体查询
同样是实现多列布局对各个屏幕尺寸大小的适配,左右对比一下,可见优劣

  • display: grid: 使用grid布局
  • grid-cols-x:表示每行有x个

在这里插入图片描述
是不是少写很多行代码,懒癌党狂喜~~

对于需要特定数值的样式如宽高、字体大小和边距等,TailwindCSS提供的工具类默认为响应式,如 p-4 实际上是padding: 1rem。而对于特定值可以这样用:p-[12px],bg-[#fff]。
也可以在配置文件手动预设一些值。

三、相关辅助插件推荐

1. Tailwind CSS IntelliSense 补全+提示

官方给用户贴心地提供了对应的vscode插件,可以快速选择并提示css原用法:

在这里插入图片描述

2. 加强可读性-headwind (vscode)

  • 竖着写
  • headwind自动排序className
    - 'px-4 bg-blue-500 rounded  py-2

3. clsx的额外拓展

  • 基本拼接:将多个类名直接拼接
import clsx from 'clsx';
const MyComponent = () => {const classes = clsx('class1', 'class2');return <div className={classes}>{'这是一个带有组合类名的元素'}</div>;
};
export default MyComponent;
  • 条件拼接:可根据特定条件动态拼接,默认为true时拼接false时不做拼接
import clsx from 'clsx';
const MyButtonComponent = ({ isActive }) => {const classes = clsx('button', { 'active': isActive });return <button className={classes}>{'这是一个按钮'}</button>;
};
export default MyButtonComponent;
  • 多条件拼接:支持同时拼接多个条件的类名,原理同上
import clsx from 'clsx';
const MyButtonComponent = ({ isActive, isLarge }) => {const classes = clsx('button', {'active': isActive,'large': isLarge});return <button className={classes}>{'这是一个按钮'}</button>;
};
export default MyButtonComponent;

4. tailwind-merge

解决多个原子CSS结合时的冲突,可以清除冗余的类名,只保留最后生效的。

import clsx from 'clsx';
import { twMerge } from 'tailwind-merge'const MyComponent = () => {const classes = twMerge('px-2 py-1 bg-red hover:bg-green', 'p-3 bg-[#ffffff]');return <div className={classes}>{'组合类'}</div>;/*'hover:bg-green p-3 bg-[#ffffff]'*/
};
export default MyComponent;

可与clsx结合使用:twMerge(clsx( ))

四、实战可能的问题

1. Design tokens 与 Tailwindcss 结合使用

design-tokens.json:

{"color": {"primary": "#4f46e5","secondary": "#ec4899"},"spacing": {"small": "8px","medium": "16px","large": "24px"}
}

配置文件tailwindcss.config.js

const designTokens = require('./design-tokens.json');module.exports = {theme: {colors: {primary: designTokens.color.primary,secondary: designTokens.color.secondary},spacing: {sm: designTokens.spacing.small,md: designTokens.spacing.medium,lg: designTokens.spacing.large}}
};

2. 动态样式

  • 控制单条样式
    例如用isTrue控制borderpy
const Button = ({ isTrue }) => {return (<buttonclassName={`${isTrue ? 'border-[1px]' : 'border-2'}${isTrue ? 'py-1' : 'py-3'}`}>label</button>)
}
  • 失效写法
    此时使用变量来控制盒子宽度和字体颜色就会失效了:
const Div = ({ width, color }) => {return <div className={`w-[${width}px] text-${color}`}></div>
}

以上写法暂不支持,样式会失效,是因为TailwindCSS是在构建时按需生成类名以及相应的样式,这种运行时生成的无法被检测到。

正确写法:

const Div = ({ width, color }) => {return <div className="..." style={{ width, color }}></div>
}

3. 公共样式的复用问题

设计初衷:不要过早抽象,相对独立维护

官方的推荐做法
重复多使用jsx+循环,也可以利用代码编辑器快速同时编辑多个className
在这里插入图片描述

总结

tailwindcss:

  1. 关注当前页面,不必关注类名
  2. 高效处理响应式和伪类
  3. 与内联style类似,各样式独立,不必担心复用问题,维护性强

tip:

常用工具类普遍好记,如grid就是 display: gird , relative就是 position: relative , 但是有一些css和tailwindcss写法出入比较大的,比如width,写法 w-[100px]
可以边写边在官方文档ctrl+k查找,基本两遍也就记住了~
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《基于深度学习的指纹识别智能门禁系统》开题报告

个人主页&#xff1a;大数据蟒行探索者 1研究背景 1.1开发目的和意义 指纹识别作为生物特征识别领域的一项重要技术&#xff0c;在安全认证、犯罪侦查和个人身份验证等方面具有广泛应用前景。随着深度学习技术的迅猛发展&#xff0c;基于深度学习的指纹识别系统成为了当前研究…

WSL Linux 子系统download

WSL各Linux 子系统下载 WSL Linux 最新下载 微软应用商店 | Microsoft StoreWSL Linux 历史版下载复制应用商店Linux地址到转换下载地址https://store.rg-adguard.net/ Version百度网盘离线下载OracleLinux提取

Java替换jar包中class文件

在更新java应用版本的运维工作中&#xff0c;由于一些原因&#xff0c;开发没办法给到完整的jar包&#xff0c;这个时候&#xff0c;就可以只将修改后的某个Java类的class文件替换掉原来iar包中的class文件&#xff0c;重新启动服务即可&#xff1a; 1、将jar包和将要替换的cl…

23种设计模式-创建型模式-抽象工厂

文章目录 简介场景问题1. 风格一致性失控2. 对象创建硬编码3. 产品族管理失效 解决总结 简介 抽象工厂是一种创建型设计模式&#xff0c;可以生成相关对象系列&#xff0c;而无需指定它们的具体类。 场景 假设你正在写一个家具店模拟器。 你的代码这些类组成&#xff1a; 相…

修改服务器windows远程桌面默认端口号

修改服务器windows远程桌面默认端口号 在Windows服务器上修改远程桌面协议&#xff08;RDP&#xff09;的默认端口&#xff08;3389&#xff09;可以增强服务器的安全性&#xff0c;减少被恶意扫描和攻击的风险。以下是修改远程端口的详细步骤&#xff1a; 按 Win R 打开运行…

【MySQL】 基本查询(上)

欢迎拜访&#xff1a;-CSDN博客 本篇主题&#xff1a;【MySQL】 基本查询(上) 发布时间&#xff1a;2025.2.14 隶属专栏&#xff1a;MySQL CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 目录 Create 基本知识…

Vue3(自定义指令directive详解)

文章目录 前言一、自定义指令的生命周期钩子二、自定义指令的创建与注册使用三、扩展 简化形式​总结 前言 在Vue3中&#xff0c;自定义指令是一种强大的工具&#xff0c;允许开发者扩展和增强HTML元素的功能。以下是对Vue3中自定义指令的详细解析&#xff1a; 一、自定义指令…

进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)

题单地址&#xff1a;题单中心-东方博宜OJ 这里以二进制转十进制为例&#xff08;按位加权求和法&#xff09; 1290. 二进制转换十进制 问题描述 请将一个 25 位以内的 2 进制正整数转换为 1010 进制&#xff01; 输入 一个 25 位以内的二进制正整数。 输出 该数对应的…

个人博客系统 --- 测试报告

一、项目功能介绍 该项目由&#xff1a;登录模块、博客首页模块、博客详情页模块、博客编辑页模块四个功能模块组成。 该系统实现了个人博客的保存以及记录了发布日期、时间、发布人等信息。 二、测试内容与测试用例 我们需要对该系统进行功能测试&#xff0c;界面测试&…

从入门到精通【MySQL】 CRUD

文章目录 &#x1f4d5;1. Create 新增✏️1.1 单行数据全列插入✏️1.2 单行数据指定列插入✏️1.3 多行数据指定列插入 &#x1f4d5;2. Retrieve 检索✏️2.1 全列查询✏️2.2 指定列查询✏️2.3 查询字段为表达式✏️2.4 为查询结果指定别名✏️2.5 结果去重查询 &#x1f…

C++ 继承

目录 一、继承的概念与定义 1.1 继承的概念 1.2 继承的定义 1.2.1 语法 1.2.2 继承关系和访问限定符 1.2.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、C11 final 六、继承与友元 七、继承与静态成…

Python及PyCharm配置教程:从零开始搭建开发环境

引言 Python作为一门简单易学、功能强大的编程语言&#xff0c;近年来在数据分析、人工智能、Web开发等领域得到了广泛应用。而PyCharm作为一款专为Python开发者设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了丰富的功能和工具&#xff0c;能够极大地提高开…

python网络爬虫开发实战之网页数据的解析提取

目录 1 XPath的使用 1.1 XPath概览 1.2 XPath常用规则 1.3 准备工作 1.4 实例引入 1.5 所有节点 1.6 节点 1.7 父节点 1.8 属性匹配 1.9 文本获取 1.10 属性获取 1.11 属性多值匹配 1.12 多属性匹配 1.13 按序选择 1.14 节点轴选择 2 Beautiful Soup 2.1 简介…

【AI】Orin Nano+ubuntu22.04上移植YoloV11,并使用DeepStream测试成功

1、准备工作 使用 sdk-manager 烧写 OrinNano, JetPack版本为6.0 DP,对应操作系统为:Ubuntu22.04 参见博客:【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04 2、安装 PyTorch 2.1 下载依赖 1)安装onnx pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/sim…

在coze工作流中将数据回写到飞书表格

在coze工作流中将数据回写到飞书表格

datawhale组队学习-大语言模型-task5:主流模型架构及新型架构

目录 5.3 主流架构 5.3.1 编码器-解码器架构 5.3.2 因果解码器架构 5.3.3 前缀解码器架构 5.4 长上下文模型 5.4.1 扩展位置编码 5.4.2 调整上下文窗口 5.4.3 长文本数据 5.5 新型模型架构 5.5.1 参数化状态空间模型 5.5.2 状态空间模型变种 5.3 主流架构 在预训…

stc8g1k08a+cd4017红绿灯

2,4脚供电,567脚控制三个灯,另外三只脚控制cd4017脉冲输入,复位清零和数码管共阴极 数字只能显示一位0-9 hex文件 蓝奏云 main.c sfr p5 0xc8;//p5端口寄存器 sfr P5M1 0xc9;//p5端口m1配置寄存器 sfr P5M0 0xca;//p5端口m0配置寄存器 sbit p54 p5^4;//p5.4端口 sbit p5…

【MySQL】基本查询(表的增删查改+聚合函数)

目录 一、Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 二、Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 比较运算符2.2.2 逻辑运算符2.2.3 案…

Qt中通过QLabel实时显示图像

Qt中的QLabel控件用于显示文本或图像&#xff0c;不提供用户交互功能。以下测试代码用于从内置摄像头获取图像并实时显示&#xff1a; Widgets_Test.h&#xff1a; class Widgets_Test : public QMainWindow {Q_OBJECTpublic:Widgets_Test(QWidget *parent nullptr);~Widgets…

缓存监控治理在游戏业务的实践和探索

作者&#xff1a;来自 vivo 互联网服务器团队- Wang Zhi 通过对 Redis 和 Caffeine 的缓存监控快速发现和定位问题降低故障的影响面。 一、缓存监控的背景 游戏业务中存在大量的高频请求尤其是对热门游戏而言&#xff0c;而应对高并发场景缓存是一个常见且有效的手段。 游戏业…