Reklam öğesi listesi stili

Bir listeye stil uygulamanın bazı yararlı ve yaratıcı yollarına göz atın.

Michelle Barker
Michelle Barker

Liste dendiğinde aklınıza ne geliyor? En belirgin örnek, alışveriş listesidir. Listelerin en basiti olan alışveriş listesi, belirli bir düzene sahip olmayan bir öğe koleksiyonudur. Ancak web'de listeleri her türlü şekilde kullanıyoruz. Bir mekanda yaklaşan konserlerin koleksiyonu mu? Büyük olasılıkla bir liste. Çok adımlı bir rezervasyon süreci mi? Muhtemelen bir liste. Resim galerisi mi? Bu bile altyazı içeren resimlerin listesi olarak kabul edilebilir.

Bu makalede, web'de bize sunulan farklı HTML listesi türlerini ve bunların ne zaman kullanılacağını ele alacağız. Buna aşina olmayabileceğiniz bazı özellikler de mevcuttur. Ayrıca, CSS ile stil uygulamanın bazı yararlı ve yaratıcı yollarına da göz atacağız.

Liste ne zaman kullanılır?

Öğelerin anlamsal olarak gruplandırılması gerektiğinde HTML liste öğesi kullanılmalıdır. Yardımcı teknolojiler (ekran okuyucular gibi), kullanıcıya bir liste olduğunu ve öğe sayısını bildirir. Örneğin, bir alışveriş sitesindeki ürün ızgarasını düşünün. Bu bilgileri bilmek çok faydalı olur. Bu nedenle, liste öğesi kullanmak iyi bir seçim olabilir.

Türleri listeleyin

İşaretleme söz konusu olduğunda üç farklı liste öğesinden birini seçebiliriz:

  • Sırasız liste
  • Sıralı liste
  • Açıklama listesi

Hangisini seçeceğiniz kullanım alanına bağlıdır.

Sırasız liste (ul)

Sıralı olmayan liste öğesi (<ul>), listedeki öğeler belirli bir sıraya uymadığında en kullanışlıdır. Bu, varsayılan olarak madde listesi olarak gösterilir. Örneğin, sıranın önemli olmadığı bir alışveriş listesi.

Ekmek, süt, elma gibi öğelerin yer aldığı bir alışveriş listesi.

Web'de daha yaygın olarak kullanılan bir örnek gezinme menüsüdür. Menü oluştururken yardımcı teknolojilerden yararlanmak için ul öğesini bir nav öğesine sarmalamak ve menüyü bir etiketle tanımlamak iyi bir uygulamadır. Ayrıca menüdeki mevcut sayfayı da tanımlamamız gerekir. Bunu aria-current özelliğini kullanarak yapabiliriz:

<nav aria-label="Main">  
  <ul>  
    <li>  
      <a href="/page-1" aria-current="page">Menu item 1</a>  
    </li>  
    <li>  
      <a href="/page-2">Menu item 2</a>  
    </li>  
    <li>  
      <a href="/page-2">Menu item 2</a>  
    </li>  
      …  
    </ul>  
</nav>  

Menü yapısıyla ilgili bu makalede, gezinme menülerimizin herkes tarafından erişilebilir olmasını sağlayacak çeşitli öneriler özetlenmiştir.

Sıralı liste (ol)

Birden fazla adımdan oluşan bir işlem gibi öğelerin sırası önemli olduğunda sıralı liste öğesi (<ol>) en iyi seçimdir. Varsayılan olarak, liste öğeleri numaralandırılır. Adımların sırayla tamamlanması gereken bir dizi talimat buna örnek olarak gösterilebilir.

Sütle çay hazırlamak için gereken adımların ayrıntılı olarak yer aldığı bir liste.

Hem <ol> hem de <ul> öğeleri doğrudan alt öğeleri olarak yalnızca <li> öğeleri içerebilir.

Açıklama listesi (dl)

Açıklama listesi terimler (<dt> öğeleri) ve açıklamalar (<dd>) içerir. Her terime birden fazla açıklama eşlik edebilir. Olası kullanım alanları arasında terimler sözlüğü veya restoran menüsü yer alabilir. Tarayıcılar <dd> öğesini girintiye alma eğiliminde olsa da açıklama listeleri varsayılan olarak işaretleyicilerle gösterilmez.

