CSS ile resim, video ve iframe yapılarını uyumlu web gereği genişlik/yükseklik oranına (aspect ratio) göre küçültmek veya büyültmek için farklı bir yöntem kullanıyorduk. Artık aspect-ratio tanımı ile alternatif çözüme gerek kalmadı. Ayrıca bu tanım ile Chrome ekibinin performans kriterlerinden Cumulative Layout Shift (CLS): sorununu da çözebiliyoruz.

Şimdi özelliğin bize kazandırdıklarına bir göz atalım.

Eski çözüm yolları

Uyumlu(responsive) web hayatımıza girdiğinden beri bazı sorunlarla karşılaşıyoruz. Bunlardan en önemlisi galiba kullandığımız resimlerin boyutlarının istediğimiz oranda küçülmesi olabilir. Bu sorunu aşmak için çeşitli yöntemlerimiz vardı.

Bunlardan birisi resimlere width: 100%; verip yüksekliğinide height: auto; tanımlayıp esnek bir resim el etmekti.

Ancak bu yöntem ardalan resimlerinde işe yaramıyordu.

Mavi kutunun sağ alt kısmındaki boyutlandırma ikonundan büyültüp küçülterek sonucu görebilirsiniz.

Bir diğer yöntem de yüzde padding-top değeri kullanımıdır.

  • 1:1 aspect ratio = 1 / 1 = 1 = padding-top: 100%
  • 4:3 aspect ratio = 3 / 4 = 0.75 = padding-top: 75%
  • 3:2 aspect ratio = 2 / 3 = 0.66666 = padding-top: 66.67%
  • 16:9 aspect ratio = 9 / 16 = 0.5625 = padding-top: 56.25%

Yukarıdaki gibi bir hesaplama ile resimlerin belli bir boy/en oranıyla küçülmesini sağlayabiliyorduk.

aspect-ratio tanımı

Tabi sonra bu işi kökten çözen aspect-ratio özelliği çıktı ve bir satır CSS kodu ile çözüm oluşturdu.

Aynı örneği aspect-ratio ile yaparsak.

Bu tanımı sadece resim, video ve iframe’de değil normal bir etikete de uygulayabiliriz. Örneğin üç kolonlu bir içeriğin div‘lerine uygulayabiliriz.

Tabi içerik eğer en/boy oranını bozacak şekilde uzunsa oran bozuluyor. Ancak normal şartlarda en/boy oranını koruyor.

aspect-ratio medya sorguları

aspect-ratio medya sorgularında da kullanılabiliyor.

@media (aspect-ratio: 1/1) {
  body {
    background: lightblue;
  }
}

gibi sadece o orana göre kod yazıldığı gibi min-aspect-ratio ve max-aspect-ratio gibi daha geniş yelpazeye göre de medya sorgusu ekleyebiliyoruz.

performansa aspect-ratio’lu çözüm

Yazının başında da belirttiğimiz gibi aspect-ratio tanımı CLS çözümü olarakta kullanılabilmektedir. Aşağıda görüldüğü gibi resmin sonradan yüklenmesiyle layout zıplaması oluyor.

aspect-ration CLS çözümü

Cumulative Layout Shift (CLS): Tarayıcı ek veriler yüklendikçe sayfada meydana gelen zıplamayı (shift) ölçer.

Bu sorunu aşmak için resimlerimize aspect-ratio tanımlamamız yeterli. Performans açısından süper bir kolaylık.

Tarayıcı desteği konusunda da gayet iyi bir durumda.

Kalın sağlıcakla.

Kaynaklar

Yukarıda bahsedildiği gibi web sayfalarında kullanılan bileşenleri HTML karşılamalı bence. Tabi burada şöyle bir şey var, CSS ile de bu bileşenin her yerine stil verebilelim. <progress> elementi aslında tam bu kapsamda bir element. Her projede bir şekilde ürettiğimiz bu bileşenin standart hali.

Bu makalede <progress> elementini inceleyeceğiz. <progress> elementi kullanıcıya bir işlemin ilerleme durumu hakkında bilgi vermek için kullanılan yapılardır.

Hiç bir özniteliği (attribute) yoksa kara şimşek efekti ile görünür.

Öznitelikler

<progress> elementi iki adet öznitelik alır.

  • max özniteliği ilerleme çubuğunun en fazla alacağı değeri tanımlamamızı sağlıyor
  • value özniteliği ilerleme çubuğunun mevcut değerini göstermemizi sağlıyor

Stil vermek

