UI ส่วนใหญ่ที่เบราว์เซอร์สร้างขึ้นสามารถปรับแต่งได้ในระดับหนึ่งโดยใช้ CSS แม้ว่าจะต้องใช้ฟีเจอร์ที่ทันสมัย แต่ก็ลดระดับอย่างค่อยเป็นค่อยไปในเบราว์เซอร์รุ่นเก่า จึงมักไม่จำเป็นต้องใช้ Polyfill หรือฟังก์ชันสำรอง
ก่อนที่จะสร้าง UI ของเบราว์เซอร์ขึ้นมาใหม่ (ตัวควบคุมแบบฟอร์ม แถบเลื่อน การเลือก ข้อความแสดงข้อผิดพลาด ฯลฯ) ให้ตรวจสอบก่อนว่า
- UI ของเบราว์เซอร์ไม่สามารถปรับแต่งให้ตรงกับความต้องการของคุณได้มากพอ แม้จะใช้ CSS ที่ทันสมัยก็ตาม
- การปรับแต่งที่ต้องการมีความสำคัญมากพอที่จะคุ้มค่ากับการแลกเปลี่ยนในการสร้าง UI ในตัวขึ้นมาใหม่ โดยเฉพาะอย่างยิ่งการสูญเสียความหมายที่เข้าถึงได้ การจัดการแป้นพิมพ์, IME และการผสานรวม AT ที่ UI แบบเนทีฟมีให้โดยไม่มีค่าใช้จ่าย
ตัวอย่างการปรับแต่งที่ทำได้มีดังนี้
- ใช้
::selectionเพื่อปรับแต่งสีข้อความที่ไฮไลต์ - อย่าใช้
user-select: noneกับข้อความเนื้อหา เพราะจะทำให้การคัดลอกและวาง เครื่องมือแปลภาษา และท่าทางสัมผัส "อ่านจากตรงนี้" ของ AT ไม่ทำงาน จำกัดไว้ที่ Chrome (แฮนเดิลการลาก แถบเครื่องมือ ป้ายกำกับปุ่มที่ซ้ำซ้อน) - ใช้
accent-colorเพื่อใช้สีเฉพาะจุดของหน้ากับ UI ที่เบราว์เซอร์สร้างขึ้น - ใช้
color-schemeเพื่อให้ UI ของเบราว์เซอร์ปรับตามโหมดสว่าง/มืด - ใช้
scrollbar-colorเพื่อปรับแต่งสีแถบเลื่อนและscrollbar-widthเพื่อควบคุมความหนาของแถบเลื่อน โดยให้แถบเลื่อนแตกต่างจากแทร็กอย่างชัดเจน (≥3:1) และอย่าตั้งค่าscrollbar-width: noneในพื้นที่ที่เลื่อนได้ (ใช้เฉพาะเมื่อการเลื่อนถูกแทนที่ด้วยความสามารถอื่นๆ โดยสมบูรณ์) - ใช้
:user-invalid/:user-validสำหรับการจัดรูปแบบความถูกต้อง ไม่ใช่:invalid/:validเนื่องจากจะจับคู่หลังจากที่ผู้ใช้โต้ตอบกับช่องเท่านั้น เพื่อหลีกเลี่ยงค่าเริ่มต้นที่ไม่เป็นมิตรในการแจ้งว่าช่องที่ต้องกรอกแต่ว่างเปล่าเป็นข้อผิดพลาดเมื่อโหลดหน้าเว็บ ยกเว้นแถบเลื่อนช่วงเมื่อกำหนดเป้าหมายinputในวงกว้าง (เช่นinput:not(input[type="range"]):user-valid) เพื่อให้การปรับแถบเลื่อนไม่ใช้เส้นขอบหรือพื้นหลังที่ถูกต้องของช่องกับแถบเลื่อน - โดยทั่วไปแล้ว ปุ่มและช่องข้อความ (รวมถึง
<textarea>) สามารถจัดรูปแบบเป็นองค์ประกอบปกติได้ - ใช้
font-sizeเพื่อปรับขนาดและพร็อพเพอร์ตี้ข้อความอื่นๆ เพื่อควบคุมการจัดพิมพ์
การจัดรูปแบบช่องข้อความ (<input> และ <textarea>)
สำหรับการจัดรูปแบบส่วนใหญ่ (เช่น สี เส้นขอบ พื้นหลัง การพิมพ์ ฯลฯ) ให้ถือว่าองค์ประกอบเหล่านี้เป็นคอนเทนเนอร์ข้อความปกติ
- ใช้
:placeholder-shownและ::placeholderเพื่อจัดรูปแบบตัวยึดตำแหน่งอินพุต - ใช้
field-sizing: contentเพื่อปรับขนาดช่องข้อความให้พอดีกับเนื้อหา - สำหรับองค์ประกอบ
<textarea>ให้ใช้resize: verticalเพื่อปิดใช้การปรับขนาดแนวนอน หรือresize: noneเพื่อปิดใช้การปรับขนาดทั้งหมด
การควบคุมแบบหลายตัวเลือก (เลือก ปุ่มตัวเลือก ช่องทำเครื่องหมาย)
- หากต้องการเลือกตัวเลือกหนึ่งจากหลายตัวเลือกที่แสดงในเมนูแบบเลื่อนลง ให้ใช้
<select>+appearance: base-select+::picker(select)ดูข้อมูลเพิ่มเติมได้ที่การจัดรูปแบบ Branded Select - การเลือกตัวเลือกอย่างน้อย 1 รายการจากหลายตัวเลือกที่จัดวางในบรรทัดเดียวกันในหน้าเว็บ: ใช้
<input type=checkbox>หรือ<input type=radio>ภายใน<label>สำหรับแต่ละตัวเลือก จัดรูปแบบผ่านlabel:has(:checked) - จัดสไตล์ช่องทำเครื่องหมาย ปุ่มตัวเลือก และสวิตช์ผ่าน
appearance: none+ เนื้อหาที่สร้างขึ้น (::before/::after) หรือภาพพื้นหลังเพื่อวาดสถานะที่เลือก
<input> ที่ไม่ใช่ข้อความ (ปุ่ม แถบเลื่อน อินพุตไฟล์ ฯลฯ)
- อินพุตไฟล์: ใช้
::file-selector-buttonเพื่อจัดรูปแบบปุ่ม - อย่าใช้
<input>กับtypeที่มีค่าเป็นbutton,submitหรือresetใช้<button>แทนและจัดรูปแบบเป็นองค์ประกอบปกติ - แถบเลื่อน: ใช้
appearance: none+ องค์ประกอบเทียมของ Thumb (::-webkit-slider-thumb,::-moz-range-thumbฯลฯ) และองค์ประกอบเทียมของแทร็ก (::-webkit-slider-runnable-track,::-moz-range-trackฯลฯ) เพื่อการควบคุมที่ละเอียดยิ่งขึ้น