feat(glass): Liquid Glass эффект через SVG displacement-фильтр (по статье Хабра)
- PNG карта мелкого равномерного шума (public/assets/liquid-glass/displacement.png) - инлайн SVG feDisplacementMap инъецируется во все страницы сборщиком (build-pages.mjs) - glass-neutral + шапка/панели/FAB/overflow получают url(#filter) blur в Chromium - Safari/Firefox: детект через @supports not (hanging-punctuation:first), остаётся чистый blur - токены --v12-glass-neutral-filter-lg / -elevated-lg для обеих тем
This commit is contained in:
1 parent
e3acfa072c
commit
5fd8324b47
41 files changed
+535
-137
No files matched your search
@@ -5111,6 +5111,9 @@ html[data-theme="dark"] {
|
||||
inset 0 1px 0 hsla(0, 0%, 100%, 0.09);
|
||||
--v12-glass-neutral-filter: blur(16px) saturate(118%);
|
||||
--v12-glass-neutral-filter-elevated: blur(18px) saturate(125%);
|
||||
/* Liquid Glass (Хабр): displacement + blur — только для Chromium */
|
||||
--v12-glass-neutral-filter-lg: url(#liquid-glass-displacement) blur(15px) saturate(118%);
|
||||
--v12-glass-neutral-filter-elevated-lg: url(#liquid-glass-displacement) blur(17px) saturate(125%);
|
||||
}
|
||||
|
||||
html[data-theme="light"] {
|
||||
@@ -5126,6 +5129,9 @@ html[data-theme="light"] {
|
||||
inset 0 -1px 0 hsla(0, 0%, 0%, 0.04);
|
||||
--v12-glass-neutral-filter: blur(12px) saturate(124%);
|
||||
--v12-glass-neutral-filter-elevated: blur(14px) saturate(130%);
|
||||
/* Liquid Glass (Хабр): displacement + blur — только для Chromium */
|
||||
--v12-glass-neutral-filter-lg: url(#liquid-glass-displacement) blur(11px) saturate(124%);
|
||||
--v12-glass-neutral-filter-elevated-lg: url(#liquid-glass-displacement) blur(13px) saturate(130%);
|
||||
}
|
||||
|
||||
html[data-theme="dark"] .header--scrolled .header__inner,
|
||||
@@ -5164,6 +5170,37 @@ html[data-theme="light"] .fab.glass-neutral:not(.fab--primary):focus-visible {
|
||||
-webkit-backdrop-filter: var(--v12-glass-neutral-filter-elevated);
|
||||
}
|
||||
|
||||
/* Liquid Glass (Хабр): Chromium-only displacement.
|
||||
Safari/Firefox НЕ рендерят url()-фильтр в backdrop-filter — остаётся чистый blur.
|
||||
Детект: Chrome не поддерживает hanging-punctuation, Safari/Firefox — поддерживают. */
|
||||
@supports not (hanging-punctuation: first) {
|
||||
/* Базовый (не-elevated) слой — только .glass-neutral */
|
||||
html[data-theme="dark"] .glass-neutral,
|
||||
html[data-theme="light"] .glass-neutral {
|
||||
backdrop-filter: var(--v12-glass-neutral-filter-lg);
|
||||
-webkit-backdrop-filter: var(--v12-glass-neutral-filter-lg);
|
||||
}
|
||||
|
||||
/* Elevated-слой: шапка, панели, FAB при наведении, overflow-меню */
|
||||
html[data-theme="dark"] .header--scrolled .header__inner,
|
||||
html[data-theme="light"] .header--scrolled .header__inner,
|
||||
html[data-theme="dark"] .theme-picker__panel.glass-neutral,
|
||||
html[data-theme="dark"] .cookie-notice.glass-neutral,
|
||||
html[data-theme="light"] .theme-picker__panel.glass-neutral,
|
||||
html[data-theme="light"] .cookie-notice.glass-neutral,
|
||||
html[data-theme="dark"] .fab.glass-neutral:not(.fab--primary):hover,
|
||||
html[data-theme="dark"] .fab.glass-neutral:not(.fab--primary):focus-visible,
|
||||
html[data-theme="light"] .fab.glass-neutral:not(.fab--primary):hover,
|
||||
html[data-theme="light"] .fab.glass-neutral:not(.fab--primary):focus-visible,
|
||||
html[data-theme="dark"] .nav-more__dock,
|
||||
html[data-theme="light"] .nav-more__dock,
|
||||
html[data-theme="dark"] #nav-more-menu-floating,
|
||||
html[data-theme="light"] #nav-more-menu-floating {
|
||||
backdrop-filter: var(--v12-glass-neutral-filter-elevated-lg);
|
||||
-webkit-backdrop-filter: var(--v12-glass-neutral-filter-elevated-lg);
|
||||
}
|
||||
}
|
||||
|
||||
html[data-theme="dark"] .nav-more__dock,
|
||||
html[data-theme="light"] .nav-more__dock,
|
||||
html[data-theme="dark"] #nav-more-menu-floating,
|
||||
|
||||
Reference in new issue
Block a user