มีทั้ง<h1><a ...> ... </a></h1>
และ<a ...><h1> ... </h1></a>
HTML ที่ถูกต้องหรือเป็นเพียงหนึ่งที่ถูกต้อง? หากทั้งคู่ถูกต้องพวกเขาต่างกันในความหมายหรือไม่?
มีทั้ง<h1><a ...> ... </a></h1>
และ<a ...><h1> ... </h1></a>
HTML ที่ถูกต้องหรือเป็นเพียงหนึ่งที่ถูกต้อง? หากทั้งคู่ถูกต้องพวกเขาต่างกันในความหมายหรือไม่?
คำตอบ:
ทั้งสองเวอร์ชันนั้นถูกต้อง ความแตกต่างที่ใหญ่ที่สุดระหว่างพวกเขาคือในกรณีที่<h1><a>..</a></h1>
มีเพียงข้อความในชื่อเรื่องจะสามารถคลิกได้
หากคุณใส่<a>
ไปรอบ ๆ<h1>
และแบบ CSS display
ทรัพย์สินblock
(ซึ่งมันเป็นค่าเริ่มต้น) ทั้งบล็อก (ความสูงของ<h1>
และ 100% ของความกว้างของภาชนะที่<h1>
อาศัยอยู่ใน) จะสามารถคลิกได้
ในอดีตคุณไม่สามารถวางองค์ประกอบบล็อกไว้ในองค์ประกอบอินไลน์ แต่นี่ไม่ใช่กรณีที่มี HTML5 อีกต่อไป ฉันคิดว่า<h1><a>..</a></h1>
วิธีการนี้เป็นแบบดั้งเดิมมากกว่า
ในกรณีที่คุณต้องการวางจุดยึดบนส่วนหัววิธีที่ดีกว่า<a id="my-anchor"><h1>..</h1></a>
จะใช้id
หรือname
คุณลักษณะเช่นนี้: <h1 id="my-anchor">..</h1>
หรือ<h1 name="my-anchor">..</h1>
<a>
จึงดึงดูดให้พวกเขาแชร์สถานะโฮเวอร์: jsfiddle.net/jjyLemq2
ก่อน HTML 5 อันนี้
<a><h1>..</h1></a>
จะไม่ตรวจสอบ คุณสามารถใช้มันใน HTML 5 อย่างไรก็ตามฉันจะใช้สิ่งนี้:
<h1><a>..</a></h1>
ยกเว้นว่าคุณต้องการเพิ่มมากกว่า <h1> ภายใน <a>
<a><h1></h1></a>
ไม่ถูกต้อง W3C ... โดยทั่วไปคุณไม่สามารถใส่องค์ประกอบบล็อกไว้ในองค์ประกอบแบบอินไลน์
<h1><a>..</a></h1>
และ<a><h1>..</h1></a>
ทำตัวเหมือนกันเกือบตลอดเวลาเมื่อสไตล์ชีทไม่มีผลต่อการแสดงผล เกือบ แต่ไม่มาก หากคุณนำทางโดยใช้ปุ่มแท็บหรือมุ่งเน้นไปที่ลิงก์“ สี่เหลี่ยมผืนผ้าโฟกัส” จะปรากฏขึ้นรอบ ๆ ลิงก์ในเบราว์เซอร์ส่วนใหญ่ สำหรับ<h1><a>..</a></h1>
สี่เหลี่ยมผืนผ้านี้อยู่รอบข้อความลิงก์เท่านั้น สำหรับ<a><h1>..</h1></a>
สี่เหลี่ยมผืนผ้าจะขยายไปทั่วพื้นที่แนวนอนที่มีอยู่เนื่องจากมาร์กอัพทำให้a
องค์ประกอบเป็นองค์ประกอบบล็อกในการแสดงผลโดยมีความกว้าง 100% โดยค่าเริ่มต้น
ต่อไปนี้แสดงให้เห็นว่า<a href=foo><h1>link</h1></a>
Chrome ให้ความสำคัญกับการแสดงผลอย่างไร:
นี่ก็หมายความว่าถ้าคุณจัดสไตล์องค์ประกอบเช่นโดยการตั้งค่าสีพื้นหลังสำหรับลิงก์เอฟเฟกต์จะแตกต่างกันในลักษณะที่คล้ายกัน
ในอดีต<a><h1>..</h1></a>
มีการประกาศว่าไม่ถูกต้องใน HTML 2.0 และตามข้อกำหนดของ HTML ที่ตามมาเหมาะสม แต่ HTML5 เปลี่ยนแปลงสิ่งนี้และประกาศว่าถูกต้อง คำจำกัดความที่เป็นทางการไม่ได้ส่งผลกระทบต่อเบราว์เซอร์เพียงตัวตรวจสอบ อย่างไรก็ตามอาจเป็นไปได้ที่ตัวแทนผู้ใช้บางราย (อาจไม่ใช่เบราว์เซอร์ปกติ แต่เช่นตัวแสดง HTML พิเศษตัวแยกข้อมูลตัวแปลง ฯลฯ ) ไม่สามารถจัดการ <a><h1>..</h1></a>
ได้อย่างถูกต้องเนื่องจากไม่ได้รับอนุญาตในข้อกำหนด
ไม่มีเหตุผลที่ดีที่จะสร้างหัวเรื่องหรือข้อความในลิงก์ของหัวเรื่อง (มันเป็นส่วนใหญ่ไร้เหตุผลและไม่ดีสำหรับการใช้งาน.) แต่คำถามที่คล้ายกันมักจะได้ arised เมื่อทำส่วนหัว (หรือข้อความในหัวข้อ) ที่มีศักยภาพปลายทางสำหรับการเชื่อมโยงโดยใช้เช่นเมื่อเทียบกับ<h2><a name=foo>...</a></h2>
<a name=foo><h2>...</h2></a>
ข้อพิจารณาที่คล้ายกันนี้นำไปใช้กับสิ่งนี้ (ทั้งสองงานอาจมีความแตกต่างกันเนื่องจากสิ่งหลังทำให้a
องค์ประกอบเป็นบล็อกและก่อนหน้า HTML5 จะอนุญาตเฉพาะอดีตเท่านั้น) แต่ในนอกจากนี้ทั้งสองวิธีจะล้าสมัยและการใช้แอตทริบิวต์โดยตรงในองค์ประกอบส่วนหัวจะแนะนำขณะนี้:id
<h2 id=foo>...</h2>
"There is seldom a good reason to make a heading or text in a heading a link"
-> ฉันต้องไม่เห็นด้วยกับสิ่งนั้น มีเหตุผลที่ดีมากมายในการสร้างลิงก์ ตัวอย่างที่ระบุ: รายการโพสต์บล็อกที่แต่ละชื่อมีลิงก์เช่นกัน หรือชำระเงิน SO เอง: คำถามทั้งหมดใน frontpage คือh3
องค์ประกอบและลิงค์เช่นกัน อย่างไรก็ตามคำอธิบายที่ดี;)
องค์ประกอบ H1 เป็นองค์ประกอบระดับบล็อกและจุดยึดเป็นองค์ประกอบแบบอินไลน์ คุณได้รับอนุญาตให้มีองค์ประกอบแบบอินไลน์ภายในองค์ประกอบระดับบล็อก แต่ไม่ใช่วิธีอื่น ๆ เมื่อคุณพิจารณาโมเดลของกล่องและข้อกำหนดของ HTML สิ่งนี้สมเหตุสมผล
ดังนั้นโดยสรุปวิธีที่ดีที่สุดคือ:
<h1><a href="#">Link</a></h1>
คุณต้องการใช้การเชื่อมโยงหลายมิติ<a href="…">
/ a:link
หรือคุณต้องการเพิ่มจุดยึดในส่วนหัวของคุณหรือไม่? หากคุณต้องการเพิ่มจุดยึดคุณสามารถกำหนดรหัส<h1 id="heading">
ได้ จากนั้นคุณสามารถลิงก์เป็นpage.htm#heading
จากนั้นคุณสามารถเชื่อมโยงว่าเป็น
หากคุณต้องการให้หัวเรื่องคลิกได้ (ลิงก์) ให้ใช้องค์ประกอบ<h1><a></a></h1>
/ h1 > a
- blocklevel ก่อนและองค์ประกอบอินไลน์ภายใน
นอกจากนี้ยังมีความแตกต่างของลำดับชั้นสไตล์ หากคุณมีมัน<h1><a href="#">Heading here</a></h1>
สไตล์ของสมอจะลบล้างรูปแบบขององค์ประกอบ h1 ตัวอย่าง:
a {color:red;font-size:30px;line-height:30px;}
จะดีกว่า
h1 {color:blue;font-size:40px;line-height:40px;}