HTML'de terimlerin açıklamalarıyla birlikte <div> kullanılarak gruplandırılmasına izin verilir. Daha sonra göreceğimiz gibi, bu özellik stil oluşturma amacıyla yararlı olabilir.

<!-- This is valid --> 
<dl>  
    <dt>Term 1</dt>  
    <dd>This is the first description of the first term in the list</dd>  
    <dd>This is the second description of the first term in the list</dd>  
    <dt>Term 2</dt>  
    <dd>This is the description of the second term in the list</dd>  
</dl>

<!-- This is also valid --> 
<dl>  
    <div>  
        <dt>Term 1</dt>  
        <dd>This is the first description of the first term in the list</dd>  
        <dd>This is the second description of the first term in the list</dd>  
    </div>  
    <div>  
        <dt>Term 2</dt>  
        <dd>This is the description of the second term in the list</dd>  
    </div>  
</dl>  

Basit liste stili

Listelerin en basit kullanımlarından biri, gövde metni bloğunda kullanılmasıdır. Çoğu zaman bu basit listelerde ayrıntılı bir stil gerekli değildir ancak sıralı veya sırasız bir listenin işaretçilerini belirli bir ölçüde özelleştirmek isteyebiliriz. Örneğin, marka rengi kullanabilir veya madde işaretlerimiz için özel bir resim kullanabiliriz. list-style ve ::marker sözde öğesi ile birçok şey yapabiliriz.

::marker

Liste işaretçilerimize bazı temel stiller uygulamanın yanı sıra döngüsel madde işaretleri de oluşturabiliriz. Burada, ::marker sözde öğesinin content değeri için üç farklı resim URL'si kullanıyoruz. Bu, alışveriş listesi örneğimizin el yazısı hissini artırır (tüm öğeler için tek bir resim kullanmak yerine):

::marker {  
    content: url("/marker-1.svg") ' ';  
}

li:nth-child(3n)::marker {  
    content: url("/marker-2.svg") ' ';  
}

li:nth-child(3n - 1)::marker {  
    content: url("/marker-3.svg") ' ';  
}  

Özel sayaçlar

Bazı sıralı listelerde sayaç değerini kullanmak ancak ona başka bir değer eklemek isteyebiliriz. list-item sayacını, işaretçimizin content özelliği için değer olarak kullanabilir ve başka herhangi bir içerik ekleyebiliriz:

::marker {  
    content: counter(list-item) '🐈 ';  
}  

Sayaçlarımız otomatik olarak bir artar ancak liste öğesinde counter-increment mülkünü ayarlayarak farklı bir değerle artmalarına izin verebiliriz. Örneğin, bu işlem sayaçlarımızı her seferinde üç artırır:

li {  
    counter-increment: list-item 3;  
}  

Sayaçlarla ilgili daha birçok konuyu inceleyebiliriz. CSS Listeleri, İşaretleri ve Sayaçları makalesinde, bazı olasılıklar daha ayrıntılı olarak açıklanmaktadır.

::marker stiliyle ilgili sınırlamalar

İşaretçilerimizin konumu ve stili üzerinde daha fazla kontrol sahibi olmak isteyebiliriz. Örneğin, işaretçiyi flexbox veya ızgara kullanarak konumlandırmak mümkün değildir. Bu durum, başka bir hizalamaya ihtiyacınız varsa bazen dezavantaj olabilir. ::marker, stil oluşturmak için sınırlı sayıda CSS özelliği gösterir. Tasarımımız için temel stil dışında bir şey gerekiyorsa başka bir sözde öğe kullanmak daha iyi olabilir.

Liste gibi görünmeyen listelerin stilini belirleme

Bazen listelerimizi, varsayılan stilden tamamen farklı bir şekilde biçimlendirebiliriz. Bu durum genellikle bir gezinme menüsünde yaşanır. Örneğin, genellikle tüm işaretçileri kaldırmak istediğimiz ve listemizi flexbox kullanarak yatay olarak görüntüleyebileceğimiz durumlarda bu durum yaşanır. list-style özelliğini none olarak ayarlamak yaygın bir uygulamadır. Bu durumda, işaretçi sözde öğesine DOM'da artık erişilemez.

::before ile özel işaretçiler

