Bir listeye anlamsal olarak nasıl başlık eklenir


120

Bu beni bir süredir rahatsız ediyor ve bunun nasıl düzgün yapılacağına dair herhangi bir fikir birliği olup olmadığını merak ediyorum. Bir HTML listesi kullandığımda, liste için semantik olarak nasıl bir başlık eklerim?

Seçeneklerden biri şudur:

<h3>Fruits I Like:</h3>
<ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

ancak anlamsal olarak <h3>başlık açıkça ilişkili değildir<ul>

Başka bir seçenek de şudur:

<ul>
    <li><h3>Fruits I Like:</h3></li>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

ancak başlık liste öğelerinden biri olmadığı için bu biraz kirli görünüyor.

Bu seçeneğe W3C tarafından izin verilmiyor:

<ul>
    <h3>Fruits I Like:</h3>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

olarak <ul>Sadece bir tane ya da daha fazla içerebilirler <li>s '

Eski "liste başlığı" <lh>en mantıklı olanıdır

<ul>
    <lh>Fruits I Like:</lh>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

ama tabii ki resmi olarak HTML'nin bir parçası değil

<label>Tıpkı bir form gibi kullanmamızı önerdiğini duydum :

<ul>
    <label>Fruits I Like:</label>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

ama bu biraz garip ve yine de geçerli olmayacak.

Liste başlıklarımı biçimlendirmeye çalışırken anlamsal sorunları görmek kolaydır, burada <h3>etiketlerimi ilk sıraya koymam <li>ve bunları aşağıdaki gibi şekillendirme için hedeflemem gerekir:

ul li:first-of-type {
    list-style: none;
    margin-left: -1em;
    /*some other header styles*/
}

dehşeti! Ama en azından bu şekilde <ul>, uletiketi şekillendirerek başlığın tamamını , başlığını ve tümünü kontrol edebilirim .

Bunu yapmanın doğru yolu nedir? Herhangi bir fikir?


5
Bazı insanlar LH kullanıyor, ancak aslında "gerçek" bir HTML etiketi kullanmadıklarının farkında olmayabilirler, ancak sadece rastgele bir etiket adı yaptıklarının farkına varmayabilirler. Tarayıcılar böyle bir etiketi bir satır içi öğe olarak ele alır. Bazıları bir sınıf koymanıza ve üzerine css yapmanıza izin verir.
Glen Little


Yanıtlar:


81

Felipe Alsacreations'ın da söylediği gibi, ilk seçenek sorun değil.

Listenin altındaki hiçbir şeyin başlığa ait olarak yorumlanmadığından emin olmak istiyorsanız, HTML5 bölümleme içerik öğelerinin amacı budur. Yani, örneğin yapabilirsin

<h2>About Fruits</h2>
<section>
  <h3>Fruits I Like:</h3>
  <ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
  </ul>
</section>
<!-- anything here is part of the "About Fruits" section but does not 
     belong to the "Fruits I Like" section. -->

6
Bu çok mantıklı; Teşekkürler. HTML5'i kullanmak için gidiyoruz eğer Tabii ki, başlığı olmalıdır <h1>içeride <section>bu etiketlerin içinde üst düzey başlık aynı derecede.
Tomas Mulder

6
<h1>Orada kullanabilirsin tabii. Ama <h3>iyi de. Aynı bölümde daha yüksek seviye bir başlık kullanmadığınız sürece.
Alohci

4
Tarayıcılar, ekran okuyucular ve diğer yardımcı teknolojiler HTML5'te belirtildiği gibi başlıkları doğru şekilde özetlemediği sürece h1..h6 başlıklarına (burada h2 ve h3) bağlı kalmalıyız (bkz. Coding.smashingmagazine.com/2011/08/16/ … - "kaşları" arayın ...). Birkaç ayda ne kadar geliştiğinden emin değilim, ancak tarayıcıların erişilebilirlik API'si açısından muhtemelen o kadar hızlı değil: /
FelipeAls

3
@davidjb - dikkatli olun, bu tavsiyenin söylediği tam olarak bu değil. H1-h6'nın başlık seviyelerini sağlamak için kullanılması gerektiğini söylüyor. yani, h1 öğeleri yalnızca sayfadaki en üst düzey başlık için kullanılmalıdır. O en yüksek seviyede sadece bir başlık olabileceğini söylemez. Bu arada, tarayıcı üreticileri, anahat algoritmasını uygulama niyetinde olmadıklarını açıkça belirttiler, bu nedenle durumun hızla düzelmesi için çok az umut var.
Alohci

2
@Michele - Bu, görsel olarak ortada mı yoksa anlamsal olarak ortada mı demek istediğinize bağlı. Görsel olarak bu, CSS'nin çözmesi gereken bir sorundur ve ideal olarak işaretinizi değiştirmez. Anlamsal olarak, o zaman ne tür bir listeniz olduğundan emin değilim. Bir değil iki listeniz olabilir.
Alohci

53

Bu durumda, şu şekilde bir tanım listesi kullanırdım:

