原生富文本 CSS 命名空间

内部 XHTML 样式表通过既有的原生富文本解码器支持 CSS 命名空间声明以及限定名元素与属性选择器

<body xmlns="http://www.w3.org/1999/xhtml" xmlns:meta="urn:review">
  <style>
    @namespace h "http://www.w3.org/1999/xhtml";
    @namespace review "urn:review";
    h|span[review|status="ready"] { color: #204080; font-weight: bold }
  </style>
  <p><span meta:status="ready">Approved</span></p>
</body>

CSS 前缀独立于 XML 前缀标识命名空间 URI,所以示例中的 review|status 能匹配 meta:status,因为两个前缀都解析到 urn:review

前缀名区分大小写并接受普通 CSS 标识符转义;命名空间 URI 值接受带引号字符串以及带引号或不带引号的 url() 语法

不带引号的 url token 内的注释仍是字面 URI 字符;不带引号 URI 周围的空白不计入值

同一 style 元素内同一前缀以最后一条合法声明为准;默认声明单独以最后一条为准,绑定不会泄漏到另一个 style 元素

声明要放在样式规则和已识别的非 import at 规则之前;被忽略的未知 at 规则不会闭合声明区

限定名与默认命名空间

h|span 匹配 h 所声明 URI 中的本地名 span,*|span 接受任意命名空间,|span 要求无命名空间

h|* 匹配所声明 URI 中的任意元素名;解码器继续消费既有受支持的 XHTML 元素 profile

@namespace "urn:review"; 这样的默认声明会约束无限定元素选择器以及带隐式通配选择器的普通复合选择器

空的默认 URI 选中无命名空间的元素;字面 URI "*" 是普通 URI,与 *|span 中的通配前缀不同

属性选择器支持已声明前缀、通配前缀和显式空前缀;无前缀属性始终不属于任何命名空间,与默认元素命名空间无关

XML 命名空间声明不算普通属性;命名空间解析跟随属性自身所在元素的作用域,并尊重局部前缀遮蔽,包括内建的 xml 前缀

函数式选择器

:is()、:where() 和 :not() 内的主旨复合选择器在没有显式类型或通配选择器时省略默认命名空间约束

显式通配选择器保留该约束;更早的祖先复合选择器、相对 :has() 参数和位置选择器中的 of 过滤器保留普通命名空间匹配

未声明的 CSS 前缀使其选择器失效;宽容的 is/where 列表可以保留其他合法分支,严格选择器组保留既有的整组失效规则

保存输出与资源限制

计算出的样式经原生 Pascal、Windows 作业与 V1 回调以及 Linux JSON 与 V1 回调,进入保存的 RV 和真实 widget 外观

既有的 important、specificity、源顺序和属性继承规则在命名空间匹配之后照常适用

命名空间声明存储共享 MaxNodes,命名空间扫描共享 MaxTotalCodeUnits,继承属性命名空间查找按设界的匹配与扫描工作量计费

取消与预算失败保留先前解码器输出和已提交导入状态;调用方可用原始输入和常规限制重试

外部样式表、条件 media 规则、更多状态伪类、显式作用域根、表格和通用 CSS 布局仍是进行中的工作

原生富文本样式表 · 原生 form 数据交换