- เบราว์เซอร์หลัก ๆ กำลังทยอยอัปเดตเพื่อเปลี่ยนสไตล์เริ่มต้น (UA style) ของแท็ก ``
- การเปลี่ยนแปลงนี้จะส่งผลโดยเฉพาะกับ `` ที่ใช้ภายใน
section, article, nav, aside ที่ซ้อนกัน
- นักพัฒนาควรระวัง เพราะการเปลี่ยนแปลงนี้อาจทำให้สไตล์ของเว็บไซต์เปลี่ยนไปโดยไม่คาดคิด หรือเกิดคำเตือนจาก Lighthouse ได้
อะไรที่เปลี่ยนไป
- ในสเปก HTML เคยมีกฎที่เรียกว่า “outline algorithm” ซึ่งทำให้
ถูกแสดงผลให้ดูเหมือน, `` ตามจำนวน sectioning elements ที่ซ้อนอยู่
- ตัวอย่างเช่น
section > h1 จะเรนเดอร์เหมือน และ `section > section > h1` จะเรนเดอร์เหมือน
- แต่สิ่งนี้ไม่ได้สะท้อนใน 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
Level 1
Level 2
Level 3
Level 4
การเปลี่ยนแปลงที่คาดว่าจะเกิดขึ้นและช่วงเวลา
- ต่อจากนี้ `` จะไม่ถูกปรับสไตล์อัตโนมัติเพียงเพราะอยู่ภายใน section ที่ซ้อนกันอีกต่อไป
- UA style จะใช้สไตล์เดียวกันกับ `` ทุกตัว
- หากไม่ได้กำหนด
font-size ให้ `` จะมีคำเตือนแสดงใน 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 เป็นต้นไป หาก `` ยังใช้สไตล์ค่าเริ่มต้นแบบเล็กลง จะเกิดคำเตือน
- สิ่งนี้อาจส่งผลต่อคะแนน “Best Practices” ของ Lighthouse
Safari
- แม้ตอนนี้จะยังไม่มีการอัปเดตหรือการติดตามบั๊กที่ชัดเจน แต่คาดว่า WebKit ก็จะมีการอัปเดตในลักษณะเดียวกัน
วิธีแก้คำเตือนของ Lighthouse
- Lighthouse อ้างอิงคำเตือนจาก Chromium DevTools และจะแสดงคำเตือนหาก `` ไม่มี
font-size
- เพื่อหลีกเลี่ยงสิ่งนี้ ควรกำหนดสไตล์ให้ `` อย่างชัดเจน
ตัวอย่างสไตล์
h1 {
margin-block: 0.67em;
font-size: 2em;
}
- หากต้องการหลีกเลี่ยง specificity (ลำดับความสำคัญ) ให้ใช้
:where()
:where(h1) {
margin-block: 0.67em;
font-size: 2em;
}
เช็กลิสต์สรุป
- อย่าพึ่งพาสไตล์เริ่มต้นของเบราว์เซอร์
- ใช้
, ฯลฯ ให้เหมาะสม เพื่อแสดงลำดับชั้นอย่างชัดเจน
- กำหนด
font-size และ margin ให้ `` ทุกตัวอย่างชัดเจน
- อัปเดต CSS reset ให้สะท้อนการเปลี่ยนแปลงนี้
- ตรวจสอบคำเตือนผ่าน Lighthouse และ DevTools
- อ้างอิงเอกสารที่เกี่ยวข้องของ MDN เพื่อให้เนื้อหาทันสมัย
เอกสารที่เกี่ยวข้อง
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ใน Firefox 138 เวอร์ชันเสถียร จะปล่อยให้ผู้ใช้ 5% ก่อน และมีแผนขยายเป็น 50%
ภูมิหลังทางประวัติศาสตร์ของ outline algorithm ที่ W3C รับไปใช้นั้นน่าสนใจ
มีความเห็นที่สงสัยว่า พฤติกรรมของ H1 ถูกบรรจุไว้ในสเปกตั้งแต่เมื่อไร
มีความเห็นว่าไม่เคยคิดลึกมาก่อนเกี่ยวกับพฤติกรรมของ section elements (
,,,) และแท็ก ``มีความเห็นว่าเสียดายที่ outline algorithm ไม่ประสบความสำเร็จ
มีความเห็นว่าแท็ก
ก็ควรเป็นไม่ว่าจะอยู่ตำแหน่งไหนมีความเห็นว่าเพราะความซับซ้อนแบบนี้ นักออกแบบจำนวนมากจึงใช้ `` กับทุกอย่าง
มีความเห็นว่า header ของ HTML ค่อนข้างไร้เหตุผลอยู่บ้าง