diff --git a/changelog_unreleased/html/pr-8621.md b/changelog_unreleased/html/pr-8621.md
new file mode 100644
index 000000000..0f3ac9a09
--- /dev/null
+++ b/changelog_unreleased/html/pr-8621.md
@@ -0,0 +1,47 @@
+#### Recognize known html tags ([#8621](https://github.com/prettier/prettier/pull/8621) by [@fisker](https://github.com/fisker))
+
+
+```html
+
+
beforesummary long long long long
details after
+beforeafter
+
+
+
+
+ beforesummary long long long long
details after
+
+
+ beforeafter
+
+
+
+
+
+ before
+
+ summary long long long long
+ details
+
+ after
+
+
+ before
+
+ after
+
+
+```
diff --git a/src/language-html/constants.evaluate.js b/src/language-html/constants.evaluate.js
index 4fc49df6e..3ffadd67b 100644
--- a/src/language-html/constants.evaluate.js
+++ b/src/language-html/constants.evaluate.js
@@ -23,7 +23,6 @@ const CSS_DISPLAY_TAGS = {
...getCssStyleTags("display"),
// TODO: send PR to upstream
-
button: "inline-block",
// special cases for some css display=none elements
@@ -31,8 +30,18 @@ const CSS_DISPLAY_TAGS = {
source: "block",
track: "block",
script: "block",
+ param: "block",
+
+ // `noscript` is inline
+ // noscript: "inline",
// there's no css display for these elements but they behave these ways
+ details: "block",
+ summary: "block",
+ dialog: "block",
+ meter: "inline-block",
+ progress: "inline-block",
+ object: "inline-block",
video: "inline-block",
audio: "inline-block",
select: "inline-block",
diff --git a/src/language-html/utils.js b/src/language-html/utils.js
index bbba9923f..19ae1285f 100644
--- a/src/language-html/utils.js
+++ b/src/language-html/utils.js
@@ -269,6 +269,7 @@ function forceNextEmptyLine(node) {
return (
isFrontMatterNode(node) ||
(node.next &&
+ node.sourceSpan.end &&
node.sourceSpan.end.line + 1 < node.next.sourceSpan.start.line)
);
}
diff --git a/tests/html/tags/__snapshots__/jsfmt.spec.js.snap b/tests/html/tags/__snapshots__/jsfmt.spec.js.snap
index 2716a14bb..6d2f7a0eb 100644
--- a/tests/html/tags/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/html/tags/__snapshots__/jsfmt.spec.js.snap
@@ -3723,6 +3723,348 @@ printWidth: 80
================================================================================
`;
+exports[`tags2.html - {"htmlWhitespaceSensitivity":"ignore"} format 1`] = `
+====================================options=====================================
+htmlWhitespaceSensitivity: "ignore"
+parsers: ["html"]
+printWidth: 80
+ | printWidth
+=====================================input======================================
+beforeafter
+
+beforesummary long long long long
details after
+
+beforeafter
+
+
+
+beforeafter
+
+
+
+=====================================output=====================================
+
+ before
+
+ after
+
+
+
+ before
+
+ summary long long long long
+ details
+
+ after
+
+
+
+ before
+
+ after
+
+
+
+ before
+
+ after
+
+
+
+ before
+
+ after
+
+
+
+
+================================================================================
+`;
+
+exports[`tags2.html - {"htmlWhitespaceSensitivity":"strict"} format 1`] = `
+====================================options=====================================
+htmlWhitespaceSensitivity: "strict"
+parsers: ["html"]
+printWidth: 80
+ | printWidth
+=====================================input======================================
+beforeafter
+
+beforesummary long long long long
details after
+
+beforeafter
+
+
+
+beforeafter
+
+
+
+=====================================output=====================================
+beforeafter
+
+beforesummary long long long long
details after
+
+beforeafter
+
+
+
+beforeafter
+
+
+
+================================================================================
+`;
+
+exports[`tags2.html - {"printWidth":"Infinity"} format 1`] = `
+====================================options=====================================
+parsers: ["html"]
+printWidth: Infinity
+=====================================input======================================
+beforeafter
+
+beforesummary long long long long
details after
+
+beforeafter
+
+
+
+beforeafter
+
+
+
+=====================================output=====================================
+beforeafter
+
+
+ before
+
+ summary long long long long
+ details
+
+ after
+
+
+
+ before
+
+ after
+
+
+
+
+beforeafter
+
+
+
+================================================================================
+`;
+
+exports[`tags2.html - {"printWidth":1} format 1`] = `
+====================================options=====================================
+parsers: ["html"]
+printWidth: 1
+ | printWidth
+=====================================input======================================
+beforeafter
+
+beforesummary long long long long
details after
+
+beforeafter
+
+
+
+beforeafter
+
+
+
+=====================================output=====================================
+
+ beforeafter
+
+
+
+ before
+
+
+ summary
+ long
+ long
+ long
+ long
+
+ details
+
+ after
+
+
+
+ before
+
+ after
+
+
+
+
+
+ beforeafter
+
+
+
+
+================================================================================
+`;
+
+exports[`tags2.html format 1`] = `
+====================================options=====================================
+parsers: ["html"]
+printWidth: 80
+ | printWidth
+=====================================input======================================
+beforeafter
+
+beforesummary long long long long
details after
+
+beforeafter
+
+
+
+beforeafter
+
+
+
+=====================================output=====================================
+
+ beforeafter
+
+
+
+ before
+
+ summary long long long long
+ details
+
+ after
+
+
+
+ before
+
+ after
+
+
+
+
+
+ beforeafter
+
+
+
+
+================================================================================
+`;
+
exports[`textarea.html - {"htmlWhitespaceSensitivity":"ignore"} format 1`] = `
====================================options=====================================
htmlWhitespaceSensitivity: "ignore"
diff --git a/tests/html/tags/tags2.html b/tests/html/tags/tags2.html
new file mode 100644
index 000000000..f9cc62d91
--- /dev/null
+++ b/tests/html/tags/tags2.html
@@ -0,0 +1,11 @@
+beforeafter
+
+beforesummary long long long long
details after
+
+beforeafter
+
+
+
+beforeafter
+
+