diff --git a/crates/typst-html/src/lib.rs b/crates/typst-html/src/lib.rs
index 25d0cd5d8..236a32544 100644
--- a/crates/typst-html/src/lib.rs
+++ b/crates/typst-html/src/lib.rs
@@ -307,18 +307,18 @@ fn head_element(info: &DocumentInfo) -> HtmlElement {
/// Determine which kind of output the user generated.
fn classify_output(mut output: Vec) -> SourceResult {
- let len = output.len();
+ let count = output.iter().filter(|node| !matches!(node, HtmlNode::Tag(_))).count();
for node in &mut output {
let HtmlNode::Element(elem) = node else { continue };
let tag = elem.tag;
let mut take = || std::mem::replace(elem, HtmlElement::new(tag::html));
- match (tag, len) {
+ match (tag, count) {
(tag::html, 1) => return Ok(OutputKind::Html(take())),
(tag::body, 1) => return Ok(OutputKind::Body(take())),
(tag::html | tag::body, _) => bail!(
elem.span,
"`{}` element must be the only element in the document",
- elem.tag
+ elem.tag,
),
_ => {}
}
diff --git a/tests/ref/html/html-elem-alone-context.html b/tests/ref/html/html-elem-alone-context.html
new file mode 100644
index 000000000..69e9da411
--- /dev/null
+++ b/tests/ref/html/html-elem-alone-context.html
@@ -0,0 +1,2 @@
+
+
diff --git a/tests/suite/html/elem.typ b/tests/suite/html/elem.typ
new file mode 100644
index 000000000..81ab94577
--- /dev/null
+++ b/tests/suite/html/elem.typ
@@ -0,0 +1,7 @@
+--- html-elem-alone-context html ---
+#context html.elem("html")
+
+--- html-elem-not-alone html ---
+// Error: 2-19 `` element must be the only element in the document
+#html.elem("html")
+Text