settings.useRootPaddingAwareAlignments属性是theme.json文件中最容易让人困惑的设置之一。它既不与任何界面选项相关联,也不会用于注册预设值。实际上,它的作用是用来指定WordPress应将主题的横向内边距样式应用在何处。
这意味着它与theme.json中的styles.spacing.padding设置共同发挥作用。关于常规样式的更多信息,您可以查阅样式文档,而关于这一特定样式如何与上述设置协同工作的内容,则会在本节中为您讲解。
什么是根内边距?
在了解settings.useRootPaddingAwareAlignments属性的运作方式之前,您首先需要明白什么是根内边距。
根内边距是指应用于网页“根”元素的填充空间。在WordPress主题中,这个元素就是<body>。若要自定义根元素的间距,就必须操作theme.json中的styles.spacing.padding设置。
以以下theme.json代码片段为例,它设置了上下内边距为0,而左右内边距则为2rem:
{
"version": 2,
"styles": {
"spacing": {
"padding": {
"top": "0",
"bottom": "0",
"left": "2rem",
"right": "2rem"
}
}
}
}默认情况下,这会在<body>(即根元素)的左右两侧各添加2rem的内边距。
如这张截图所示,根元素周围存在横向内边距,而全宽的Cover块则会延伸至该内边距的位置:

这是WordPress根据上述theme.json代码生成的CSS代码:
body {
padding-top: 0;
padding-right: 2rem;
padding-bottom: 0;
padding-left: 2rem;
}但是——这也是经验丰富的设计师可能会觉得奇怪的地方——当启用settings.useRootPaddingAwareAlignments后,原本应用于根元素的“根内边距”实际上不再作用于根元素本身,而是被应用到了Group之类的容器块上。
关于为何会出现这种情况,我们将在下一节中详细说明。目前的主要目标是让您明白:传统上根内边距是应用于<body>元素的,这也是大多数主题开发者所期望的。对于基于根内边距的对齐功能,WordPress只关注横向(左右)内边距,因此纵向(上下)内边距与本文档的内容无关。
启用基于根内边距的对齐功能
默认情况下,WordPress会将根内边距应用到<body>元素上。如果这符合您主题的设计需求,那么您无需做任何其他操作。
但是,如果您希望让全宽元素延伸至屏幕边缘,同时又希望根元素本身也带有内边距,那该怎么办呢?
与第一张截图相比,您可以发现Cover块虽然延伸到了屏幕边缘,但嵌套的块仍然具有内边距:

这是一种常见的设计模式,而在CSS中也有多种方法可以让元素超出其容器的范围。不过WordPress提供了一种适用于所有主题的标准解决方案。
这就是settings.useRootPaddingAwareAlignments设置的作用所在。当该属性被设置为true时,根内边距就会应用到容器元素上,而非<body>元素。同时,还必须配合styles.spacing.padding设置,尤其是横向内边距的设置。
请在您的theme.json文件中尝试使用以下代码:
{
"version": 2,
"settings": {
"useRootPaddingAwareAlignments": true
},
"styles": {
"spacing": {
"padding": {
"top": "0",
"bottom": "0",
"left": "2rem",
"right": "2rem"
}
}
}
}处理根内边距并没有所谓的对错之分,这属于一种根据具体情况决定的设置,您需要根据主题的设计需求来选择最合适的选项。
它是如何工作的?
虽然了解WordPress在底层是如何处理这些功能的并非至关重要,但有时您可能确实需要更深入地理解其运作原理。
当您启用settings.useRootPaddingAwareAlignments后,如最后一个theme.json示例所示,WordPress会生成两段新的CSS代码。第一段是用于定义根内边距的相关CSS自定义属性:
body {
--wp--style--root--padding-top: 0;
--wp--style--root--padding-right: 2rem;
--wp--style--root--padding-bottom: 0;
--wp--style--root--padding-left: 2rem;
}第二段则是添加一个.has-global-padding类:
.has-global-padding {
padding-right: var(--wp--style--root--padding-right);
padding-left: var(--wp--style--root--padding-left);
}随后,这个类会被应用到那些具有固定布局的容器块上(例如,开启了布局 > 内部块使用内容宽度选项的Group块):
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<!-- 嵌套块... -->
</div>除此之外,WordPress还会添加内联CSS,使得嵌套的宽块和全宽块能够超出其父块的宽度范围(包括因内边距而增加的宽度)。