From d2896d5936fc08028a304b60f22d5ae42ac7579d Mon Sep 17 00:00:00 2001 From: jxxghp Date: Wed, 22 Jul 2026 22:13:13 +0800 Subject: [PATCH] Disable transitions that disrupt glass theme rendering --- src/styles/themes/glass.scss | 52 +++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/src/styles/themes/glass.scss b/src/styles/themes/glass.scss index a40916af..1dcb6fe1 100644 --- a/src/styles/themes/glass.scss +++ b/src/styles/themes/glass.scss @@ -121,6 +121,49 @@ html[data-theme='glass'] { z-index: 1; } + // 玻璃表面依赖稳定的背景采样层;入场透明度、位移或滤镜会让浏览器在动画结束后才重建材质。 + :where( + .mp-page-route--entering, + .mp-page-enter-active, + .mp-page-leave-active, + .fade-enter-active, + .fade-leave-active, + .fade-slide-enter-active, + .fade-slide-leave-active, + .fade-transition-enter-active, + .fade-transition-leave-active + ) { + animation: none !important; + transition: none !important; + will-change: auto !important; + } + + :where( + .mp-page-enter-from, + .mp-page-leave-to, + .fade-enter-from, + .fade-leave-to, + .fade-slide-enter-from, + .fade-slide-leave-to, + .fade-transition-enter-from, + .fade-transition-leave-to + ) { + filter: none !important; + opacity: 1 !important; + transform: none !important; + } + + // Overlay 的过渡类挂在玻璃表面的父层上,统一保持最终合成状态可覆盖菜单、选择器和弹窗。 + .v-overlay__content[class*='-transition-enter-'], + .v-overlay__content[class*='-transition-leave-'] { + animation: none !important; + filter: none !important; + opacity: 1 !important; + transform: none !important; + transition: none !important; + will-change: auto !important; + } + :where( .app-surface:not(.no-blur), .v-card:not(.no-blur, .bg-primary, .bg-success, .bg-info, .bg-warning, .bg-error), @@ -211,8 +254,7 @@ html[data-theme='glass'] { :where(.theme-customizer-border-scene, .theme-customizer-radius-scene) { border-color: var(--glass-border) !important; background: - linear-gradient(180deg, rgba(255, 255, 255, 4%), rgba(255, 255, 255, 7%)), - rgba(255, 255, 255, 3%) !important; + linear-gradient(180deg, rgba(255, 255, 255, 4%), rgba(255, 255, 255, 7%)), rgba(255, 255, 255, 3%) !important; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 12%), inset 0 -1px 0 rgba(2, 6, 16, 18%); @@ -231,8 +273,7 @@ html[data-theme='glass'] { inset 0 -1px 0 rgba(2, 6, 16, 20%); } - .theme-customizer-preview-option.is-active - > :where(.theme-customizer-border-scene, .theme-customizer-radius-scene) { + .theme-customizer-preview-option.is-active > :where(.theme-customizer-border-scene, .theme-customizer-radius-scene) { border-color: rgb(var(--v-theme-primary)) !important; background: rgba(var(--v-theme-primary), 8%) !important; } @@ -470,8 +511,7 @@ html[data-theme='glass'] { --slider-shadow-bleed-inline: 32px; } - :where(.v-card, .v-sheet) - :where(.app-surface, .v-card, .v-sheet, .v-list, .v-table, .v-expansion-panel, .v-stepper) { + :where(.v-card, .v-sheet) :where(.app-surface, .v-card, .v-sheet, .v-list, .v-table, .v-expansion-panel, .v-stepper) { border-color: transparent !important; -webkit-backdrop-filter: none; backdrop-filter: none;