Taşma

The CSS Podcast - 034: Overflow

İçerik, üst öğesinin dışına çıktığında bunu işlemek için birçok seçeneğiniz vardır. Kaydırarak ek alan ekleyebilir, taşan kenarları kırpabilir, kesme noktasını üç nokta ile belirtebilir ve daha birçok işlem yapabilirsiniz. Taşma, özellikle telefon uygulamaları ve birden fazla ekran boyutu için geliştirme yaparken göz önünde bulundurulması gereken önemli bir faktördür.

CSS'de iki farklı kırpma seçeneği vardır: text-overflow, metin satırlarını kırpmaya yardımcı olurken overflow özellikleri, kutu modelinde taşmayı kontrol etmeye yardımcı olur.

text-overflow ile tek satırda taşma

Metin düğümleri içeren herhangi bir öğede(ör. paragraf, <p>) text-overflow özelliğini kullanın. Metnin, öğenin kullanılabilir alanına sığmadığında nasıl görüneceğini belirtir. Bir sayfadaki tüm görüntülenebilir HTML metni metin düğümlerindedir. text-overflow özelliğini kullanmak için sarmalanmamış tek bir metin satırına ihtiyacınız vardır. Bu nedenle, overflow özelliğini hidden olarak ayarlamanız ve sarmalamayı önleyen bir white-space değerine sahip olmanız gerekir.

p {
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
}

Taşma özelliklerini kullanma

Taşma özellikleri, alt öğeleri için mevcut alandan daha fazla yer gerektiğinde ne olacağını kontrol etmek amacıyla bir öğede ayarlanır. Bu durum, Google Haritalar gibi etkileşimli bir haritada olduğu gibi kasıtlı olabilir. Bu tür haritalarda kullanıcı, belirli bir boyuta kırpılmış büyük bir resimde kaydırma yapar. Ayrıca, kullanıcının metin balonuna sığmayan uzun bir mesaj yazdığı sohbet uygulamalarında olduğu gibi, bu durum kasıtsız da olabilir.

Taşma menüsünü iki bölüm halinde düşünebilirsiniz. Üst öğenin, değişmeyecek şekilde kesin olarak sınırlandırılmış bir alanı var. Bunu bir pencere olarak düşünebilirsiniz. Alt öğeler, üst öğeden daha fazla alan isteyen içeriklerdir. Bunu, pencereden baktığınız şey olarak düşünebilirsiniz. Taşmayı yönetmek, pencerenin bu içeriği nasıl çerçeveleyeceğini belirlemeye yardımcı olur.

Dikey ve yatay eksende kaydırma

overflow-y özelliği, cihazın görüntü alanının dikey ekseni boyunca fiziksel taşmayı kontrol eder. Bu nedenle, yukarı ve aşağı kaydırma yapılır.

overflow-x özelliği, cihazın görünüm alanının yatay ekseni boyunca taşmayı kontrol eder. Bu nedenle, sola ve sağa kaydırma işlemi yapılır.

Kaydırma yönü için mantıksal özellikler

Browser Support

  • Chrome: 135.
  • Edge: 135.
  • Firefox: 69.
  • Safari: not supported.

Source

overflow-inline ve overflow-block özellikleri, taşmayı belge yönüne ve yazma moduna göre ayarlar.

overflow kısaltması

overflow kısaltması, hem overflow-x hem de overflow-y stillerini tek bir satırda ayarlar:

overflow: hidden scroll;

İki anahtar kelime belirtilirse ilki overflow-x, ikincisi ise overflow-y için geçerli olur. Aksi takdirde hem overflow-x hem de overflow-y aynı değeri kullanır.

Değerler

Gmail mülkleri için kullanılabilen değerleri ve anahtar kelimeleri daha yakından inceleyin.overflow

