fix(ui): iPad'de progressive blur kaydırmada ortaya kaymıyor

Site geneli üst/alt blur katmanları `position: fixed` + `backdrop-filter`
taşıyordu. iOS/iPadOS WebKit (iPad'de Chrome da WebKit) bu birleşimde
bulanıklığı ayrı kompozit katmana alıp scroll sırasında bayat kaydırma
konumuyla çiziyor; katman ekranın ortasında şerit gibi görünüyordu.

Katmanların stili skiper-ui bileşeninin inline stilinden globals.css'teki
`.kt-sayfa-blur`a taşındı (inline stil `@supports` ile ezilemiyordu).
`@supports (-webkit-touch-callout: none)` yalnızca iOS/iPadOS'ta eşleşir —
masaüstü Safari dahil başka hiçbir tarayıcıda desteklenmez — ve orada
bulanıklık + maske düşer, degrade fade korunur. Geometri (112px, z-40,
print:hidden) ve diğer tarayıcılardaki görüntü değişmedi.

Katalogdaki ProgressiveBlur kullanımları `absolute` olduğu için bu hatadan
etkilenmiyor; bileşen onlar için olduğu gibi kaldı.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-22 01:08:01 +03:00
parent bda4d0797b
commit cc46244206
2 changed files with 56 additions and 19 deletions

View File

@@ -254,3 +254,52 @@
@apply font-sans; @apply font-sans;
} }
} }
/* Site geneli üst/alt progressive blur katmanları (root layout).
Kendi CSS'iyle yazılır çünkü bu iki katman `position: fixed` + `backdrop-filter`
birleşimini taşıyan tek yer: iOS/iPadOS WebKit bu birleşimde bulanıklığı ayrı
bir kompozit katmana alıp kaydırma sırasında bayat scroll konumuyla çiziyor,
katman ekranın ortasında bir şerit gibi görünüyor (22 Eyl 2026, iPad + Chrome
raporu — Chrome iOS da WebKit'tir, hata Safari'yle aynı). Aşağıdaki @supports
bloğu yalnızca iOS/iPadOS'ta eşleşir (`-webkit-touch-callout` başka hiçbir
tarayıcıda desteklenmez; masaüstü Safari dahil) ve orada bulanıklık + maske
düşer, degrade fade kalır. Katalogdaki ProgressiveBlur kullanımları `absolute`
olduğu için bu hatadan etkilenmiyor; onlar bileşende kalır. */
.kt-sayfa-blur {
position: fixed;
inset-inline: 0;
z-index: 40;
height: 7rem;
pointer-events: none;
user-select: none;
-webkit-user-select: none;
-webkit-backdrop-filter: blur(6px);
backdrop-filter: blur(6px);
}
/* Degrade: ekran kenarında gövde zemini (bg-slate-50), içeriye doğru şeffaf.
Maske bulanıklığı aynı yönde söndürür — sert kenar kalmaz. */
.kt-sayfa-blur-ust {
top: 0;
background: linear-gradient(to top, transparent, #f8fafc);
-webkit-mask-image: linear-gradient(to bottom, #000 50%, transparent);
mask-image: linear-gradient(to bottom, #000 50%, transparent);
}
.kt-sayfa-blur-alt {
bottom: 0;
background: linear-gradient(to bottom, transparent, #f8fafc);
-webkit-mask-image: linear-gradient(to top, #000 50%, transparent);
mask-image: linear-gradient(to top, #000 50%, transparent);
}
@supports (-webkit-touch-callout: none) {
.kt-sayfa-blur {
-webkit-backdrop-filter: none;
backdrop-filter: none;
}
.kt-sayfa-blur-ust,
.kt-sayfa-blur-alt {
-webkit-mask-image: none;
mask-image: none;
}
}

View File

@@ -9,7 +9,6 @@ import { ListeCekmecesiLazy } from "@/features/liste/components/liste-cekmecesi-
import { KaydetBannerLazy } from "@/features/liste/components/kaydet-banner-lazy"; import { KaydetBannerLazy } from "@/features/liste/components/kaydet-banner-lazy";
import { TercihProfiliKapisiLazy } from "@/features/liste/components/tercih-profili-kapisi-lazy"; import { TercihProfiliKapisiLazy } from "@/features/liste/components/tercih-profili-kapisi-lazy";
import { HeaderGate } from "@/components/header-gate"; import { HeaderGate } from "@/components/header-gate";
import { ProgressiveBlur } from "@/components/ui/skiper-ui/skiper41";
import { DevPanelMount } from "@/components/dev/dev-panel-mount"; import { DevPanelMount } from "@/components/dev/dev-panel-mount";
import { JsonLd, organizationJsonLd, webSiteJsonLd, SITE_URL } from "@/lib/seo"; import { JsonLd, organizationJsonLd, webSiteJsonLd, SITE_URL } from "@/lib/seo";
import "./globals.css"; import "./globals.css";
@@ -84,23 +83,12 @@ export default function RootLayout({
> >
<body className="min-h-dvh flex flex-col bg-slate-50"> <body className="min-h-dvh flex flex-col bg-slate-50">
<HeaderGate> <HeaderGate>
{/* Site geneli progressive blur — üst ve alt */} {/* Site geneli progressive blur — üst ve alt. Stil globals.css'te
<div className="pointer-events-none fixed inset-x-0 top-0 z-40 h-28 print:hidden"> (.kt-sayfa-blur): iOS/iPadOS'ta fixed + backdrop-filter katmanı
<ProgressiveBlur kaydırmada ekranın ortasına kayıyor, orada bulanıklık @supports
position="top" ile düşürülüp degrade fade korunuyor. */}
backgroundColor="#f8fafc" <div className="kt-sayfa-blur kt-sayfa-blur-ust print:hidden" aria-hidden />
height="112px" <div className="kt-sayfa-blur kt-sayfa-blur-alt print:hidden" aria-hidden />
blurAmount="6px"
/>
</div>
<div className="pointer-events-none fixed inset-x-0 bottom-0 z-40 h-28 print:hidden">
<ProgressiveBlur
position="bottom"
backgroundColor="#f8fafc"
height="112px"
blurAmount="6px"
/>
</div>
<SiteTopBanner /> <SiteTopBanner />
<SiteHeader /> <SiteHeader />
</HeaderGate> </HeaderGate>