From 63b4c3652dfe0d4b692dd9278b5f668a0b67a76b Mon Sep 17 00:00:00 2001 From: sliang-code Date: Sat, 22 Aug 2026 04:59:35 +0800 Subject: [PATCH] fix: don't apply scoped CSS class to elements inside (#18160) skip elements inside head, they should not get hashes --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> Co-authored-by: Simon Holthausen --- .changeset/hungry-plums-roll.md | 5 +++++ .../src/compiler/phases/2-analyze/css/css-prune.js | 10 ++++++++++ .../samples/head-css-no-class/_expected_head.html | 1 + .../hydration/samples/head-css-no-class/main.svelte | 11 +++++++++++ 4 files changed, 27 insertions(+) create mode 100644 .changeset/hungry-plums-roll.md create mode 100644 packages/svelte/tests/hydration/samples/head-css-no-class/_expected_head.html create mode 100644 packages/svelte/tests/hydration/samples/head-css-no-class/main.svelte diff --git a/.changeset/hungry-plums-roll.md b/.changeset/hungry-plums-roll.md new file mode 100644 index 0000000000..b5e3688eb5 --- /dev/null +++ b/.changeset/hungry-plums-roll.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: never apply class hash to elements inside `` diff --git a/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js b/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js index 39f485a9f7..dff6bb9b5a 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js +++ b/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js @@ -122,6 +122,13 @@ const any_selector = { */ const seen = new Set(); +/** + * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement | Compiler.AST.RenderTag | Compiler.AST.Component | Compiler.AST.SvelteComponent | Compiler.AST.SvelteSelf} node + */ +function is_inside_svelte_head(node) { + return node.metadata.path.some((ancestor) => ancestor.type === 'SvelteHead'); +} + /** * * @param {Compiler.AST.CSS.StyleSheet} stylesheet @@ -143,6 +150,9 @@ export function prune(stylesheet, elements) { seen.clear(); if ( + // Elements rendered through are not style-scopable. + // Prevent css hash injection (class="s-...") on tags like , , \ No newline at end of file diff --git a/packages/svelte/tests/hydration/samples/head-css-no-class/main.svelte b/packages/svelte/tests/hydration/samples/head-css-no-class/main.svelte new file mode 100644 index 0000000000..29336a17ba --- /dev/null +++ b/packages/svelte/tests/hydration/samples/head-css-no-class/main.svelte @@ -0,0 +1,11 @@ + + + + + + +
dummy
+ +