支持范围
逐条列出内核现在的落地情况。
判断标准:代码里确实有这条路径,而且能被测试或截图验证,算「支持」。解析进来了但没人读、字段有但布局不认、命令定义了但没人生产——一律算「未实现」。
这个口径偏严,但它避免了「看着像能用其实不生效」——那种情况排查起来最费时间。
图例:✅ 支持 · ⚠️ 部分支持(括号里说明)· ❌ 未实现
| 特性 | 状态 |
|---|
| 词法(标签、属性、注释、DOCTYPE、字符引用) | ✅ |
| 树构建(插入模式、格式化元素、收养机构、表格寄养) | ✅ |
| 怪异模式判定 | ✅ 判定出来并记录,缓解规则未实现 |
| 外来内容(SVG / MathML)的标签名与属性调整 | ✅ |
| 字符引用 | ✅ 2231 条具名引用,含 Windows-1252 的 C1 映射 |
片段解析(innerHTML 那类) | ⚠️ 有入口,未纳入 html5lib 的 192 条片段用例比对 |
<script> 解析 | ✅ 解析进 DOM |
<script> 执行 | ❌ 没有执行器 |
<img> | ❌ 不产生替换内容,不占位,不显示 |
<map> / <area> | ❌ |
| 表单控件的外观 | ❌ 只有 display: inline-block,没有控件盒 |
<base href> | ❌ 基准地址从 API 传入,不从 DOM 读 |
<meta charset> 的语义 | ⚠️ 编码嗅探靠在前 1000 字节里搜子串,不读 DOM |
<form> 的嵌套禁止 | ⚠️ 会真的建出嵌套 form |
<isindex> / <nextid> | ❌ 落兜底分支 |
xmp / listing / plaintext 的呈现 | ⚠️ xmp 与 plaintext 有字面解析,无等宽样式规则 |
| 特性 | 状态 |
|---|
| 词法(记号类型、数字、字符串、url) | ✅ |
转义解码(\41 b 这类) | ❌ 反斜杠只跳过,不解码 |
| 未闭合字符串 / URL 的错误恢复 | ❌ 照样返回可用的值 |
| CDO / CDC 的忽略 | ❌ 记号类型有,解析路径没接 |
| 规则、声明、错误恢复 | ✅ |
@media | ⚠️ all / screen 支持,only screen 恒不匹配,print / speech 当作不匹配 |
@import | ❌ |
@supports | ❌ |
@namespace | ❌ |
@font-face | ⚠️ 解析进字体表,无消费方(字体不下载、不注册) |
@keyframes / @page / @charset | ❌ |
| 媒体查询的 MQ4 范围语法 | ❌ |
| 特性 | 状态 |
|---|
| 四种组合器 | ✅ |
| 七个属性运算符 | ✅ |
结构伪类(含四个 -of-type 与 nth-*) | ✅ |
:not() / :is() | ✅ |
:lang() | ✅ 沿祖先查找 |
:where() | ⚠️ 能与 :is() 一样匹配,但优先级不是零 |
:hover / :active / :focus / :visited | ❌ 匹配逻辑有,外壳不提供状态 |
:has() | ❌ 未知伪类会让整条规则作废 |
伪元素(::before / ::after) | ❌ 解析得出来,匹配时不区分,不生成盒子 |
:link 与 :visited 互斥 | ⚠️ 已访问链接会同时命中两者 |
| 特性 | 状态 |
|---|
来源顺序与 !important | ✅ |
| 继承 | ✅ 九项 |
| 优先级计算 | ✅ |
| 内置默认样式表 | ✅ |
em / 百分比字号的换算 | ✅ |
calc() / min() / max() / clamp() | ❌ |
var() 与自定义属性 | ❌ |
inherit / initial / unset | ❌ 命中后直接丢掉 |
box-sizing | ❌ 只有 content-box 语义 |
currentColor | ❌ |
角度单位(rad / grad / turn) | ❌ 只认 deg |
border-radius | ⚠️ 四个角、百分比按短边;只有单值,10px 20px 被丢弃 |
| 特性 | 状态 |
|---|
| 块级布局 | ✅ 含相邻与父子外边距合并 |
水平 auto 外边距居中 | ✅ |
纵向 auto 外边距 | ❌ |
| 行内布局与行盒 | ✅ |
| 行内块收缩到适配 | ✅ |
| 文本断行(cosmic-text) | ✅ |
text-align | ⚠️ left / right / center;justify 是空操作 |
| 弹性布局 | ⚠️ 单行;flex-wrap 不生效,align-content 不生效,order 无 |
| 表格布局 | ⚠️ 列宽按内容求解;无跨行跨列,无边框合并,无 table-layout: fixed,caption 不可见 |
float / clear | ❌ 连字段都没有 |
position | ❌ 字段解析进计算样式,布局与绘制零读取 |
z-index | ❌ 同上 |
visibility | ❌ 字段有,painter 不读 |
vertical-align | ❌ 无字段,行盒基线写死为行高的 0.8 倍 |
text-indent | ❌ |
椭圆角(border-radius: 水平 垂直) | ❌ |
| Grid | ❌ 全仓零命中 |
| 多列布局 | ❌ |
| 容器查询 | ❌ |
display: flow-root / contents / inline-table | ❌(inline-table 被降级成 table) |
| 特性 | 状态 |
|---|
| 字形整形与断行 | ✅ cosmic-text,Shaping::Advanced |
white-space 五种取值 | ✅ |
| 下划线 | ✅ |
line-height | ⚠️ 只吃无单位倍数与 normal,带单位的被静默忽略 |
letter-spacing / word-spacing | ❌ |
text-transform | ❌ |
text-overflow(省略号) | ❌ |
word-break / overflow-wrap / hyphens | ❌ |
text-decoration 除下划线以外的取值 | ❌ |
@font-face 的实际加载 | ❌ |
font-variant / font-stretch | ❌ |
| 彩色字形(emoji) | ❌ 图集是单通道,彩色字形被跳过 |
| 行盒基线的精确计算 | ❌ 用 0.8 的行高估算 |
| 特性 | 状态 |
|---|
| 背景色、边框、文字 | ✅ |
| 圆角矩形 | ✅ 用有符号距离场 |
| 四种边框线型 | ✅ Solid / Dashed / Dotted / Double |
裁剪(overflow) | ✅ 轴对齐矩形 |
| 滚动时按可见区域重绘 | ✅ |
| 图片绘制 | ❌ DrawCommand::Image 无生产者 |
background-image 族 | ❌ 简写只挑颜色,其余丢弃 |
box-shadow | ❌ |
transform | ❌ |
filter / filter-filter | ❌ |
mix-blend-mode | ❌ |
outline | ❌ |
clip-path / mask | ❌ |
opacity | ⚠️ 按子树累乘,不是独立合成层 |
| 列表标记 | ⚠️ 一律画圆点,list-style-type 无 |
::before / ::after 与 content | ❌ |
| 计数器 | ❌ |
@keyframes / transition | ❌ 布局只算一次,没有重算入口 |
分页(@page) | ❌ |
| 特性 | 状态 |
|---|
| HTTP/1.1 | ✅ 手写解析 |
| HTTPS | ✅ rustls + webpki-roots |
| 重定向 | ✅ 301/302/303/307/308,上限 10 次 |
| 超时与大小上限 | ✅ |
| 分块传输 | ✅ |
| 字符集嗅探 | ✅ BOM / Content-Type / <meta charset> |
| 外部样式表 | ✅ 逐个取回并应用 |
| 压缩传输 | ❌ 不发 Accept-Encoding,不解 Content-Encoding |
| 连接池 | ❌ 每次新建连接 |
| Cookie | ❌ |
| 缓存 | ❌ |
| 子资源(图片、脚本、字体) | ❌ 只取样式表 |
| POST 与表单提交 | ⚠️ Request 支持序列化 POST,客户端不发 |
| 特性 | 状态 |
|---|
| 地址栏输入的解析(六种路径前缀) | ✅ |
~ 展开家目录 | ✅ |
| 相对链接补全 | ✅ |
| 五个内置页面 | ✅ |
file:// 双向转换 | ✅ |
| 本地文件加载与字符集嗅探 | ✅ |
| 搜索词 | ❌ 没有这一档 |
| 本地目录列表 | ❌ |
| 权限与沙箱策略 | ❌ |
| 特性 | 状态 |
|---|
<script> 在 DOM 里 | ✅ |
| 执行 | ❌ 整个运行期除了数字抽象操作之外为零 |
| 事件派发 | ❌ |
| 定时器与微任务 | ❌ |
| 特性 | 状态 |
|---|
| 标签页(新建、关闭、切换、拖动重排) | ✅ |
| 导航历史(前进、后退、刷新,中间跳转后截断) | ✅ |
| 地址栏 | ✅ |
| 缩放 | ✅ 改布局视口宽度,不是拉伸画面 |
| 滚动(滚轮、翻页键、首尾) | ✅ |
| 链接点击与手型光标 | ✅ |
| 打开本地文件(对话框、拖放、地址栏路径) | ✅ |
| 命令行参数 | ❌ 外壳不解析 argv |
| 书签 | ❌ |
| 下载管理 | ❌ |
| 设置界面 | ❌ |
| 开发者工具 | ❌ |
| 会话恢复 | ❌ |
| 多进程隔离 | ❌ |
| 打印 | ❌ |
| 输入法 | ✅ 走 Qt 的输入法插件,不改代码即可 |
表里标 ❌ 的每一条,都是「整条路径不存在」,不是「有 bug」。 它们不会报错,不会崩,只会安静地不生效。
标 ⚠️ 的那些请当成 ❌ 用。 一个只在特定写法下才生效的特性,依赖它等于在赌。要么绕开,要么先把缺的那一段补上。