::before sözde öğesine stil uygulamak, ::marker kullanılmadan önce özel liste işaretçileri oluşturmanın yaygın bir yoluydu. Ancak şimdi bile, gerektiğinde görsel olarak karmaşık liste stilleri için daha fazla esneklik sağlayabiliyor.

::marker gibi content özelliğini kullanarak kendi özel madde işareti stillerimizi de ekleyebiliriz. ::marker'ün sunduğu otomatik avantajlardan yararlanamadığımız için ::marker'ü kullanmanın aksine bazı manuel yerleşimler yapmamız gerekiyor. Ancak flexbox ile nispeten kolayca konumlandırabiliriz ve bu, hizalama için daha fazla olasılık sunar. Örneğin, işaretçinin konumunu değiştirebiliriz:

::before öğesini kullanarak bir sıralı listeye stil verirken sayısal işaretçilerimizi eklemek için sayaçlar da kullanabiliriz.

li::before {  
  counter-increment: list-item;  
  content: counter(list-item);  
}  

::marker yerine ::before kullanmak, özel stil için CSS özelliklerine tam erişim sağlamanın yanı sıra animasyonlara ve geçişlere izin verir. ::marker için bu destek sınırlıdır.

Liste özellikleri

Sıralı liste öğeleri, çeşitli kullanım durumlarında bize yardımcı olabilecek bazı isteğe bağlı özellikleri kabul eder.

Ters listeler

Geçen yılın en iyi 10 albümünün listesini kullanıyorsak 10'dan 1'e doğru geri saymak isteyebiliriz. Bunun için özel sayaçlar kullanabilir ve bunları negatif olarak artırabiliriz. Dilerseniz HTML'de reversed özelliğini de kullanabilirsiniz. Sayaçlar tamamen sunum amaçlı olmadığı sürece, CSS'de sayacı negatif olarak artırmak yerine reversed özelliğini kullanmanın genellikle anlamlı olduğunu düşünüyorum. CSS yüklenemediyse sayıların HTML'de doğru şekilde geri sayım yaptığını görmeye devam edersiniz. Ayrıca, ekran okuyucunun listeyi nasıl yorumlayacağını da göz önünde bulundurmamız gerekir.

2021'in en iyi 10 albümünü gösteren bu demoyu inceleyin. Sayaçlar yalnızca CSS ile artırılmışsa ekran okuyucu kullanarak sayfaya erişen bir kullanıcı, sayıların yukarı doğru sayıldığına, yani 10 sayısının aslında bir numara olduğuna karar verebilir.

Demoda, reversed özelliğini kullanarak işaretçilerimizin zaten doğru değere sahip olduğunu ve bunun için herhangi bir çaba sarf etmemiz gerekmediğini görebilirsiniz. Ancak ::before sözde öğesini kullanarak özel liste işaretçileri oluşturuyorsak sayaçları ayarlamamız gerekir. Liste öğesi sayıcımıza negatif yönde artma talimatı vermemiz yeterlidir:

li::before {  
  counter-increment: list-item -1;  
  content: counter(list-item);  
}  

Bu, Firefox'ta yeterli olacaktır ancak Chrome ve Safari'de işaretçiler sıfırdan -10'a kadar geri sayar. Listeye start özelliğini ekleyerek bunu düzeltebiliriz.

Bölünmüş listeler

start özelliği, listenin başlaması gereken sayısal değeri belirtmemize olanak tanır. Bu özelliğin yararlı olabileceği durumlardan biri, bir listeyi gruplara ayırmak istediğinizdedir.

En popüler 10 albüm örneğimizi oluşturalım. İlk 20 albümü 10'ar grup halinde saymak istiyoruz. İki grup arasında başka sayfa içerikleri de vardır.

Sütunlar halinde düzenlenmiş bir taslak liste. Sütunların ortasında bir öğe yer alır.

HTML'mizde iki ayrı liste oluşturmamız gerekiyor ancak sayaçların doğru olduğundan nasıl emin olabiliriz? Şu anki işaretlememiz doğrultusunda her iki liste de 10'dan 1'e doğru geri sayım yapar. Bu, istediğimiz bir durum değildir. Ancak HTML'mizde bir start özellik değeri belirtebiliriz. İlk listemize 20 değerinde bir start eklersek işaretçiler bir kez daha otomatik olarak güncellenir.

