- เบราว์เซอร์หลัก ๆ กำลังทยอยอัปเดตเพื่อเปลี่ยนสไตล์เริ่มต้น (UA style) ของแท็ก
<h1>
- การเปลี่ยนแปลงนี้จะส่งผลโดยเฉพาะกับ
<h1> ที่ใช้ภายใน section, article, nav, aside ที่ซ้อนกัน
- นักพัฒนาควรระวัง เพราะการเปลี่ยนแปลงนี้อาจทำให้สไตล์ของเว็บไซต์เปลี่ยนไปโดยไม่คาดคิด หรือเกิดคำเตือนจาก Lighthouse ได้
อะไรที่เปลี่ยนไป
- ในสเปก HTML เคยมีกฎที่เรียกว่า “outline algorithm” ซึ่งทำให้
<h1> ถูกแสดงผลให้ดูเหมือน <h2>, <h3> ตามจำนวน sectioning elements ที่ซ้อนอยู่
- ตัวอย่างเช่น
section > h1 จะเรนเดอร์เหมือน <h2> และ section > section > h1 จะเรนเดอร์เหมือน <h3>
- แต่สิ่งนี้ไม่ได้สะท้อนใน accessibility tree จริง และเครื่องมือแต่ละตัวก็ตีความไม่เหมือนกันจนทำให้เกิดความสับสน
- สุดท้ายอัลกอริทึมนี้ถูกถอดออกจากสเปก HTML ในปี 2022 และตอนนี้เบราว์เซอร์ก็เริ่มถอด UA style ที่อิงกับมันออกตามไปด้วย
ตัวอย่าง UA style ของเบราว์เซอร์แบบเดิม
- x h1 { font-size: 1.50em }
- x x h1 { font-size: 1.17em }
- x x x h1 { font-size: 1.00em }
- x x x x h1 { font-size: 0.83em }
- x x x x x h1 { font-size: 0.67em }
ตัวอย่างโครงสร้าง HTML
<body>
<h1>Level 1</h1>
<section>
<h1>Level 2</h1>
<section>
<h1>Level 3</h1>
<section>
<h1>Level 4</h1>
</section>
</section>
</section>
</body>
การเปลี่ยนแปลงที่คาดว่าจะเกิดขึ้นและช่วงเวลา
- ต่อจากนี้
<h1> จะไม่ถูกปรับสไตล์อัตโนมัติเพียงเพราะอยู่ภายใน section ที่ซ้อนกันอีกต่อไป
- UA style จะใช้สไตล์เดียวกันกับ
<h1> ทุกตัว
- หากไม่ได้กำหนด
font-size ให้ <h1> จะมีคำเตือนแสดงใน Lighthouse
- คำเตือนที่จะแสดงคือ
H1UserAgentFontSizeInSection
Firefox
- ตั้งแต่ 31 มีนาคม 2025 Firefox Beta 138 จะเริ่มปล่อยการเปลี่ยนแปลงสไตล์ให้ผู้ใช้เดสก์ท็อป 50%
- ใน Firefox Stable 138 จะเริ่มปล่อยให้ 5% ก่อน และจะทยอย rollout ครบทั้งหมดภายในเวอร์ชัน 140
- ใน Firefox 136 ขึ้นไป หากไม่ได้กำหนด
font-size หรือ margin จะมีคำเตือนในคอนโซล
- วิธีเปลี่ยนการตั้งค่า: ตั้งค่า
layout.css.h1-in-section-ua-styles.enabled เป็น false ใน about:config
Chrome
- ตั้งแต่ Chrome 136 เป็นต้นไป หาก
<h1> ยังใช้สไตล์ค่าเริ่มต้นแบบเล็กลง จะเกิดคำเตือน
- สิ่งนี้อาจส่งผลต่อคะแนน “Best Practices” ของ Lighthouse
Safari
- แม้ตอนนี้จะยังไม่มีการอัปเดตหรือการติดตามบั๊กที่ชัดเจน แต่คาดว่า WebKit ก็จะมีการอัปเดตในลักษณะเดียวกัน
วิธีแก้คำเตือนของ Lighthouse
- Lighthouse อ้างอิงคำเตือนจาก Chromium DevTools และจะแสดงคำเตือนหาก
<h1> ไม่มี font-size
- เพื่อหลีกเลี่ยงสิ่งนี้ ควรกำหนดสไตล์ให้
<h1> อย่างชัดเจน
ตัวอย่างสไตล์
h1 {
margin-block: 0.67em;
font-size: 2em;
}
- หากต้องการหลีกเลี่ยง specificity (ลำดับความสำคัญ) ให้ใช้
:where()
:where(h1) {
margin-block: 0.67em;
font-size: 2em;
}
เช็กลิสต์สรุป
- อย่าพึ่งพาสไตล์เริ่มต้นของเบราว์เซอร์
- ใช้
<h2>, <h3> ฯลฯ ให้เหมาะสม เพื่อแสดงลำดับชั้นอย่างชัดเจน
- กำหนด
font-size และ margin ให้ <h1> ทุกตัวอย่างชัดเจน
- อัปเดต CSS reset ให้สะท้อนการเปลี่ยนแปลงนี้
- ตรวจสอบคำเตือนผ่าน Lighthouse และ DevTools
- อ้างอิงเอกสารที่เกี่ยวข้องของ MDN เพื่อให้เนื้อหาทันสมัย
เอกสารที่เกี่ยวข้อง
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ใน Firefox 138 เวอร์ชันเสถียร จะปล่อยให้ผู้ใช้ 5% ก่อน และมีแผนขยายเป็น 50%
ภูมิหลังทางประวัติศาสตร์ของ outline algorithm ที่ W3C รับไปใช้นั้นน่าสนใจ
มีความเห็นที่สงสัยว่า พฤติกรรมของ H1 ถูกบรรจุไว้ในสเปกตั้งแต่เมื่อไร
มีความเห็นว่าไม่เคยคิดลึกมาก่อนเกี่ยวกับพฤติกรรมของ section elements (
<section>,<aside>,<nav>,<article>) และแท็ก<h1>มีความเห็นว่าเสียดายที่ outline algorithm ไม่ประสบความสำเร็จ
<h1>ได้ และให้ความหมายในฐานะ "หัวข้อระดับบนสุดในบริบทของฉัน" ไม่ใช่อิงจากบริบทโดยรวมของเอกสารมีความเห็นว่าแท็ก
<h1>ก็ควรเป็น<h1>ไม่ว่าจะอยู่ตำแหน่งไหนมีความเห็นว่าเพราะความซับซ้อนแบบนี้ นักออกแบบจำนวนมากจึงใช้
<div>กับทุกอย่างมีความเห็นว่า header ของ HTML ค่อนข้างไร้เหตุผลอยู่บ้าง
<section>เป็นการสื่อความหมายที่ดีกว่า