overflow: visible (varsayılan)
Özellik ayarlanmadığında web için varsayılan değer overflow: visible olur. Bu sayede içerik hiçbir zaman yanlışlıkla gizlenmez ve "içeriği asla gizleme" veya "kesin düzenlerin güvenli düzenleri" gibi temel ilkeler uygulanır.
overflow: hidden
overflow: hidden ile içerik, belirtilen yönde kırpılır ve gösterilmesi için kaydırma çubukları sağlanmaz.
overflow: scroll
overflow: scroll, kullanıcıların içerikte kaydırma yapmasına olanak tanımak için kaydırma çubuklarını etkinleştirir. İçerik taşmıyor olsa bile kaydırma çubukları gösterilir. Bu, gelecekte yeniden boyutlandırma gibi nedenlerle kaydırılabilir olabilecek bir kapsayıcı varsa gelecekteki düzen kaymalarını azaltmak ve kullanıcıyı kaydırılabilir alanlara görsel olarak hazırlamak için harika bir yöntemdir.
overflow: clip
overflow: hidden gibi, overflow: clip içeren içerik de öğenin dolgu kutusuna kırpılır. clip ile hidden arasındaki fark, clip anahtar kelimesinin programatik kaydırma dahil tüm kaydırmaları da yasaklamasıdır.
overflow: auto
Son olarak, en sık kullanılan değer overflow: auto. Bu, kullanıcının tercihlerine saygı duyar ve gerekirse kaydırma çubuklarını gösterir ancak varsayılan olarak bunları gizler ve kaydırma sorumluluğunu kullanıcıya ve tarayıcıya verir.

Kaydırma ve taşma

Bu overflow davranışların çoğu kaydırma çubuğu oluşturur ancak taşma kapsayıcınızda kaydırmayı kontrol etmenize yardımcı olabilecek birkaç belirli kaydırma davranışı ve özelliği vardır.

Kaydırma ve erişilebilirlik

Kaydırılabilir alanın odaklanmayı kabul ettiğinden emin olmanız önemlidir. Böylece klavye kullanıcısı kutuya sekme tuşuyla gidebilir ve kaydırmak için ok tuşlarını kullanabilir.

Kaydırma kutusunun odağı kabul etmesine izin vermek için tabindex="0", aria-labelledby özelliğine sahip bir ad ve uygun bir role özelliği ekleyin. Örneğin:

<div tabindex="0" role="region" aria-labelledby="id-of-descriptive-text">
    content
</div>

CSS daha sonra, kutunun odaklandığını belirtmek için kullanılabilir. outline özelliği, kutunun artık kaydırılabileceğine dair görsel bir ipucu verir.

Adrian Roselli, Using CSS to Enforce Accessibility (Erişilebilirliği Zorunlu Kılmak İçin CSS Kullanma) başlıklı makalesinde CSS'nin erişilebilirlik gerilemelerini önlemeye nasıl yardımcı olabileceğini gösteriyor. Örneğin, yalnızca doğru özellikler kullanılıyorsa kaydırmayı etkinleştirmek ve odak göstergesini eklemek için. Aşağıdaki kurallar, yalnızca tabindex, aria-labelledby ve role özelliği olan kutuları kaydırılabilir hale getirir.

[role][aria-labelledby][tabindex] {
  overflow: auto;
}

[role][aria-labelledby][tabindex]:focus {
  outline: .1em solid blue;
}

Kutu modelinde kaydırma çubuğunun konumu

Kaydırma çubukları dolgu kutusunda yer kaplar ve inline ise overlaid değilse alan için rekabet edebilir. Kutu modeli modülü, bu olası düzen kayması kaynağı hakkında daha fazla bilgi verir.

root-scroller ve implicit-scroller