<ol reversed start="20">  
  <li>...</li>  
  <li>...</li>  
  <li>...</li>  
</ol>  

Çok sütunlu liste düzeni

Önceki demolarda da görebileceğiniz gibi, çok sütunlu düzen bazen listelerimiz için uygun olabilir. Bir sütun genişliği ayarlayarak listemizin otomatik olarak duyarlı olmasını ve yalnızca yeterli alan olduğunda iki veya daha fazla sütuna yayılmasını sağlayabiliriz. Sütunlar arasında bir boşluk da ayarlayabilir ve daha fazla süsleme için stillendirilmiş bir sütun-kuralı (border özelliğine benzer bir kısaltma kullanarak) ekleyebilirsiniz:

ol {  
    columns: 25rem;  
    column-gap: 7rem;  
    column-rule: 4px dotted turquoise;  
}  

Sütunları kullandığımızda bazen liste öğelerimizde hoş olmayan boşluklarla karşılaşabiliriz. Bu, her zaman istediğimiz etkiyi yaratmayabilir.

İçeriğin iki sütun arasında nasıl bölündüğünü gösteren bir gösterim.

Liste öğelerimizde break-inside: avoid kullanarak bu zorunlu araları önleyebiliriz:

li {  
    break-inside: avoid;  
}  

Özel özellikler

CSS özel özellikleri, listeleri biçimlendirmek için birçok olanak sunar. Liste öğesinin dizini biliniyorsa mülk değerlerini hesaplamak için bu dizin kullanılabilir. Maalesef şu anda CSS'de öğenin dizini (her halükarda kullanılabilir bir şekilde) belirlenemez. Sayaçlar, değerlerini yalnızca content özelliğinde kullanmamıza izin verir ve hesaplamalara izin vermez.

Ancak HTML'mizdeki style özelliğinde öğenin dizini ayarlayabiliriz . Bu, özellikle şablonlama dili kullanıyorsak hesaplamaları daha uygun hale getirebilir. Bu örnekte, Nunjucks'ı kullanarak bunu nasıl ayarlayacağımız gösterilmektedir:

<ol style="--length: items|length">  
  
</ol>  

Splitting.js, istemci tarafında benzer bir işlev gerçekleştiren bir kitaplıktır.

Özel mülk değerini kullanarak bir listedeki ilerlemeyi çeşitli şekillerde gösterebiliriz. Bunun bir yolu, adımların yer aldığı bir liste görmek için ilerleme çubuğu olabilir. Bu örnekte, her öğe için kullanıcının listede ne kadar ilerlediğini gösteren bir çubuk oluşturmak üzere doğrusal degrade içeren bir sözde öğe kullanıyoruz.

li::before {  
    --stop: calc(100% / var(--length) * var(--i));  
    --color1: deeppink;  
    --color2: pink;  

    content: '';  
    background: linear-gradient(to right, var(--color1) var(--stop), var(--color2) 0);  
}  

hsl() renk işlevini kullanarak liste ilerledikçe tonu da ayarlayabiliriz. Özel mülkümüzden yararlanarak hue değerini hesaplayabiliriz.

Açıklama listesi stili

Daha önce de belirtildiği gibi, daha fazla stil seçeneği sunmak için terimleri ve tanımlarını dl içinde bir div içine sarmalayabiliriz. Örneğin, listemizi bir tablo olarak görüntülemek isteyebiliriz. Her grubun etrafında div sarmalayıcısı olmadan listede display: grid ayarlamak, terimlerimizin ve açıklamalarımızın farklı ızgara hücrelerine yerleştirileceği anlamına gelir. Bu, bazen faydalı olabilir. Aşağıdaki örnekte, açıklamalarıyla birlikte bir turta menüsü gösterilmektedir.

Listenin kendisinde bir ızgara tanımlayabilir ve terimlerin ve açıklamaların her zaman sütunlara hizalanmasını sağlayabiliriz. Bu durumda sütun genişliği, en uzun terime göre belirlenir.

Öte yandan, terimleri açıklama kartı stiline göre farklı bir şekilde gruplandırmak isterseniz sarmalayıcı <div> çok faydalı olur.

Kaynaklar