วิธีเพิ่มส่วนหัวในรายการตามความหมาย


120

สิ่งนี้รบกวนฉันมาระยะหนึ่งแล้วและฉันสงสัยว่ามีความเห็นตรงกันว่าจะทำอย่างไรให้เหมาะสม เมื่อฉันใช้รายการ HTML ฉันจะรวมส่วนหัวของรายการตามความหมายได้อย่างไร

ทางเลือกหนึ่งคือ:

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

แต่ในทางความหมายส่วน<h3>หัวจะไม่เกี่ยวข้องกับไฟล์<ul>

อีกทางเลือกหนึ่งคือ:

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

แต่ดูเหมือนจะสกปรกเล็กน้อยเนื่องจากส่วนหัวไม่ใช่หนึ่งในรายการจริงๆ

W3C ไม่อนุญาตตัวเลือกนี้:

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

เป็น<ul>แค่สามารถมีหนึ่งหรือมากกว่า<li>'s

"ส่วนหัวรายการ" แบบเก่า<lh>เหมาะสมที่สุด

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

แต่แน่นอนว่ามันไม่ได้เป็นส่วนหนึ่งของ HTML อย่างเป็นทางการ

ฉันได้ยินมาว่าแนะนำให้เราใช้<label>แบบฟอร์ม:

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

แต่นี่เป็นเรื่องแปลกเล็กน้อยและจะไม่สามารถตรวจสอบได้

เป็นเรื่องง่ายที่จะเห็นปัญหาเกี่ยวกับความหมายเมื่อพยายามจัดรูปแบบส่วนหัวรายการของฉันซึ่งสุดท้ายแล้วฉันต้องใส่<h3>แท็กของฉันไว้ในส่วนแรก<li>และกำหนดเป้าหมายเพื่อจัดรูปแบบด้วยสิ่งต่างๆเช่น:

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

น่ากลัว! แต่อย่างน้อยวิธีนี้ฉันสามารถควบคุมทั้ง<ul>ส่วนหัวและทั้งหมดได้ด้วยการจัดรูปแบบulแท็ก

วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร? ความคิดใด ๆ ?


5
บางคนใช้ LH แต่อาจไม่รู้ว่าจริงๆแล้วพวกเขาไม่ได้ใช้แท็ก HTML "จริง" แต่เป็นเพียงการสร้างชื่อแท็กแบบสุ่ม เบราว์เซอร์ถือว่าแท็กดังกล่าวเป็นองค์ประกอบแบบอินไลน์ บางคนจะอนุญาตให้คุณใส่คลาสและ css ได้
Glen Little

1
เป็นไปได้ที่จะทำสำเนาstackoverflow.com/questions/2417891/…
goodeye

คำตอบ:


81

ดังที่ Felipe Alsacreations ได้กล่าวไปแล้วตัวเลือกแรกก็ใช้ได้

หากคุณต้องการให้แน่ใจว่าไม่มีสิ่งใดที่อยู่ด้านล่างรายการที่ตีความว่าเป็นของส่วนหัวนั่นคือสิ่งที่องค์ประกอบเนื้อหาแบ่งส่วน HTML5 มีไว้สำหรับ ตัวอย่างเช่นคุณสามารถทำได้

<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
สิ่งนี้สมเหตุสมผลมาก ขอบคุณ แน่นอนว่าถ้าเราจะใช้ HTML5 ส่วนหัวควร<h1>อยู่ในส่วน<section>หัวของแท็กเหล่านั้น
Tomas Mulder

6
คุณสามารถใช้ที่<h1>นั่นได้แน่นอน แต่<h3>ก็โอเคเหมือนกัน ตราบใดที่คุณไม่ได้ใช้หัวเรื่องระดับที่สูงกว่าในส่วนเดียวกัน
Alohci

4
เราควรยึดตามส่วนหัว h1..h6 (ที่นี่คือ h2 และ h3) ตราบใดที่เบราว์เซอร์โปรแกรมอ่านหน้าจอและเทคโนโลยีอำนวยความสะดวกอื่น ๆ ไม่ได้ร่างส่วนหัวอย่างถูกต้องตามที่ระบุไว้ใน HTML5 (ดูcoding.smashingmagazine.com/2011/08/16/ … - ค้นหา "คิ้ว" ... ) ฉันไม่แน่ใจว่ามันพัฒนาไปมากแค่ไหนในสองสามเดือน แต่อาจจะไม่เร็วขนาดนั้นสำหรับ API การเข้าถึงของเบราว์เซอร์: /
FelipeAls