Bazı kaydırma çubuklarının yenilemek için çekme davranışı ve diğer özel davranışları olduğunu fark edebilirsiniz. Bu durum özellikle mobil ve karma uygulamalar geliştirirken geçerlidir. Bu kaydırma davranışı, kök kaydırıcıda gerçekleşir. Bir sayfada her zaman yalnızca bir kök kaydırma çubuğu bulunur. Varsayılan olarak documentElement, sayfanın kök kaydırıcısıdır. Ancak kök kaydırıcının hangi öğe olduğunu değiştirerek özel davranışlar, documentElement dışındaki kaydırıcılara uygulanabilir. Bu yeni kaydırıcıya örtülü kök kaydırıcı adını veriyoruz.

Kök kaydırıcı oluşturmak için bir kapsayıcıyı sabit olarak konumlandırıp tüm görüntü alanını kapladığından ve kaydırıcıyla birlikte en üstte z-index olduğundan emin olarak kaydırıcı tanıtımı adı verilen bir özellikten yararlanabilirsiniz. Kök kaydırma ile iç içe yerleştirilmiş örtülü kaydırma arasındaki farkı burada deneyimleyin.

Videoda, geliştirilmiş kaydırma davranışı olmayan örtülü bir kaydırıcıyı kaydırmaya kıyasla,
sekme davranışı ve yeni stil özellikleri içeren bir kök kaydırıcı gösteriliyor.

Kaydırma çubuğunuzu biçimlendirme

Kaydırma çubuğunuzu sitenizin tasarımına dahil edecek şekilde biçimlendirebilirsiniz. scrollbar-color, kaydırma çubuğunun başparmağı ve oluğu için rengi ayarlar.

Kaydırma çubuğunun genişliğini değiştirmek için scrollbar-width simgesini kullanın. Bunu rastgele bir uzunluğa ayarlayamazsınız ancak thin kaydırma çubuğu veya none istediğinizi belirtebilirsiniz.

scroll-behavior

Browser Support

  • Chrome: 61.
  • Edge: 79.
  • Firefox: 36.
  • Safari: 15.4.

Source

scroll-behavior, öğelere tarayıcı kontrollü kaydırmayı etkinleştirmenize olanak tanır. Bu ayar, .scrollTo() gibi sayfa içi gezinme işlemlerinin veya bağlantıların nasıl işleneceğini belirtmenize olanak tanır.

Bu özellik, özellikle kullanıcı tercihine göre kaydırma davranışını belirtmek için prefers-reduced-motion ile birlikte kullanıldığında yararlıdır.

@media (prefers-reduced-motion: no-preference) {
  .scroll-view {
    scroll-behavior: auto;
  }
}

overscroll-behavior

Browser Support

  • Chrome: 63.
  • Edge: 18.
  • Firefox: 59.
  • Safari: 16.

Source

Bir modal yer paylaşımının sonuna ulaştıktan sonra kaydırmaya devam ettiyseniz ve yer paylaşımının arkasındaki sayfanın hareket ettiğini gördüyseniz bu, kaydırma zincirleme veya üst kaydırma kapsayıcısına yükseltme işlemidir. overscroll-behavior özelliği, taşma kaydırmanın üst kapsayıcıya sızmasını (kaydırma zincirleme olarak adlandırılır) önlemenizi sağlar.

Kaydırarak tutturma

Genellikle sorunsuz bir şekilde kaydırarak içeriği kaydırma alanında istediğiniz yere yerleştirebilirsiniz. Resim galerileri veya sayfaları ya da slaytları taklit eden içerikler gibi bazı tasarımlarda, içeriğin kaydırma alanına tutturulmasını isteyebilirsiniz.

Kaydırma kapsayıcısını ayarlama

Kaydırma tutturmayı etkinleştirmek için kaydırma kapsayıcısına scroll-snap-type ekleyin. Öncelikle kaydırma tutturmanın hangi eksende gerçekleşeceğini tanımlarsınız. Bu, mantıksal bir özellik (block veya inline), fiziksel bir özellik (x veya y) ya da both olabilir.

