Skip to main content
Version: latest

支持的语法

出于安全考虑,HTML 题的内容会经过白名单过滤:只保留受支持的标签、属性与样式,其余一律自动清除。保存时会先把 HTML 解析为语法树再重新序列化,因此不在白名单内的内容不会被渲染,也不会被保存。

支持的标签​

仅支持以下标签:

类别标签
基础div、p、span、em、h1 ~ h6
表格table、thead、tbody、th、td、colgroup、col
交互button

不在列表内的标签(如 script、img、iframe、a、input 等)都会被过滤掉。后续会持续支持一些标签。

支持的属性​

所有标签通用允许的属性:class、id、style、title

部分标签额外允许的属性:

标签额外允许的属性
tdcolspan、rowspan、align、valign
thcolspan、rowspan、align、valign、scope
col / colgroupspan、width、align
tablealign、width

其余属性(包括所有 on* 事件属性,如 onclick)都会被过滤。

style 的限制​

style 属性被允许,但其中的**危险声明会被过滤**,以防引用外部资源或造成安全/隐私风险。

被禁止的样式属性​

以下属性会被整条丢弃:

类别被禁止的属性
背景background、background-image
遮罩mask、mask-image、mask-box-image、-webkit-mask、-webkit-mask-image、-webkit-mask-box-image
边框 / 列表图片border-image、border-image-source、list-style-image
滤镜 / 裁剪filter、-webkit-filter、backdrop-filter、clip-path
定位position、top、right、bottom、left、inset、z-index
浮动float、clear
变换transform、translate、rotate、scale、perspective
其他content、src、behavior、-moz-binding、binding、shape-outside、offset-path

例如 background 因为可以写 url(...) 引用外部图片,会被整体禁用;如需背景色请使用 background-color。

定位、浮动、变换类属性能让内容脱离文档流、盖到题目范围之外。HTML 题只是问卷里的一道题,不允许它的内容遮挡其它题目或提交按钮,因此这几类属性一并禁用。排版请改用 margin、padding、display、flex、grid 等属性。

被禁止的样式取值​

取值里用到的 CSS 函数也走白名单:只允许颜色(rgb、rgba、hsl、hwb、lab、lch、oklab、oklch、color、color-mix)、数值计算(calc、min、max、clamp 等)、缓动(cubic-bezier、steps、linear)、渐变(linear-gradient、radial-gradient、conic-gradient 及其 repeating / 厂商前缀变体)、基本图形(circle、ellipse、inset、polygon、path 等)、网格(repeat、minmax、fit-content)与 var、env。不在白名单内的函数一律导致整条声明被丢弃,因此 url(...)、image-set(...)、cross-fade(...)、element(...)、expression(...) 这类会加载外部资源或执行脚本的写法天然被挡住。

此外,取值中命中以下片段时该条声明也会被丢弃:

类型被禁止的片段
伪协议javascript:、vbscript:、livescript:、mocha:、data:
CSS 转义反斜杠 \(如 exp\72 ession( 这类伪装写法)

内联样式的正常写法用不到反斜杠转义(中文字体名直接写即可),出现即视为伪装,整条声明丢弃。

即:所有会加载外部资源或执行脚本的写法都不被允许。安全的排版类样式(如 color、font-size、text-align、margin、padding、background-color 等)可以正常使用。