我是🏅有6年前端及跨平台开发经验、掘金/51CTO活跃作者、曾独立设计混开框架和重构方案并顺利落地 de 小鑫同学。
在热火朝天的前端框架演进的进程中,大多数的人都把目光关注到了 JavaScript / TypeScript 的身上,TailwindCSS作为最有争议但也是最受欢迎的一个 CSS 框架的产品我们也来看一下它到底好不好用,有什么优势~
yarn create vite
npm install -D tailwindcss@latest postcss@latest autoprefixer@latest
npx tailwindcss init -p
tailwindcss 3.x 版本的配置文件:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./index.html",
"./src/**/*.{vue,js,ts,jsx,tsx}",
],
darkMode: 'media',
theme: {
extend: {},
container: {
center: true,
}
},
plugins: [],
}
src\styles\index.css
@tailwind base;
@tailwind components;
@tailwind utilities;
src\styles\index.scss
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
全局样式文件在main.ts中导入:
import { createApp } from 'vue'
import App from './App.vue'
// 导入全局样式文件
import './styles/index.scss'
createApp(App).mount('#app')
@tailwind
、@apply
、@screen
。.vue
、.html
文件中使用@apply
仍提示未知规则,建议在已安装以上插件后再添加工作区配置禁止掉这个提示:{
"css.lint.unknownAtRules": "ignore"
}
yarn add -D cssnano
配置插件:
module.exports = {
plugins: {
// 其他插件
// cssnano 按需加到插件列表末尾
...(process.env.NODE_ENV === 'production' ? { cssnano: {} } : {})
},
}
在Chrome、Firefox、Edge 和 Safari 的最新稳定版本适配良好,但由于部分API不支持IE全部版本,所以强烈不建议在IE浏览器使用。
在一组受约束的原始功能类的基础上构建复杂的组件。
<!-- 设置flex布局、交叉轴对齐方式、背景色、圆角、阴影、内边距、子元素间距、最大宽度、水平居中 -->
<div class="">
<!-- flex布局时禁止收缩 -->
<div class="">
<!-- 设置图像的宽度、高度 -->
<img class="" src="./assets/logo.png" alt="" />
</div>
<!-- flex布局时禁止收缩 -->
<div class="">
<!-- 设置字体大小、权重、颜色 -->
<div class="">ChitChat</div>
<!-- 设置字体颜色 -->
<p class="">You have a new messaeg!</p>
</div>
</div>
<div class="flex items-center bg-white rounded-xl shadow-md p-6 space-x-4 max-w-sm mx-auto">
<div class="flex-shrink-0">
<img class="w-12 h-12" src="./assets/logo.png" alt="" />
</div>
<div class="flex-shrink-0">
<div class="text-xl font-medium text-black">ChitChat</div>
<p class="text-gray-500">You have a new messaeg!</p>
</div>
</div>
从上面的例子可以看出,使用 Tailwind 后代码的风格趋于内联样式的编写,也带来的阅读的烦恼,解决这样的问题提供了下面两个常用的方法:
下面的两张设计图是在不同浏览器尺寸的下分别应该显示的样式,在 Tailwind 中提倡移动端优先的理念,我们应该使用不带任何断点的功能类来实现移动端应该显示的风格,在浏览器尺寸变化到下一个断点的时候来调整为 PC 端显示的布局。
断点前缀 | 最小宽度 | 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) { ... } |
下面的代码注释和 clss 设置的功能类相对应:
<!-- 移动端优先设置:最大宽度、容器居中、背景色、圆角、阴影 -->
<!-- MD断点处改变:最大宽度 -->
<div class="max-w-md mx-auto bg-yellow-50 rounded-xl shadow-md md:max-w-2xl">
<!-- 移动端优先默认设置 -->
<!-- MD断点处改变:flex布局 -->
<div class="md:flex">
<!-- 移动端优先默认设置 -->
<!-- MD断点处改变:禁止布局收缩 -->
<div class="md:flex-shrink-0">
<!-- 移动端优先设置:固定高度、100%宽度、原比例裁剪、顶部圆角 -->
<!-- MD断点处改变:100%高度、固定宽度、取消顶部圆角、设置左边圆角 -->
<img
class="h-48 w-full object-cover md:h-full md:w-48 rounded-t-xl md:rounded-t-none md:rounded-l-xl"
src="https://images.unsplash.com/photo-1637734433731-621aca1c8cb6?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=404&q=80"
alt="Man looking at item at a store"
/>
</div>
<!-- 设置:容器内边距 -->
<div class="p-8">
<!-- 设置:字体大小、间距、权重、颜色 -->
<div class="text-sm tracking-wide font-semibold text-indigo-500">Case Study</div>
<!-- 设置:块元素、顶部外边距、字体大小、权重、颜色 -->
<a class="block mt-1 text-lg font-medium text-black" href="#">
Finding customers for your new business
</a>
<!-- 设置:顶部外边距、字体颜色 -->
<p class="mt-2 text-slate-500">
Getting a new business off the ground is a lot of hard work. Here are five ideas you can use to
find your first customers.
</p>
</div>
</div>
</div>
自定义的断点可能更加符合自己项目的使用习惯,用新定义的替换到默认的断点前缀即可:
/** tailwind.config.js */
module.exports = {
theme: {
screens: {
'tablet': '640px',
'laptop': '1024px',
'desktop': '1280px',
}
}
一开始使用 TailwindCSS 确实会有一些别扭,但是当我们在开发一些无法使用 UI 库的项目是就不得不面临编写大量 css 文件,还得考虑响应式布局,黑暗模式等等,但是这些对于 TailwindCSS 来说将是简单的,TailwindCSS 的下载量也决定了它也是绝对受欢迎的一个产品。