diff --git a/crates/typst-html/src/encode.rs b/crates/typst-html/src/encode.rs
index eb25ab1ec..2bfa78a72 100644
--- a/crates/typst-html/src/encode.rs
+++ b/crates/typst-html/src/encode.rs
@@ -89,6 +89,9 @@ fn write_element(w: &mut Writer, element: &HtmlElement) -> SourceResult<()> {
w.buf.push('>');
if tag::is_void(element.tag) {
+ if !element.children.is_empty() {
+ bail!(element.span, "HTML void elements must not have children");
+ }
return Ok(());
}
diff --git a/crates/typst-html/src/lib.rs b/crates/typst-html/src/lib.rs
index 7d78a5da4..703948f66 100644
--- a/crates/typst-html/src/lib.rs
+++ b/crates/typst-html/src/lib.rs
@@ -180,9 +180,6 @@ fn handle(
if let Some(body) = elem.body(styles) {
children = html_fragment(engine, body, locator.next(&elem.span()), styles)?;
}
- if tag::is_void(elem.tag) && !children.is_empty() {
- bail!(elem.span(), "HTML void elements may not have children");
- }
let element = HtmlElement {
tag: elem.tag,
attrs: elem.attrs(styles).clone(),
diff --git a/tests/suite/html/syntax.typ b/tests/suite/html/syntax.typ
index af671ef58..c95fa06ed 100644
--- a/tests/suite/html/syntax.typ
+++ b/tests/suite/html/syntax.typ
@@ -1,3 +1,7 @@
--- html-non-char html ---
// Error: 1-9 the character `"\u{fdd0}"` cannot be encoded in HTML
\u{fdd0}
+
+--- html-void-element-with-children html ---
+// Error: 2-27 HTML void elements must not have children
+#html.elem("img", [Hello])