3
@davidjb - ระวังนั่นไม่ใช่สิ่งที่คำแนะนำนั้นพูด มันบอกว่าควรใช้ h1-h6 เพื่อให้ระดับหัวเรื่อง กล่าวคือควรใช้องค์ประกอบ h1 สำหรับส่วนหัวระดับสูงสุดบนหน้าเว็บเท่านั้น ไม่ได้บอกว่าจะมีหัวเรื่องเดียวที่ระดับสูงสุดนั้นได้ อนึ่งผู้ผลิตเบราว์เซอร์ระบุชัดเจนว่าพวกเขาไม่มีเจตนาที่จะใช้อัลกอริทึมโครงร่างดังนั้นจึงมีความหวังเพียงเล็กน้อยที่สถานการณ์จะดีขึ้นอย่างรวดเร็ว
Alohci

2
@ มิเชเล่ - ขึ้นอยู่กับว่าคุณหมายถึงสายตาตรงกลางหรือตรงกลางทางความหมาย หากเป็นภาพแสดงว่าเป็นปัญหาสำหรับ CSS ในการแยกแยะและจะไม่เปลี่ยนมาร์กอัปของคุณ ถ้าตามความหมายฉันไม่แน่ใจว่าคุณมีรายชื่อแบบไหน อาจเป็นได้ว่าคุณมีสองรายการไม่ใช่รายการเดียว
Alohci

53

ในกรณีนี้ฉันจะใช้รายการคำจำกัดความดังนี้:

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

5
สำหรับรายการที่ไม่เรียงลำดับของสิ่งต่างๆที่อธิบายโดยป้ายกำกับเช่นตัวอย่างด้านบนฉันคิดว่านี่เป็นทางเลือกที่ดีที่สุด ความหมายตรงกันทุกประการ: นี่คือคำศัพท์หรือป้ายกำกับ (ผลไม้ที่ฉันชอบ) และนี่คือรายการที่สอดคล้องกับฉลากนั้น (ผลไม้แต่ละชนิด)
Andrew

1
มันคือรายการคำอธิบายอย่างแท้จริง นี่คือทางออกที่ดีที่สุดของ imo
Derek 朕會功夫

display: list-item ... CSS เพื่อแสดงสัญลักษณ์แสดงหัวข้อย่อย คำตอบที่ดี.
Mycah

9

ตัวเลือกแรกของคุณคือทางเลือกที่ดี เป็นปัญหาน้อยที่สุดและคุณพบสาเหตุที่ถูกต้องแล้วว่าทำไมคุณไม่สามารถใช้ตัวเลือกอื่นได้

อย่างไรก็ตามหัวเรื่องของคุณเชื่อมโยงอย่างชัดเจนกับ<ul>: อยู่หน้ารายการ! ;)

แก้ไข: สตีฟ Faulkner, หนึ่งในบรรณาธิการของ W3C HTML5 และ 5.1 ได้ร่างออกคำนิยามขององค์ประกอบlt นั่นเป็นร่างที่ไม่เป็นทางการที่เขาจะพูดถึงสำหรับ HTML 5.2 แต่ยังไม่มีอะไรเพิ่มเติม


1
ฉันเห็นด้วยวิธีแก้ปัญหาอื่น ๆ ไม่สมเหตุสมผลเลย

จริงเหมือนกับการใช้หัวเรื่องบนไฟล์<p>. แต่ฉันยังคงต้องการอะไรที่ชัดเจนกว่านี้เล็กน้อยเช่นforแอตทริบิวต์สำหรับ<label>' or the <th> `สำหรับตาราง ฉันคิดว่า<lh>ตัวเลือกนี้จะเหมาะสมที่สุดหากได้รับการสนับสนุนโดย W3C จริง
Tomas Mulder

5

