- 转译现代/未来特性以在所有浏览器上工作(包括供应商前缀)
- 压缩
- CSS Modules
- 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 函数
color-mix() 函数在选定的色彩空间中按给定比例混合两种颜色。无需自己计算结果即可创建颜色变体。
styles.css
styles.css
相对颜色
相对颜色语法修改现有颜色的各个分量。调整亮度、饱和度或单个通道属性,而无需重新计算整个颜色。styles.css
LAB 颜色
现代 CSS 支持感知均匀的色彩空间 LAB、LCH、OKLAB 和 OKLCH,它们可以表示超出标准 RGB 色域的颜色。styles.css
styles.css
Color 函数
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 Modules
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 属性或声明之前 - 你只能在带有单个类名的简单选择器上使用 composesstyles.module.css
从单独的 CSS 模块文件中组合
你也可以从单独的 CSS 模块文件中组合:background.module.css
styles.module.css