Kaydırma yapıştırmanın ne kadar katı olması gerektiğini de tanımlayabilirsiniz. Varsayılan katılık proximity'dır. Bu, kaydırma kapsayıcısının mümkünse yerine oturmaya çalışacağı anlamına gelir. Kaydırma kapsayıcısının her zaman yerine oturmasını sağlamak için katılığı mandatory olarak da ayarlayabilirsiniz.

.scroll-container {
    scroll-snap-type: block mandatory;
}

Kaydırma sabitleme, bir öğeyi kaydırma kapsayıcısının tam sınırları içinde hizalar. Ancak kaydırma kapsayıcısının bir kısmı görünmüyorsa ne olur? Örneğin, kaydırma kapsayıcısının bir kısmını kaplayan sabit bir üstbilginiz olabilir. Yakalanan öğelerin kaydırma kapsayıcısının görünür kısmıyla hizalanmasına yardımcı olmak için scroll-padding değerini ayarlayabilirsiniz.

Tutulabilir öğeleri kontrol etme

Bir öğeyi yapışabilir hâle getirmek için scroll-snap-align özelliğini start, end veya center olarak ayarlayın. Kaydırma tutturma yönü both ise iki değer ayarlayabilirsiniz. Bu, öğenin bir kenarının kaydırma alanının kenarıyla hizalanıp hizalanmayacağını veya ortalanıp ortalanmayacağını belirler.

Yakalama yapılan öğenin kenarlarındaki boşluğu scroll-margin ile ayarlayabilirsiniz:

scroll-margin, bir öğeye kaydırırken dolguyu ayarlamak için de kullanılır:

Kaydırmayı daha yapışkan hale getirmek için kaydırma kapsayıcısındaki bir öğeye scroll-snap-stop: always ekleyebilirsiniz. Tek bir kaydırmada birden fazla öğeyi kaydırmanızı engellemez. Kaydırma hareketini, kaydırmanın ataletle devam edeceği şekilde sonlandırırsanız kaydırma, devam etmek yerine bir sonraki tutturma konumunda sona erer.

Anlayıp anlamadığınızı kontrol etme

Metin taşması ve öğe taşması aynı mı?

doğru
Metin taşması, öğe taşmasıyla karşılaştırıldığında özel bir durumdur.
yanlış
Metin taşması genellikle satır içi taşma, öğe taşması ise blok taşması ile ilgilidir.

overflow özelliği 2 anahtar kelimeyi kabul ediyor. İlk anahtar kelime hangi eksen için?

yatay
🎉
dikey
Kısa yazım biçiminde iki değer geçirilirken ilk değer neredeyse her zaman yataydır.

Kaydırma çubukları, satır içi olarak gösterildiğinde kutu modelindeki hangi alanı kullanır?

içerik kutusu
Tekrar deneyin.
dolgu kutusu
overlay modundaki kaydırma çubukları dolguyla çakışır, inline modunda ise dolguya eklenir.
border-box
Tekrar deneyin.
kenar boşluğu kutusu
Tekrar deneyin.

İç içe yerleştirilmiş bir örtülü kaydırma çubuğunda kaydırmadan kaynaklanan ekstra momentumu yakalamak için hangi özelliği kullanırsınız?

scroll-behavior
Tekrar deneyin.
scroll-hint
Tekrar deneyin.
overscroll-behavior
Bu özelliği contain olarak ayarlamak kaydırmayı engeller.
scroll-padding
Tekrar deneyin.
overscroll-effect
Tekrar deneyin.

Bir kaydırma kapsayıcısının mümkünse tutturulmuş bir öğede durması gerektiğini hangi değer belirtir?

required
Yanlış.
mandatory
Doğru!
0px
Yanlış.
proximity
Yanlış.

scrollbar-width için geçerli değerler nelerdir?

5px
Yanlış.
thin
Doğru!
medium
Yanlış.
none
Doğru!

Kaynaklar

Smashing Magazine'den CSS'de Taşma ve Veri Kaybı