快速入门Tailwind CSS:CSS原子化的力量
开篇
在前端开发中,样式表(CSS)扮演着至关重要的角色,它定义了网页的外观和布局。然而,管理庞大的 CSS 代码库往往变得复杂而困难。为了解决这个问题,一种被称为 “CSS 原子化” 的技术应运而生。CSS 原子化通过将样式拆分为独立的、可复用的类名,提供了一种高度可定制且易于维护的方式来构建网页样式。本文将深入探讨 CSS 原子化的概念,并展示如何利用它提高前端开发效率。
什么是 CSS 原子化(Atomic CSS)?
CSS 原子化是一种将样式拆分成小块、原子级别的类名,并通过组合这些类名来构建网页样式的方法。每个类名只包含一个样式属性及其对应的值。通过在 HTML 元素上添加这些类名,可以实现对样式的精确控制。
代码示例:
假设我们有一个简单的按钮组件,需要定制其颜色、边框和边距。传统的方法是为每个样式属性创建一个类名,然后将它们应用于按钮元素。使用 CSS 原子化,我们可以将每个样式属性拆分为独立的类名,并根据需要组合它们。下面是一个示例:
1 |
|
1 |
|
在上述示例中,我们通过组合类名来定制按钮的样式。.btn 类名包含了共享的样式,如 display 和 border-radius。.bg-blue 类名定义了按钮的背景颜色为蓝色,.border-red 类名定义了按钮的边框为红色,.p-2 类名定义了按钮的内边距为 0.5rem。
优点
通过采用 CSS 原子化的方法,我们可以获得以下几个好处:
可重用性:原子级别的类名可以在不同的元素之间共享,减少了代码的冗余和重复。
精确控制:通过组合类名,我们可以精确地控制每个样式属性的值,使其适应各种不同的设计需求。
易于维护:将样式拆分为原子级别的类名,使得样式的修改和维护更加直观和简单。
开发效率:使用预定义的类名,开发人员可以更快速地构建样式,减少了样式编写的时间成本。
缺点
学习曲线:理解和使用原子化 CSS 可能需要一些学习曲线。由于需要记忆和组合大量的类名。
可读性和维护性:尽管原子化 CSS 的类名具有一定的语义性,但它们往往是非常简洁和抽象的,可能对其他开发人员或团队成员来说不够直观。这可能会影响代码的可读性和维护性,特别是在项目变得复杂时。
文件大小增加:由于每个类名只包含一个样式属性及其对应的值,因此需要大量的类名来表示不同的样式组合。这可能会增加 CSS 文件的大小,尤其是在应用了大量样式的情况下。
小结
CSS 原子化是一种强大的前端开发技巧,它通过将样式拆分为原子级别的类名,提供了一种高度可定制且易于维护的方式来构建网页样式。通过合理地组合这些类名,我们可以实现精确控制、代码的可重用性和更高的开发效率。
框架
了解了CSS原子化的概念后,可以知道对于在一个应用或多个应用中使用该方案的话,需要有一套灵活和全面的css文件作为积累,同时并不是所有的css类都会在项目中使用,
这样就会产生大量的多余代码,不利于控制项目的尺寸。
针对上面的限制,目前已经产出了几个CSS的框架,通过特定的规则来避免限制,并保留CSS原子化的优点
Tailwind CSS
本 CSS 框架本质上是一个工具集,包含了大量类似 flex、 pt-4、 text-center 以及 rotate-90 等工具类,可以组合使用并直接在 HTML 代码上实现任何 UI 设计。
- 它是基于postcss进行扩展,可以说它是postcss的一个插件。
- 封装了常用的css属性,每一条css属性就是对应一个class的名字
安装(基于vue)
安装依赖
1 |
|
创建postcss配置文件 postcss.config.js
1 | // postcss.config.js 文件 |
修改 tailwind.config.js 文件
1 |
|
引入css文件
1 |
|
1 |
|
开启监听代码变化自动编译
主要是通过
cross-env设置环境变量TAILWIND_MODE=watch
1 |
|
编码
tailwindcss 按照功能对部分类名进行缩写,需要有一定的记忆成本,比如以下(仅列举部分,具体可在快速查询网页进行查询):
Box Sizing
| ClassName | 编译结果 |
|---|---|
box-border |
box-sizing: border-box; |
box-content |
box-sizing: content-box; |
Display
| ClassName | 编译结果 |
|---|---|
block |
display: block; |
flex |
display: flex; |
inline-flex |
display: inline-flex; |
以上仅列举部分,但是写法都是这样的
Overflow
| ClassName | 编译结果 |
|---|---|
overflow-auto |
overflow: auto; |
overflow-hidden |
overflow: hidden; |
overflow-visible |
overflow: visible; |
overflow-x-hidden |
overflow-x: hidden; |
以上仅列举部分,但是写法都是这样的
Position
| ClassName | 编译结果 |
|---|---|
static |
position: static; |
absolute |
position: absolute; |
Top / Right / Bottom / Left
| ClassName | 编译结果 |
|---|---|
inset-0 |
top: 0px; right: 0px; bottom: 0px; left: 0px; |
inset-x-0 |
left: 0px; right: 0px; |
-inset-y-10 |
top: -10px; bottom: -10px; |
top-10 |
top: 10px; |
-top-10 |
top: -10px; |
响应式查询
默认提供了一下几个尺寸的代表
| 前缀 | 最小宽度 | CSS代码 |
|---|---|---|
sm |
640px | @media (min-width: 640px) { ... } |
md |
768px | @media (min-width: 768px) { ... } |
lg |
1024px | @media (min-width: 1024px) { ... } |
xl |
1280px | @media (min-width: 1280px) { ... } |
2xl |
1536px | @media (min-width: 1536px) { ... } |
在配置文件中的如下配置可以添加自己的配置
1 |
|
1 | <div class="w-full h-full bg-red-600 p2x:bg-green-900 sm:bg-black md:bg-gray-300 lg:bg-blue-900"></div> |
上面的div在不同的屏幕宽度下,颜色也不一样 官网例子
特殊选择器(Hover, Focus等)
通过一下方式 hover:className进行指定如下面的代码
1 | <button class="bg-black-500 hover:bg-red-700 text-white ..."> |
具体可看官网例子
开发帮助
在vs code中,安装 Tailwind CSS IntelliSense 插件,即可拥有智能代码提示:自动补全、语法检查、悬停预览、语法高亮显示;
