Skip to main content
Version: latest

支持的语法

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

支持的标签

仅支持以下标签:

类别标签
基础divpspanemh1 ~ h6
表格tabletheadtbodythtdcolgroupcol
交互button

不在列表内的标签(如 scriptimgiframeainput 等)都会被过滤掉。后续会持续支持一些标签。

支持的属性

所有标签通用允许的属性:classidstyletitle

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

标签额外允许的属性
tdcolspanrowspanalignvalign
thcolspanrowspanalignvalignscope
col / colgroupspanwidthalign
tablealignwidth

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

style 的限制

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

被禁止的样式属性

以下属性会被整条丢弃:

类别被禁止的属性
背景backgroundbackground-image
遮罩maskmask-imagemask-box-image-webkit-mask-webkit-mask-image-webkit-mask-box-image
边框 / 列表图片border-imageborder-image-sourcelist-style-image
滤镜 / 裁剪filter-webkit-filterbackdrop-filterclip-path
定位positiontoprightbottomleftinsetz-index
浮动floatclear
变换transformtranslaterotatescaleperspective
其他contentsrcbehavior-moz-bindingbindingshape-outsideoffset-path

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

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

被禁止的样式取值

取值里用到的 CSS 函数也走白名单:只允许颜色(rgbrgbahslhwblablchoklaboklchcolorcolor-mix)、数值计算(calcminmaxclamp 等)、缓动(cubic-bezierstepslinear)、渐变(linear-gradientradial-gradientconic-gradient 及其 repeating / 厂商前缀变体)、基本图形(circleellipseinsetpolygonpath 等)、网格(repeatminmaxfit-content)与 varenv不在白名单内的函数一律导致整条声明被丢弃,因此 url(...)image-set(...)cross-fade(...)element(...)expression(...) 这类会加载外部资源或执行脚本的写法天然被挡住。

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

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

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

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