WordPress主题JSON阴影设置完全指南
在WordPress主题开发中,theme.json文件扮演着越来越重要的角色。从WordPress 6.3开始,开发者可以通过这个文件为网站添加自定义阴影效果,让设计更加精致。但阴影设置这个功能,说实话有点绕——它同时涉及CSS的box-shadow属性、主题预设管理、用户界面控制等多个层面。很多开发者容易在这里犯错,要么把阴影设置搞混,要么不知道如何正确禁用默认阴影。
这篇文章会带你理清楚WordPress阴影设置的所有细节。我们会从基础的shadow属性说起,解释它和CSS阴影的关系,然后深入探讨如何禁用WordPress自带的阴影预设,以及如何注册你自己的自定义阴影。文中所有示例都来自真实主题开发场景,你可以直接复制使用。
更重要的是,你会明白这些设置如何在后台编辑器中呈现,以及它们生成的CSS变量是如何工作的。这对于控制主题的视觉效果、统一设计语言都很有帮助。
什么是theme.json中的阴影设置
简单来说,settings.shadow是theme.json文件里的一个配置项,专门用来管理WordPress区块的阴影效果。它对应的是CSS的box-shadow属性——注意,这里的阴影特指盒子阴影,和文字阴影(text-shadow)是两码事。
你在theme.json中配置的阴影,终会在两个地方体现:
- 生成CSS自定义属性(也就是CSS变量),方便你在样式表中调用
- 在区块编辑器的界面中提供选项,让用户选择
阴影设置的结构
在theme.json文件中,阴影配置的结构是这样的:
json
{
"version": 2,
"settings": {
"shadow": {
"defaultPresets": true,
"presets": [
// 阴影预设数组
]
}
}
}
settings.shadow下有两个配置项:
- defaultPresets:布尔值,控制是否启用WordPress自带的默认阴影预设,默认是true
- presets:数组,用来注册你自定义的阴影
WordPress的默认阴影预设
WordPress自带了一套阴影预设,这些预设会默认启用。它们分别是:
- Natural(自然):
6px 6px 9px rgba(0, 0, 0, 0.2) - Deep(深邃):
12px 12px 50px rgba(0, 0, 0, 0.4) - Sharp(锐利):
6px 6px 0px rgba(0, 0, 0, 0.2) - Outlined(轮廓):
6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1) - Crisp(清晰):
6px 6px 0px rgba(0, 0, 0, 1)
每个预设都会生成对应的CSS变量,命名规则是--wp--preset--shadow--{slug}。比如Natural的变量就是--wp--preset--shadow--natural。
这些变量会被添加到body选择器中:
css
body {
--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);
--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);
--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);
--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);
--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);
}
为什么要禁用默认阴影
默认阴影预设虽然方便,但并不适合所有主题。它们的设计前提是背景色为白色或浅灰色——如果你的主题使用了深色背景或特殊配色,这些阴影就会显得很突兀。
禁用默认阴影的原因还有:
- 你希望用户只能使用你精心设计的自定义阴影
- 你根本不需要阴影效果,想保持界面干净
- 默认阴影的设计风格和你的主题不搭
如何禁用默认阴影
禁用默认阴影很简单,把defaultPresets设为false就行:
json
{
"version": 2,
"settings": {
"shadow": {
"defaultPresets": false
}
}
}
这样WordPress自带的五个阴影预设就不会加载了。
添加自定义阴影预设
自定义阴影才是真正发挥创造力的地方。通过presets数组,你可以注册任意数量的阴影效果。
每个阴影对象需要三个字段:
- name:显示给用户看的名称,支持多语言翻译
- slug:机器识别的标识符,用来生成CSS变量名
- shadow:合法的CSS box-shadow值
下面是一组来自实际主题的自定义阴影示例:
json
{
"$schema": "https://schemas.wp.org/trunk/theme.json",
"version": 2,
"settings": {
"shadow": {
"presets": [
{
"name": "小型",
"slug": "sm",
"shadow": "0 2px 4px 0 rgba(0, 0, 0, 0.06)"
},
{
"name": "中型",
"slug": "md",
"shadow": "0 3px 6px 0 rgba(0, 0, 0, 0.08), 0 2px 4px -2px rgba(0, 0, 0, 0.06)"
},
{
"name": "大型",
"slug": "lg",
"shadow": "0 8px 12px -2px rgba(0, 0, 0, 0.1), 0 3px 6px -3px rgba(0, 0, 0, 0.08)"
},
{
"name": "超大",
"slug": "xl",
"shadow": "0 16px 24px -4px rgba(0, 0, 0, 0.12), 0 6px 8px -4px rgba(0, 0, 0, 0.08)"
},
{
"name": "内阴影",
"slug": "inner",
"shadow": "inset 0 2px 6px 0 rgba(0, 0, 0, 0.06)"
}
]
}
}
}
每个自定义阴影同样会生成CSS变量,比如上面示例中的--wp--preset--shadow--sm。
阴影在编辑器中的使用位置
目前,WordPress默认只在按钮(Button)区块的界面中显示阴影选项。用户可以通过以下路径找到它:
外观 → 编辑器 → 样式 → 样式手册,然后在样式手册中选择按钮区块,在效果(Effects)选项卡下就能看到阴影选项。
需要注意的是,三方开发的区块也可以利用这些阴影预设,在自己的区块设置面板中添加阴影选择器。
在样式表中使用阴影变量
注册好的阴影预设可以在你的样式表中通过CSS变量来使用。比如:
css
.my-custom-button {
box-shadow: var(--wp--preset--shadow--md);
}
.featured-card:hover {
box-shadow: var(--wp--preset--shadow--lg);
}
常见问题解答
问:阴影设置只在按钮区块中生效吗?
目前WordPress核心只在按钮区块中集成了阴影选择器,但其他区块也可以通过开发者的自定义代码来支持阴影选择。
问:自定义阴影能覆盖默认阴影吗?
不能直接覆盖,但你可以禁用默认阴影后再注册同名的自定义阴影。
问:defaultPresets和presets可以同时使用吗?
可以。defaultPresets: true表示启用默认阴影,同时你注册的自定义阴影也会追加到预设列表中。
总结
settings.shadow控制WordPress的box-shadow相关功能defaultPresets控制是否启用自带的五个阴影预设presets数组用于注册自定义阴影,每个阴影需要name、slug、shadow三个字段- 阴影预设会生成
--wp--preset--shadow--{slug}格式的CSS变量 - 目前核心区块中只有按钮区块内置了阴影选择器
- 设置
defaultPresets: false可以完全移除默认阴影,让主题的视觉效果更统一
掌握theme.json中的阴影设置,相当于拥有了一套系统化的阴影管理方案。它让阴影效果像调色板、字体大小一样,成为设计体系的一部分,而不再是零散的CSS代码片段。