Bir <dialog> öğesi, showModal() kullanılarak kalıcı olarak açıldığında tarayıcı, öğeyi en üst katmana taşır ve belgenin geri kalanını etkin değil olarak işaretler. Bu, alttaki sayfada işaretçi tıklamalarını ve klavye odağını engellese de kaydırmayı engellemez:
- İşaretçi veya dokunma hareketi
::backdropüzerindeyken kaydırma yapıldığında alttaki sayfa kaydırılır. - İletişim kutusu kaydırma sınırına ulaştığında veya iletişim kutusunun içeriği taşmıyorsa hemen
<dialog>içinde kaydırma işlemi, temel sayfaya zincirlenir.
CSS Overscroll Behavior spesifikasyonuna göre overscroll-behavior, kaydırılamayan kaydırma kapsayıcıları (overflow: hidden veya içeriği şu anda taşmayan overflow: auto içeren öğeler) dahil olmak üzere tüm kaydırma kapsayıcısı öğeleri için geçerlidir. <dialog> üzerinde overscroll-behavior: contain ile overflow: hidden ve dialog::backdrop üzerinde overscroll-behavior: contain özelliklerini birleştirerek, yalnızca CSS kullanarak alttaki sayfanın kaydırılmasını önleyebilirsiniz.
Uygulama
1. <dialog> öğesinde kaydırma zincirini kontrol altına alın
Kullanıcı aracısı stil sayfası, <dialog> üzerinde overflow: auto değerini ayarlayarak varsayılan olarak kaydırma kapsayıcısı haline getirir. dialog:modal (veya dialog) için overscroll-behavior: contain (veya none) uygulayın.
2. ::backdrop öğesini kaydırma kapsayıcısına dönüştürün ve kaydırma işlemini kapsayın
Varsayılan olarak dialog::backdrop, overflow: visible değerine sahiptir. Bu, kaydırma kapsayıcısı olmadığı ve overscroll-behavior değerini yoksaydığı anlamına gelir. dialog::backdrop üzerinde overflow: hidden özelliğini ayarlayarak kaydırılamayan bir kaydırma kapsayıcısı oluşturmanız ve bunu overscroll-behavior: contain ile eşlemeniz gerekir. Böylece, arka plan üzerinde gerçekleştirilen kaydırma hareketleri yakalanır ve alttaki belgeye ulaşmaz.
Örnek Kod
dialog:modal {
/* MANDATORY: Prevent scroll gestures inside the modal (even when its content
does not overflow) from chaining to the underlying page. */
overscroll-behavior: contain;
}
dialog::backdrop {
/* MANDATORY: ::backdrop defaults to overflow: visible (not a scroll container).
Set overflow: hidden so it becomes a non-scrollable scroll container that
honors overscroll-behavior. */
overflow: hidden;
overscroll-behavior: contain;
}
En İyi Uygulamalar ve Kısıtlamalar
- ZORUNLU:
<dialog>öğesinin kendisinde (dialog:modalseçiciyi kullanarak) vedialog::backdropöğesindeoverscroll-behavior: containdeğerini ayarlayın. Bu beyan olmadan, arka plan veya iletişim kutusu içindeki kaydırma hareketleri sayfaya zincirlenmeye devam eder. - ZORUNLU:
dialog::backdropüzerindeoverflow: hidden(veyaoverflow: auto) değerini ayarlayarak kaydırma kapsayıcısı haline getirin. Bu beyan olmadan::backdropvarsayılan olarakoverflow: visibledeğerine ayarlanır veoverscroll-behavioretkili olmaz. dialog::backdropveyadialogüzerindeoverflow: clipya daoverflow: visibleKULLANMAYIN. İki değer de kaydırma kapsayıcısı oluşturmadığındanoverscroll-behavioruygulanmaz.- Bir iletişim kutusu açıldığında arka plan kaydırmayı kilitlemek için
<html>veya<body>öğesineoverflow: hiddenya daposition: fixedUYGULAMAYIN. Kök taşmasını değiştirmek, sayfa kaydırma çubuğunu kaldırır (yatay düzen kaymasına neden olur), sayfa kaydırma konumunu sıfırlayabilir veya atlayabilir ve temel sayfadakiposition: stickyöğelerini bozabilir.
Yedek Stratejiler
overscroll-behavior CSS özelliği, taşan içeriğe sahip kaydırma kapsayıcıları için tüm önemli tarayıcılarda desteklenir. Ancak kaydırılamayan kaydırma kapsayıcılarında overscroll-behavior özelliğine uymak, özellik algılaması yapılamayan daha yeni bir spesifikasyondur.
@supports (overscroll-behavior: contain) veya CSS.supports('overscroll-behavior', 'contain') ile kaydırılamayan kapsayıcı desteğini özellik algılamaya ÇALIŞMAYIN. Tüm modern tarayıcılar, overscroll-behavior: contain özellik söz dizimini destekler ve yalnızca içerik taştığında zorunlu kılsalar bile true değerini döndürür.
Bunun yerine, kaydırılamayan kaydırma kapsayıcılarında kaydırma kapsayıcısını progresif geliştirme olarak değerlendirin:
- Kaydırılamayan kaydırma kapsayıcılarında
overscroll-behaviorözelliğini destekleyen tarayıcılarda, arka plan sayfasının kaydırılması hemdialog::backdropüzerinde hem de<dialog>içinde (içeriğinin taşmasından bağımsız olarak) tamamen engellenir. - Kaydırılamayan kaydırma kapsayıcılarında
overscroll-behaviorözelliğini henüz desteklemeyen tarayıcılarda,dialogöğesindekioverscroll-behavior: contain, iletişim kutusunun kendi içeriği taştığında ve kaydırılabilir olduğunda kaydırma zincirini engellemeye devam eder. Bu sıradashowModal(), klavye odağını yakalamaya ve arka plan dokümanınıinertolarak işaretlemeye devam eder. <html>veya<body>öğesineoverflow: hiddenya daposition: fixeduygulayan eski geçici çözümler yerine progresif geliştirmeden yararlanmanız önerilir. Bu yöntem, kök kaydırma çubuğunu kaldırmaz, yatay düzen kaymalarına neden olmaz, sayfa kaydırma konumunu atlamaz veya temel sayfadakiposition: stickyöğelerini bozmaz.