From f238e618ee9248d1e3edb1664e18575a41f20430 Mon Sep 17 00:00:00 2001 From: nercone-dev Date: Sat, 25 Apr 2026 03:13:14 +0900 Subject: [PATCH] -- --- public/assets/css/style-extra.css | 4 ++-- public/assets/js/script-extra.js | 38 ++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/public/assets/css/style-extra.css b/public/assets/css/style-extra.css index 11025df..5c21693 100644 --- a/public/assets/css/style-extra.css +++ b/public/assets/css/style-extra.css @@ -39,8 +39,8 @@ header > *:not(.header-blur) { inset: 0; backdrop-filter: blur(var(--blur)); -webkit-backdrop-filter: blur(var(--blur)); - -webkit-mask-image: linear-gradient(to top, transparent var(--from), black var(--to)); - mask-image: linear-gradient(to top, transparent var(--from), black var(--to)); + -webkit-mask-image: var(--mask); + mask-image: var(--mask); } /* Fonts */ diff --git a/public/assets/js/script-extra.js b/public/assets/js/script-extra.js index fe63b1c..dae29a9 100644 --- a/public/assets/js/script-extra.js +++ b/public/assets/js/script-extra.js @@ -3,27 +3,39 @@ const header = document.querySelector('header'); if (!header) return; - const configs = [ - { blur: 2, from: '0%', to: '20%' }, - { blur: 3, from: '20%', to: '40%' }, - { blur: 5, from: '40%', to: '60%' }, - { blur: 8, from: '60%', to: '80%' }, - { blur: 13, from: '80%', to: '100%' }, - ]; + const LAYERS = 8; + const MAX_BLUR = 16; + const configs = Array.from({ length: LAYERS }, (_, i) => { + const t = i / (LAYERS - 1); + const blur = MAX_BLUR * Math.pow(t, 2); + const from = (i / LAYERS) * 100; + const to = ((i + 1) / LAYERS) * 100; + const mid = (from + to) / 2; + return { blur, from, to, mid }; + }); const root = document.createElement('div'); root.className = 'header-blur'; root.setAttribute('aria-hidden', 'true'); - let parent = root; for (const cfg of configs) { const layer = document.createElement('div'); layer.className = 'blur-layer'; - layer.style.setProperty('--blur', cfg.blur + 'px'); - layer.style.setProperty('--from', cfg.from); - layer.style.setProperty('--to', cfg.to); - parent.appendChild(layer); - parent = layer; + layer.style.setProperty('--blur', cfg.blur.toFixed(2) + 'px'); + const fadeHalf = (cfg.to - cfg.from); + const a = Math.max(0, cfg.from - fadeHalf); + const b = cfg.from; + const c = cfg.to; + const d = Math.min(100, cfg.to + fadeHalf); + layer.style.setProperty( + '--mask', + `linear-gradient(to top, + transparent ${a}%, + black ${b}%, + black ${c}%, + transparent ${d}%)` + ); + root.appendChild(layer); } header.prepend(root);