3 คะแนน โดย GN⁺ 2025-04-11 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เบราว์เซอร์หลัก ๆ กำลังทยอยอัปเดตเพื่อเปลี่ยนสไตล์เริ่มต้น (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 ความคิดเห็น

 
GN⁺ 2025-04-11
ความคิดเห็นบน Hacker News
  • ใน Firefox 138 เวอร์ชันเสถียร จะปล่อยให้ผู้ใช้ 5% ก่อน และมีแผนขยายเป็น 50%

    • มีความเห็นว่าเรื่องนี้จะทำให้การทดสอบยากขึ้น เพราะนักพัฒนาเว็บอาจเจอพฤติกรรมของเบราว์เซอร์ที่ต่างจากผู้ใช้
    • มีความเห็นว่าน่าจะอ้างอิงวิธีการปล่อยของ Facebook แต่ Firefox ไม่ใช่ซอฟต์แวร์ฝั่งเซิร์ฟเวอร์ จึงมีความเห็นว่าวิธีนี้ไม่เหมาะสม
  • ภูมิหลังทางประวัติศาสตร์ของ outline algorithm ที่ W3C รับไปใช้นั้นน่าสนใจ

    • เบราว์เซอร์และ screen reader ปฏิเสธที่จะรองรับ เพราะมีปัญหาเรื่องความกำกวมกับคอนเทนต์เว็บเดิมและภาระในการดูแลรักษา
    • หลังจากนั้น 8 ปี WHATWG ก็เลิกแนวทางนี้ไปในที่สุด
  • มีความเห็นที่สงสัยว่า พฤติกรรมของ H1 ถูกบรรจุไว้ในสเปกตั้งแต่เมื่อไร

    • มีความเห็นว่าเขาเขียน HTML มาตั้งแต่ปี 1995 แต่ไม่เคยได้ยินเรื่องนี้มาก่อน
    • มีความเห็นว่ามันสร้างความสับสน จึงควรถูกลบออก
  • มีความเห็นว่าไม่เคยคิดลึกมาก่อนเกี่ยวกับพฤติกรรมของ section elements (, , , ) และแท็ก ``

  • มีความเห็นว่าเสียดายที่ outline algorithm ไม่ประสบความสำเร็จ

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

    • โดยพื้นฐานแล้วไม่ควรถูกเปลี่ยน และน่าจะแก้ปัญหาด้านการเข้าถึงของ screen reader ได้
  • มีความเห็นว่าเพราะความซับซ้อนแบบนี้ นักออกแบบจำนวนมากจึงใช้ `` กับทุกอย่าง

    • หากใช้แอตทริบิวต์ role ก็ยังทำให้เข้าถึงได้เช่นกัน
  • มีความเห็นว่า header ของ HTML ค่อนข้างไร้เหตุผลอยู่บ้าง

    • มีความเห็นว่าการแบ่ง section ของหนังสือด้วยแท็ก `` เป็นการสื่อความหมายที่ดีกว่า
    • มีความเห็นว่า h1 และ h2 สร้างแท็กแบบชัดเจนและลำดับชั้นที่ต่างจากรูปแบบอื่นของ HTML
    • มีมุกว่าถ้าย้อนเวลากลับไปได้ ก็อยากให้ Tim Berners-Lee แก้ปัญหานี้ตั้งแต่แรก