- 将现代/未来特性转换为可在所有浏览器上运行的代码(包括添加厂商前缀)
- 压缩
- CSS 模块
- Tailwind(通过原生打包工具插件)
转译
默认启用转译和厂商前缀处理,因此你可以使用现代及未来的 CSS 特性,而无需担心浏览器兼容性。 Bun 的 CSS 解析器和打包器直接移植自 LightningCSS,其打包方式受 esbuild 启发。转译器会将现代 CSS 语法转换为向后兼容的等效写法,使其能够在各种浏览器中正常运行。感谢 LightningCSS 和 esbuild 的作者所做的工作。
浏览器兼容性
默认情况下,Bun 的 CSS 打包目标浏览器包括:- ES2020
- Edge 88+
- Firefox 78+
- Chrome 87+
- Safari 14+
语法降级
嵌套
借助 CSS 嵌套,你可以直接在父级代码块中编写子级样式,而无需在 CSS 文件中重复父级选择器。styles.css
styles.css
styles.css
styles.css
颜色混合
color-mix() 函数会在所选色彩空间中按给定比例混合两种颜色。使用它可以创建颜色变体,而无需自行计算结果值。
styles.css
styles.css
相对颜色
相对颜色语法可以修改现有颜色的单个组成部分。无需重新计算整个颜色,即可调整亮度、饱和度或单独的颜色通道。styles.css
styles.css
LAB 颜色
现代 CSS 支持感知均匀的颜色空间 LAB、LCH、OKLAB 和 OKLCH,它们可以表示超出标准 RGB 色域的颜色。styles.css
styles.css
颜色函数
color() 函数可以在传统 RGB 之外的预定义色彩空间中指定颜色,让你能够使用更宽的色域。
styles.css
styles.css
HWB 颜色
HWB(色相、白度、黑度)颜色模型基于纯色相中混合了多少白色或黑色来表示颜色。与 RGB 或 HSL 值相比,使用这种方式可以更直接地创建浅色和深色变体。styles.css
styles.css
颜色表示法
现代 CSS 支持使用空格分隔的 RGB 和 HSL 值(不带逗号),以及带 alpha 通道的十六进制颜色。styles.css
styles.css
light-dark() 颜色函数
light-dark() 函数接受两种颜色,并根据当前颜色方案应用其中一种,使样式无需使用媒体查询即可遵循用户的系统偏好。
styles.css
light-dark() 的浏览器,Bun 的 CSS 打包器会将其转换为带有回退值的 CSS 变量:
styles.css
逻辑属性
CSS 逻辑属性根据文档的书写模式和文本方向,而不是屏幕的物理方向来定义布局、间距和尺寸,因此布局可以适应不同的书写系统。styles.css
styles.css
:dir() 选择器,Bun 会生成额外的回退方案。
:dir() 选择器
:dir() 伪类根据元素的文本方向(RTL 或 LTR)设置样式,该方向由文档或显式的 direction 属性决定。使用它可以编写无需 JavaScript 的方向感知样式。
styles.css
:dir() 选择器的浏览器,Bun 的 CSS 打包器会将其转换为兼容性更广的 :lang() 选择器,并使用适当的语言映射:
styles.css
:lang() 传入多个参数,Bun 会生成进一步的回退方案。
:lang() 选择器
:lang() 伪类根据元素的语言定位元素。要为相关语言组合规则,可以向单个 :lang() 传入多个语言代码。
styles.css
:lang() 选择器中使用多个参数的浏览器,Bun 的 CSS 打包器会将此语法转换为行为相同的 :is() 选择器:
styles.css
:is() 生成额外的回退方案。
:is() 选择器
:is() 伪类函数(之前称为 :matches())接收一个选择器列表,如果列表中的任意选择器匹配,则匹配成功。
styles.css
:is() 的浏览器,Bun 的 CSS 打包工具提供使用厂商前缀的替代写法:
:not() 选择器
:not() 伪类会排除匹配某个选择器的元素。现代版本支持多个参数,可以通过一个 :not() 排除多种模式。
styles.css
:not() 中多个参数的浏览器,Bun 的 CSS 打包器会将此语法转换为行为相同且兼容性更好的形式:
styles.css
:is(),Bun 会生成进一步的回退:
styles.css
数学函数
CSS 包含标准数学函数(round()、mod()、rem()、abs()、sign())、三角函数(sin()、cos()、tan()、asin()、acos()、atan()、atan2())以及指数函数(pow()、sqrt()、exp()、log()、hypot())。
styles.css
styles.css
媒体查询范围
媒体查询范围语法使用比较运算符(<、>、<=、>=)表示断点,而不是使用更冗长的 min- 和 max- 前缀。
styles.css
styles.css
简写属性
CSS 引入了几种将多个长属性组合在一起的简写属性。styles.css
styles.css
双位置渐变
双位置渐变语法会在两个相邻位置指定相同的颜色,从而创建硬色标:产生锐利的过渡,而不是平滑的渐变。它适用于条纹、色带以及其他多色设计。styles.css
styles.css
system-ui 字体
system-ui 通用字体系列使用设备的原生 UI 字体。
styles.css
system-ui 的浏览器,Bun 的 CSS 打包器会将其扩展为跨平台字体堆栈:
styles.css
CSS 模块
Bun 的打包器还支持 CSS 模块,具有以下功能:- 无需配置即可检测 CSS 模块文件(
.module.css) - 组合(
composes属性) - 将 CSS 模块导入 JSX/TSX
- 针对 CSS 模块无效用法的警告/错误
.module.css),其中所有类名和动画都限定在该文件的作用域内。这有助于避免类名冲突,因为 CSS 声明默认是全局作用域的。
Bun 的打包器会将局部作用域的类名转换为唯一标识符。
快速入门
创建一个以.module.css 结尾的 CSS 文件:
styles.module.css
other-styles.module.css
app.tsx
app.tsx
app.tsx
组合
CSS 模块可以将类选择器组合在一起,以便在多个类之间复用样式规则。 例如:styles.module.css
styles.module.css
composes 时需要遵循以下两条规则:
组合规则:
composes属性必须写在任何常规 CSS 属性之前- 只能在带有单个类名的简单选择器上使用
composes
styles.module.css
从独立 CSS 模块文件组合
你也可以从其他 CSS 模块文件中组合类:background.module.css
styles.module.css