a <div> คือการหารเชิงตรรกะในเนื้อหาของคุณตามความหมายนี่จะเป็นตัวเลือกแรกของฉันหากฉันต้องการจัดกลุ่มหัวเรื่องด้วยรายการ:

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

จากนั้นคุณสามารถใช้ css ต่อไปนี้เพื่อจัดรูปแบบทุกอย่างเข้าด้วยกันเป็นหน่วยเดียว

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

ทางเลือกที่ดีอย่างน้อยก็เพื่อการจัดแต่งทรงผม
Tomas Mulder

ความหมายที่พูด div หมายความว่าอะไรฉันไม่เข้าใจว่าทำไมมันถึงเป็นตัวเลือกแรกของคุณ (จากปัญหาการจัดแต่งทรงผม)? : x
Rambobafet

@Rambobafet มหาเวทย์! คำตอบนั้นมาจากปี 2012 ก่อนที่ html5 จะแนะนำส่วนและตัวเลือกอื่น ๆ ที่ถูกต้องตามความหมาย บางส่วนรองรับเบราว์เซอร์แล้ว แต่บางส่วนไม่รองรับ "div" ย่อมาจาก "การหารเชิงตรรกะ" ในเนื้อหาของคุณดังนั้นในช่วงเวลานั้นเป็นวิธีที่ดีที่สุดในการแบ่งเนื้อหาของคุณเพื่อจัดรูปแบบ
ปลิ้น

คุณพูดถูกไม่เห็นส่วน "12" :)
Rambobafet

2

คุณยังสามารถใช้<figure>องค์ประกอบเพื่อเชื่อมโยงส่วนหัวไปยังรายการของคุณได้ดังนี้:

<figure>
    <figcaption>My favorite fruits</figcaption>    
       <ul>
          <li>Banana</li>
          <li>Orange</li>
          <li>Chocolate</li>
       </ul>
</figure>

ที่มา: https://www.w3.org/TR/2017/WD-html53-20171214/single-page.html#the-li-element (ตัวอย่าง 162)


0

ลองกำหนดคลาสใหม่ ulheader ใน css p.ulheader ~ ul เลือกทั้งหมดที่ตามหลัง My Header ทันที

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

-2

อ้างอิงจากw3.org (โปรดทราบว่าลิงก์นี้อยู่ในข้อกำหนดHTML 3.0 ฉบับร่างที่หมดอายุนานแล้ว ):

รายการที่ไม่เรียงลำดับโดยทั่วไปคือรายการที่มีสัญลักษณ์แสดงหัวข้อย่อย HTML 3.0 ช่วยให้คุณสามารถปรับแต่งสัญลักษณ์แสดงหัวข้อย่อยโดยไม่ต้องใช้สัญลักษณ์แสดงหัวข้อย่อยและตัดรายการในแนวนอนหรือแนวตั้งสำหรับรายการหลายคอลัมน์

<UL>แท็กรายการเปิดต้อง ตามด้วยส่วนหัวของรายการที่เป็นทางเลือก ( <LH>คำอธิบายภาพ</LH>) จากนั้นตามด้วยรายการแรก ( <LI>) ตัวอย่างเช่น:

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

ซึ่งสามารถแสดงผลเป็น:

ผลไม้โต๊ะ

  • แอปเปิ้ล
  • ส้ม
  • กล้วย

หมายเหตุ:เอกสารดั้งเดิมบางฉบับอาจมีส่วนหัวหรือข้อความธรรมดาก่อนองค์ประกอบ LI แรก แนะนำให้ใช้ตัวแทนผู้ใช้ HTML 3.0 เพื่อรองรับความเป็นไปได้นี้เพื่อจัดการกับเอกสารเดิมที่มีรูปแบบไม่ดี


8
การลงคะแนนเนื่องจากลิงก์ "ตาม" นี้ชี้ไปที่ร่างข้อกำหนด 3.0 จากปี 1995 ซึ่งไม่เคยออกจากร่าง แท็ก "lh" ไม่เคยทำให้เป็นข้อมูลจำเพาะ HTML ที่ไม่ใช่แบบร่าง
Brooks Moses

HTML 3.0โอ้โฮนั่นเป็นเอกสารเก่าจริงๆ
Derek 朕會功夫

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.