<dl>
  <dt>Fruits I like:</dt>
  <dd>Apples</dd>
  <dd>Bananas</dd>
  <dd>Oranges</dd>
</dl>

5
Yukarıdaki örnekte olduğu gibi, bir etiket tarafından tanımlanan şeylerin sıralanmamış bir listesi için, bunun en iyi seçenek olduğunu düşünüyorum. Anlambilim tam olarak eşleşir: İşte bir terim veya etiket (Sevdiğim Meyveler) ve işte o etikete karşılık gelen öğeler (her meyve).
Andrew

1
Kelimenin tam anlamıyla bir açıklama listesi . En iyi çözüm imo budur.
Derek 朕 會 功夫

display: list-item ... Madde işaretlerini görüntülemek için CSS. İyi cevap.
Mycah

9

İlk seçeneğiniz iyi olanıdır. En az sorunlu olanıdır ve diğer seçenekleri neden kullanamadığınız için doğru nedenleri zaten buldunuz.

Bu arada, başlığınız açıkça şununla ilişkilidir <ul>: listenin hemen önünde! ;)

düzenleme: W3C HTML5 ve 5.1 editörlerinden Steve Faulkner, bir elemanın tanımını çizdi . Bu , HTML 5.2 için tartışacağı resmi olmayan bir taslak , daha fazlası değil.lt


1
Katılıyorum, diğer çözümler hiç mantıklı değil

Doğru, bir tür a başlığının üzerinde kullanmak gibi <p>. Ama yine de biraz daha açık bir şey istiyorum, tablolar için <th> " forözniteliği gibi bir şey <label>' or the . Bence bu <lh>seçenek, W3C tarafından gerçekten desteklenmiş olsaydı en mantıklı olacaktır.
Tomas Mulder

5

a <div>, içeriğinizdeki mantıksal bir bölümdür, eğer başlığı listeyle gruplamak istersem anlamsal olarak bu benim ilk tercihim olurdu:

<div class="mydiv">
    <h3>The heading</h3>
    <ul>
       <li>item</li>
       <li>item</li>
       <li>item</li>
    </ul>
</div>

daha sonra her şeyi tek bir birim olarak biçimlendirmek için aşağıdaki css'yi kullanabilirsiniz

.mydiv{}
.mydiv h3{}
.mydiv ul{}
.mydiv ul li{}
etc...

En azından şekillendirme amacıyla iyi seçim.
Tomas Mulder

Anlamsal konuşma div hiçbir şey ifade etmiyor, neden ilk tercihiniz olduğunu anlamıyorum (stil sorunu dışında)? : x
Rambobafet

@Rambobafet, büyük büyücülük! Bu yanıt, 2012'den, html5 bölümleri ve anlamsal olarak daha doğru diğer seçenekleri sunmadan önceydi. Bazı tarayıcılar bölümü zaten destekledi, ancak bazıları desteklemedi. "div", içeriğinizdeki "mantıksal bölme" nin kısaltmasıdır, dolayısıyla o zamanlar içeriğinizi stil için bölmenin en iyi yolu buydu.
Evert

Kesinlikle haklısın, "'12" bölümünü görmedim :)
Rambobafet


0

Css'de yeni bir sınıf olan ulheader tanımlamayı deneyin. p.ulheader ~ ul, Başlığımdan hemen sonra gelenleri seçer

p.ulheader ~ ul {
   margin-top:0;
{
p.ulheader {
   margin-bottom;0;
}

-2

W3.org'a göre (bu bağlantının süresi dolmuş taslak HTML 3.0 spesifikasyonunda olduğuna dikkat edin ):

Sırasız liste tipik olarak madde işaretli öğeler listesidir. HTML 3.0, madde işaretlerini özelleştirme, madde işaretleri olmadan yapma ve çok sütunlu listeler için liste öğelerini yatay veya dikey olarak kaydırma yeteneği sağlar.

Açılış listesi etiketi olmalıdır <UL>. Ardından isteğe bağlı bir liste başlığı ( <LH>başlık </LH>) ve ardından ilk liste öğesi ( <LI>) gelir. Örneğin:

<UL>
  <LH>Table Fruit</LH>
  <LI>apples
  <LI>oranges
  <LI>bananas
</UL>

şu şekilde oluşturulabilir:

Sofra meyvesi

  • elmalar
  • portakal
  • muz

Not: Bazı eski belgeler, ilk LI öğesinden önce başlıklar veya düz metin içerebilir. HTML 3.0 kullanıcı aracılarının uygulayıcılarının, kötü biçimlendirilmiş eski belgeleri işlemek için bu olasılığı karşılamaları önerilir.


8
Olumsuz oylama, çünkü bu "göre" bağlantısı 1995 tarihli taslak 3.0 spesifikasyonuna işaret ediyor ve bu da onu hiçbir zaman taslaktan çıkarmadı. "Lh" etiketi onu asla taslak olmayan bir HTML spesifikasyonuna dönüştürmedi.
Brooks Musa

HTML 3.0Whoa bu gerçekten eski bir belge.
Derek 朕 會 功夫

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.