Eğer Chrome Developer Tools’da “Show user agent shadow DOM” özelliği açıksa <progress> elementini incelediğinizde aşağıdaki gibi bir görüntü ile karşılaşacaksınız. Aslında bu bizim bu elemanın hangi alanlarına müdahale edebileceğimizi de gösteriyor.

Show user agent shadow DOM

Webkit tabanlı tarayıcılarda (Safari, Chrome, Opera, Edge, Samsung Internet) iki adet sözde sınıfı var. ::-webkit-progress-bar ve ::-webkit-progress-value Mozilla tabanlı tarayıcı (Firefox) da ::-moz-progress-bar sözde sınıfı var.

Tabi tasarım olarak daha güzel sonuç veren örnekler de yapılabilir.

Örneğin kaynağı Kaynaklar kısmında farklı örnekler de var.

Sonuç

HTML’de artık sabitleşmiş bileşenlerin çözümlerinin olması çok güzel. Bu elementin benzeri <meter>elementi de var. <progress> ile <meter> arasındaki fark basitçe şöyle tanımlanabilir; <progress> dinamik <meter> statik sonuçları göstermek için kullanılıyor.

Kalın sağlıcakla.

Kaynaklar

Daha önce bu konuda tasarımcı arkadaşların bir isteği olmuştu. Yazının rengi ile alt çizginin rengini ayırmak ve alt çizginin kalınlığını değiştirmek istiyorduk. O zamanlar böyle bir imkan yoktu. Hatırladığım border-bottom ile veya resim ile yapmıştık ama sonra iptal olmuştu.

Alternatif çözümlerin bazı sorunları oluyor bir tanesi metnin temel çizgisinin altında kalan karakterlerin (ğ, g, y, p gibi) üzerini çizmesi.

text-decoration ve diğer tanımları alt çizgi olarak belirtmek yanlış oldu ancak bizim eskiden beri bildiğimiz anlamıyla bu bir metin alt çizgi stillendirme olduğu için yazının başlığını bu şekilde kullanmayı tercih ettim.

Metinlerin altındaki / üstündeki / üzerindeki çizgileri artık basit ve standart yollarla ekleyip stil verebiliyoruz.

text-decoration-line

text-decoration-line özelliği çizilecek çizginin türünü ayarlamamızı sağlar. Buradaki türden kasıt alt çizgi (underline), üst çizgi (overline) ve üstünü çizme (line-through) değerleridir. blink değeri vardı ancak uygulamadan kaldırıldı. Tek değer alabildiği gibi birden fazla değer de alabilir.

text-decoration-thickness

text-decoration-thicknessözelliği çizilen çizginin kalınlığını belirlememizi sağlar.

Bu özellik şu değerler alır. auto (tarayıcı karar versin demek), sayısal değerler (3px, 2em) ve yüzde değerler (tarayıcı desteği düşük) alabiliyor.

text-decoration-color

text-decoration-color özelliği çizilen çizginin rengini tanımlamamızı sağlar.

Tüm renk tanımlarını alabiliyor. Benim yıllar önce aradığım özelliğe nihayet erişmiş oldum.

text-decoration-style

text-decoration-style özelliği çizilen çizginin stilini tanımlamamızı sağlar.

  • dashed (tireli)
  • double (çift çizgi)
  • dotted (nokta)
  • solid (tek çizgi)
  • wavy (dalgalı)

değerlerini alabiliyor. wavy çok hoşuma gitti. Hemen sitemdeki bağlantıların stilini değiştirip dalgalı yaptım. :)

text-decoration

Yukarıdaki tanımların kısayolu olarak bu özelliği kullanıyoruz.

Safari’de kısayol thickness değeri olmayan ve -webkit- ön eki ile çalışıyor.

Bu özelliklerin dışında metin altı(üstü, üzeri) ile alakalı bir iki tanım daha var. Onları da bu konu içinde incelemekte fayda var.

text-underline-offset

text-underline-offset özelliği alt çizginin konumunu belirlemek için kullanılıyor. Bu özellik overline ve line-through tanımlarına etki etmiyor.

Bu özellikle eksi değer vererek yazı üzerine ve üstüne çıkarabiliyoruz. Ancak yukarıdaki tanım gibi becerili değil. Sadece yazının üzerine gelsin ama yazının arkasında kalsın isteği olursa bu çözüyor.

text-decoration-skip-ink

Bir diğer özellik text-decoration-skip-ink özelliği. Bu özellik metnin temel çizgisinin altında kalan karakterlerin (ğ, g, y, p gibi) karakterlerin üzeri çizilsin mi yoksa çizilmesin mi kararını vermemizi sağlıyor.

Kalın sağlıcakla.

Kaynaklar