Tailwind CSS
约 4 分钟阅读
- tailwindlabs/tailwindcssGitHubtailwindlabs/tailwindcsstailwindlabs/tailwindcss 是什么? · CSS 样式工具集 - 通过 class 名字来组合样式 · 将样式原子化 · 高度定制化 - 颜色、大小、breackpoint、extend 等等 · prune 可缩减大小 - 默认 未压缩 3.8 MB,Minified 3 MB, Gzip 300 KB, Brotli 75 KB笔记:Tailwind CSS 是什么?
- CSS 样式工具集 - 通过 class 名字来组合样式
- 将样式原子化
- 高度定制化 - 颜色、大小、breackpoint、extend 等等
- prune 可缩减大小 - 默认 未压缩 3.8 MB,Minified 3 MB, Gzip 300 KB, Brotli 75 KB
- 问题
- storybookjs/storybook#12668GitHub Issuestorybookjs/storybook#12668 - PostCSS 8 兼容问题
- 参考
- 嵌套 group - v3.2+
group/NAME
- 支持 Container Query - v3.2+
@container,@lg:p-8- @tailwindcss/container-queriesGitHubtailwindlabs/tailwindcss-container-queries
- 支持任意选择 - v3.1+
[&>*]:text-red[&_thead_th:first-child]:text-red[&:[data-open]]:underline
- 支持任意值 - v3.0+
w-[30px]w-[calc(100%-30px)]
- tailwindcss v3 要求 postcss 8+
Container queries #1563GitHub Issuetailwindlabs/tailwindcss#1563不支持嵌套 group #1192GitHub Issuetailwindlabs/tailwindcss#1192- rem to px #1232GitHub Issuetailwindlabs/tailwindcss#1232
# 直接使用命令行构建
pnpx @tailwindcss/cli -i ./src/app/globals.css -o dist/globals.css
# 基础依赖
npm add tailwindcss postcss autoprefixer
# 初始化配置
# postcss.config.js tailwind.config.js
npx tailwindcss init -p
# 包含默认配置
# https://unpkg.com/browse/[email protected]/stubs/config.full.js
npx tailwindcss init --full
# 自行构建
npx tailwind build ./src/styles/tailwind.css -o ./public/tailwind.css
# 持续构建
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watchPackagestailwindcssnpm PackagetailwindcssNPMpostcssnpm PackagepostcssNPMautoprefixernpm PackageautoprefixerNPM
// 预构建好的 css
import 'tailwindcss/dist/tailwind.css';
// 基于 PostCSS 的 css
import 'tailwindcss/tailwind.css';plugins
- @tailwindcss/typography
- prose
- not-prose
- 用于 CMS 文章内容
- styles.jsGitHub Filetailwindlabs/tailwindcss-typography/src/styles.js
- @tailwindcss/formsGitHubtailwindlabs/tailwindcss-forms
- input, select, textare
- tailwindcss-forms.vercel.app
- @tailwindcss/line-clampGitHubtailwindlabs/tailwindcss-line-clamp
- line-clamp-{lines}
- 截取文字到多少行
- @tailwindcss/aspect-ratio
- v3 已经包含 aspect-ratio 工具
- aspect-w-16, aspect-h-9
plugin
- layers
- base
- typography
- font-face
- utilities
- components
- base
const plugin = require('tailwindcss/plugin');
const MyPlugin = plugin(
function ({
addUtilities,
addComponents,
matchUtilities,
matchComponents,
addBase,
addVariant,
matchVariant,
theme,
corePlugins,
// escaping strings
e,
// looking up Tailwind configuration
config,
variants,
postcss,
}) {
// 静态
addUtilities({
'.content-auto': {
'content-visibility': 'auto',
},
});
// 动态
// tab-1 tab-[123]
matchUtilities(
{
tab: (value) => ({
tabSize: value,
}),
},
{ values: theme('tabSize') },
);
// base 层
addBase({
h1: { fontSize: theme('fontSize.2xl') },
h2: { fontSize: theme('fontSize.xl') },
h3: { fontSize: theme('fontSize.lg') },
});
// 组件层
addComponents({
'.card': {
backgroundColor: '#fff',
borderRadius: '.25rem',
boxShadow: '0 2px 4px rgba(0,0,0,0.2)',
'&:hover': {
boxShadow: '0 10px 15px rgba(0,0,0,0.2)',
},
'@media (min-width: 500px)': {
borderRadius: '.5rem',
},
},
});
// 修饰
addVariant('optional', '&:optional');
addVariant('hocus', ['&:hover', '&:focus']);
addVariant('supports-grid', '@supports (display: grid)');
addVariant('group-optional', ':merge(.group):optional &');
addVariant('peer-optional', ':merge(.peer):optional ~ &');
},
// 插件配置
function (options) {
// 可以接受配置
return {
theme: {
tabSize: {
1: '1',
2: '2',
4: '4',
8: '8',
},
},
};
},
);
module.exports = {
plugins: [MyPlugin],
};container query
- 支持 Container Query - v3.2+
@container,@lg:p-8- 自定义
@[17.5rem]:underline
- 自定义
@container/main,@lg/main:underline- 命名容器@container-normal元素不作为 container- @tailwindcss/container-queriesGitHubtailwindlabs/tailwindcss-container-queries
- Chrome v106+, Safari 16.0+ 2022-09
module.exports = {
theme: {
extend: {
containers: {
'2xs': '16rem',
},
},
},
};tailwind.css
@tailwind base;
@tailwind components;
@tailwind utilities;tailwind.config.js
- 配置
- 默认配置 config.full.js
- 84 颜色
- 5 breakpoint
- tailwindcss.com/docs/configuration
- Theme
module.exports = {
// 裁剪的基础用法
purge: ['./src/**/*.html', './src/**/*.vue', './src/**/*.jsx'],
purge: {
enabled: false, // 是否裁剪不必要的定义
preserveHtmlElements: true, // 是否保留 HTML 元素基础样式
layers: ['components', 'utilities'], // 裁剪层
mode: 'all', // 是否裁剪所有未用到的定义 - 不建议
content: ['./src/**/*.html'],
// PurgeCSS 直接传入参数
options: {
safelist: [
'bg-red-500',
'px-4',
{
pattern: /bg-(red|green|blue)-(100|200|300)/,
variants: ['lg', 'hover', 'focus', 'lg:hover'],
},
],
},
},
// 禁用插件可减少大小
corePlugins: {
float: false,
},
// 或者指定需要的插件
corePlugins: ['margin', 'padding'],
};Patterns
- 避免内容溢出
- 实现虚拟滚动窗口
<div className='flex flex-col'>
<header></header>
<div className='flex-1 min-h-0 relative'>
<div className='absolute inset-0'>content</div>
</div>
<footer></footer>
</div>JIT
- 颜色组合 -
bg-<color>/<opacity> - 任意值 -
w-[20px] - 临近节点选择 -
peerpeer-checked:bg-blue-500 - 简化使用 - transform, filter, backdrop-filter 直接使用
- 设置 content -
before:content-['hello']
<div data-content="hello world" class="before:content-[attr(data-content)] before:block"></div>important
!前缀
<p class="font-bold !font-medium sm:hover:!tw-font-bold">
This will be medium even though bold comes later in the CSS.
</p>styled-jsx
npm add styled-jsx-plugin-postcssPackagesstyled-jsx-plugin-postcssnpm Packagestyled-jsx-plugin-postcssNPM
{
"presets": [
[
"next/babel",
{
"styled-jsx": {
"plugins": ["styled-jsx-plugin-postcss"]
}
}
]
]
}- styled-jsx 使用 @apply #1234GitHub Issuetailwindlabs/tailwindcss#1234
命名分组/嵌套分组
- group-2, group-2-hover
const plugin = require('tailwindcss/plugin');
module.exports = {
theme: {
groups: ['2', '3'],
},
plugins: [
plugin(({ addVariant, theme }) => {
const groups = theme('groups') || [];
groups.forEach((group) => {
addVariant(`group-${group}-hover`, () => {
return `:merge(.group-${group}):hover &`;
});
});
}),
],
};snippets
.absolute-center {
@apply absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2;
}nesting
- WebStrom: Language&Framework > Style Sheets > Dialects
module.exports = {
plugins: {
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {},
},
};选择直接子元素
<ul class="children:p-4">
<li>A</li>
</ul>module.exports = {
theme: {
extend: {},
},
plugins: [
function ({ addVariant }) {
addVariant('children', '& > *');
},
],
};关联信息
反向链接、本文链接的其他页面和外部资料。
反向链接
- Ant Design笔记 · tailwindcss
ant-design/ant-design · 丰富强大的组件库 · 不建议产品使用 - 除非是后台管理系统 · 参考 · 推荐使用 react-component,antd 的基础库 · 非常适用于 快速 出原型和结果 · 非常适用于 内部系统 / 后台管理系统
References
GitHub13 条
- tailwindlabs/tailwindcss-container-queriesgithub.com/tailwindlabs/tailwindcss-container-queries
- dgknca/tailwindcss-container-querygithub.com/dgknca/tailwindcss-container-query
- storybookjs/storybook#12668github.com/storybookjs/storybook/issues/12668
- tailwindlabs/tailwindcssgithub.com/tailwindlabs/tailwindcss
- tailwindlabs/tailwindcss-formsgithub.com/tailwindlabs/tailwindcss-forms
- tailwindlabs/tailwindcss-line-clampgithub.com/tailwindlabs/tailwindcss-line-clamp
- tailwindlabs/tailwindcss-typography/src/styles.jsgithub.com/tailwindlabs/tailwindcss-typography/blob/master/src/styles.js
- tailwindlabs/tailwindcss/stubs/config.full.jsgithub.com/tailwindlabs/tailwindcss/blob/master/stubs/config.full.js
- tailwindlabs/tailwindcss#1192github.com/tailwindlabs/tailwindcss/issues/1192
- tailwindlabs/tailwindcss#1232github.com/tailwindlabs/tailwindcss/issues/1232
- tailwindlabs/tailwindcss#1234github.com/tailwindlabs/tailwindcss/issues/1234
- tailwindlabs/tailwindcss#1563github.com/tailwindlabs/tailwindcss/issues/1563
- tailwindlabs/tailwindcss#8299github.com/tailwindlabs/tailwindcss/pull/8299
其他外链6 条
- tailwindcss.com/docs/configurationtailwindcss.com/docs/configuration
- miyauchi.dev/posts/lib-vite-tailwindcssmiyauchi.dev/posts/lib-vite-tailwindcss
- play.tailwindcss.com/h7eDGStsE9?file=configplay.tailwindcss.com/h7eDGStsE9?file=config
- tailwindcss-forms.vercel.apptailwindcss-forms.vercel.app/
- tailwindcss.com/docs/themetailwindcss.com/docs/theme
- unpkg.com/browse/[email protected]/stubs/config.full.jsunpkg.com/browse/[email protected]/stubs/config.full.js