原生富文本 CSS supports 查询
原生 XHTML 解码器对照其受支持的富文本声明与选择器语法,求值 @supports 组和 supports() 导入条件
<body xmlns="http://www.w3.org/1999/xhtml">
<style><![CDATA[
@supports (font-size: calc(10pt + 5pt)) and selector(span.notice) {
span.notice { font-size: 15pt }
}
@supports not (display: grid) {
span.notice { font-weight: bold }
}
]]></style>
<p><span class="notice">Conditional text</span></p>
</body>
在原生 profile 下两个组都生效,用调用方指定的字体产出 15 point 粗体文本
声明与选择器接纳
声明查询使用既有的接纳助手:font-size、font-weight、font-style、text-decoration、color、text-align、font-family、line-height、font 简写、letter-spacing 和 word-spacing
数值查询共享有限的 CSS 数学 profile、默认字体度量和显式 media 尺寸;不受支持的属性或不被接纳的值求值为 false
font-family 查询要求配置的 FontFamilyNames 集合,不可用但合法的 family 可以走既有的指定 family 回退
声明查询中合法的 !important 标注被接受,但不改变条件组的级联优先级;多余的声明、尾随分号或非法优先级会被拒绝
selector() 检查既有的原生选择器语法和当前样式表的命名空间声明,不匹配文档元素
每个选择器分支都必须受支持,包括常规宽容的 is() 与 where() 列表内部的分支;未定义的命名空间前缀和未知伪类求值为 false
根 :scope 以及静态 :hover、:active、:focus、:focus-visible 和 :focus-within 语法受支持。特性查询成功只说明解析器支持;用户操作类选择器仍不会匹配 PDF 外观,:hover() 之类的函数形式非法
选择器探测会恢复临时的匹配器存储,不影响后续样式表匹配;其工作量仍计入共享的节点与取消预算
布尔语法与向前兼容条件
条件接受 not、同质的 and 或 or 链以及嵌套括号;and 与 or 混用需要显式分组
注释和 CSS 标识符转义遵循解码器既有的 tokenizer,not 必须是与后续项分隔的关键字,而不是 not() 函数 token
配对的未知函数和带括号的 general-enclosed 条件求值为 false,因此外层 not 可以提供回退
畸形字符串、畸形的不带引号 URL token 和不匹配的定界符会在取反之前使外围条件失效;数值维度和带引号的函数 token 保留各自独立的 token 边界
组、导入与输出
条件组保留真实源位置、选择器 specificity 和 important 优先级,可以与受支持的 media 组嵌套
@import "metrics.css" supports(line-height: 18pt) print;
@import "fallback.css" supports(not selector(span:future));
导入的可选 supports() 条件跟在资源 URI 之后、可选 media 条件之前;两者都必须接纳该资源,它才能贡献声明
相对 URI 解析、循环处理、命名空间隔离和既有的导入顺序要求仍与 调用方样式表相同
被接纳的声明经同一个解码器进入真实解码 run、计算出的规范富值、保存的字段外观和默认 profile 的富 FDF/XFDF 导入
边界与验收
条件解析和选择器探测消耗既有的 MaxNodes 与 MaxTotalCodeUnits 限制;嵌套条件、块和组共享 MaxDepth
取消传播 EHPDFOperationCancelled 且不返回部分 run,查询或预算失败保留全新与复用解码的恢复能力
Tests/Linux/RichTextSupports/Run.py 验证声明、选择器、布尔和 URL token 行为、嵌套级联与导入、实测取消,以及真实保存的 plain 与 AES 加密 PDF 输出
本原生 profile 不在上述受支持的声明与选择器查询之外增加浏览器布局、导入层、自定义属性、额外选择器语法或 CSS 条件特性
条件语法遵循 CSS Conditional Rules Level 3 和 Level 4 的受支持部分;原生接纳 profile 定义哪些查询会成功
原生解码器 · 解码选项 · media profile