css 变量级联并且:root
选择器和@page 规则没有子/父关系。
@page
规则级联,也是。并且页面上下文确实继承自根元素,这意味着不仅@page
规则级联,而且它们与样式规则参与相同的级联。但是由于十年前这不在规范中,因此页面上下文不从根元素继承的实现仍然符合规范。
虽然这意味着您不应该依赖从@page
继承自定义属性的规则:root
,但这也意味着它@page
本身接受自定义属性,基本上使继承成为非问题。因此,以下内容预计会起作用,但它不会——似乎每个浏览器都无法创建自定义属性:
@page {
--page-width: 148.5mm;
--page-height: 210mm;
size: var(--page-width) var(--page-height);
}
有趣的是,Firefox 和 Chrome 在解析和计算样式声明中具有后备值的var()
表达式时没有问题,而 Microsoft Edge 则无法做到这一点,这意味着以下将导致 Firefox 和 Chrome 中的每个页面都有 25 毫米的边距:@page
@page {
--page-margin: 50mm;
margin: var(--page-margin, 25mm);
}
所以,简而言之,@page
规则中的自定义属性不起作用——不是因为规范不允许,而是因为每个浏览器对自定义属性的实现都是不完整的。