ธีม

แม้แต่การสร้างแบรนด์ก็ยังปรับเปลี่ยนตามอุปกรณ์ได้ คุณปรับการนำเสนอเว็บไซต์ให้ตรงกับความต้องการของผู้ใช้ได้ แต่ก่อนอื่น มาดูวิธีขยายการสร้างแบรนด์ของเว็บไซต์ให้รวมถึงตัวเบราว์เซอร์กัน

ปรับแต่งอินเทอร์เฟซของเบราว์เซอร์

เบราว์เซอร์บางตัวอนุญาตให้คุณแนะนำสีธีมตามชุดสีของเว็บไซต์ อินเทอร์เฟซของเบราว์เซอร์จะปรับให้เข้ากับสีที่คุณแนะนำ เพิ่มสีในองค์ประกอบ meta ที่ชื่อ theme-color ใน head ของหน้าเว็บ

<meta name="theme-color" content="#00D494">
เว็บไซต์ Clearleft dot com เว็บไซต์ Resilient Web Design dot com เว็บไซต์ Session dot org
ดูเว็บไซต์ 3 เว็บในเบราว์เซอร์ Safari แต่ละโปรไฟล์จะมีสีธีมของตัวเองซึ่งขยายไปถึงอินเทอร์เฟซของเบราว์เซอร์

คุณอัปเดตค่าของ theme-color ได้โดยใช้ JavaScript แต่โปรดใช้พลังนี้อย่างชาญฉลาด การเปลี่ยนรูปแบบสีของเบราว์เซอร์บ่อยเกินไปอาจทำให้ผู้ใช้รู้สึกว่ามากเกินไป ลองคิดหาวิธีปรับสีธีมแบบเนียนๆ หากการเปลี่ยนแปลงดูขัดตามากเกินไป ผู้ใช้จะออกจากเว็บไซต์ด้วยความรำคาญ

คุณยังระบุสีธีมในไฟล์ Manifest ของเว็บแอปได้ด้วย ซึ่งเป็นไฟล์ JSON ที่มีข้อมูลเมตาเกี่ยวกับเว็บไซต์ของคุณ

ลิงก์ไปยังไฟล์ Manifest จาก head ของเอกสาร ใช้องค์ประกอบ link ที่มีค่า rel เป็น manifest

<link rel="manifest" href="/manifest.json">

ในไฟล์ Manifest ให้แสดงข้อมูลเมตาโดยใช้คู่คีย์/ค่า

{
  "short_name": "Clearleft",
  "name": "Clearleft design agency",
  "start_url": "/",
  "background_color": "#00D494",
  "theme_color": "#00D494",
  "display": "standalone"
}

หากผู้เข้าชมตัดสินใจเพิ่มเว็บไซต์ของคุณลงในหน้าจอหลัก เบราว์เซอร์จะใช้ข้อมูลในไฟล์ Manifest เพื่อแสดงทางลัดที่เหมาะสม

มีโหมดมืด

ระบบปฏิบัติการหลายระบบอนุญาตให้ผู้ใช้ระบุค่ากำหนดสำหรับชุดสีอ่อนหรือเข้ม ซึ่งเป็นแนวคิดที่ดีในการเพิ่มประสิทธิภาพเว็บไซต์ให้สอดคล้องกับค่ากำหนดธีมของผู้ใช้ คุณเข้าถึงค่ากำหนดนี้ได้ในฟีเจอร์สื่อที่ชื่อprefers-color-scheme

@media (prefers-color-scheme: dark) {
  // Styles for a dark theme.
}

ระบุสีธีมด้วยฟีเจอร์สื่อ prefers-color-scheme ภายในองค์ประกอบ meta

<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)">

นอกจากนี้ คุณยังใช้prefers-color-schemeฟีเจอร์สื่อภายใน SVG ได้ด้วย หากใช้ไฟล์ SVG สำหรับ favicon คุณจะปรับให้เหมาะกับดาร์กโหมดได้ Thomas Steiner เขียนเกี่ยวกับ prefers-color-scheme ในไอคอน favicon ของ SVG สำหรับไอคอนโหมดมืด

การกำหนดธีมด้วยพร็อพเพอร์ตี้ที่กำหนดเอง

หากคุณใช้ค่าสีเดียวกันในหลายที่ทั่วทั้ง CSS การทำซ้ำตัวเลือกทั้งหมดภายใน prefers-color-scheme Media Query อาจเป็นเรื่องที่น่าเบื่อ

body {
  background-color: white;
  color: black;
}
input {
  background-color: white;
  color: black;
  border-color: black;
}
button {
  background-color: black;
  color: white;
}
@media (prefers-color-scheme: dark) {
  body {
    background-color: black;
    color: white;
  }
  input {
    background-color: black;
    color: white;
    border-color: white;
  }
  button {
    background-color: white;
    color: black;
  }
}

ใช้พร็อพเพอร์ตี้ที่กำหนดเองของ CSS เพื่อจัดเก็บค่าสี พร็อพเพอร์ตี้ที่กำหนดเองทํางานเหมือนตัวแปรในภาษาโปรแกรม คุณอัปเดตค่าของตัวแปรได้โดยไม่ต้องอัปเดตชื่อ

หากอัปเดตค่าของพร็อพเพอร์ตี้ที่กำหนดเองภายใน prefers-color-scheme Media Query คุณก็ไม่ต้องเขียนตัวเลือกทั้งหมด 2 ครั้ง

html {
  --page-color: white;
  --ink-color: black;
}
@media (prefers-color-scheme: dark) {
  html {
    --page-color: black;
    --ink-color: white;
  }
}
body {
  background-color: var(--page-color);
  color: var(--ink-color);
}
input {
  background-color: var(--page-color);
  color: var(--ink-color);
  border-color: var(--ink-color);
}
button {
  background-color: var(--ink-color);
  color: var(--page-color);
}

ดูตัวอย่างการกำหนดธีมด้วยพร็อพเพอร์ตี้ที่กำหนดเองขั้นสูงเพิ่มเติมได้ที่การสร้างรูปแบบสี

รูปภาพ

หากใช้ SVG ใน HTML คุณจะใช้พร็อพเพอร์ตี้ที่กำหนดเองในนั้นได้ด้วย

svg {
  stroke: var(--ink-color);
  fill: var(--page-color);
}

ตอนนี้ไอคอนจะเปลี่ยนสีไปพร้อมกับองค์ประกอบอื่นๆ ในหน้า

หากต้องการลดความสว่างของรูปภาพเมื่อแสดงในโหมดมืด คุณสามารถใช้ฟิลเตอร์ใน CSS ได้

@media (prefers-color-scheme: dark) {
  img {
    filter: brightness(.8) contrast(1.2);
  }
}
ภาพถ่าย 3 ภาพที่ความสว่างปกติ ภาพถ่าย 3 ภาพที่มีความสว่างน้อยลงเล็กน้อย
เอฟเฟกต์นี้อาจไม่ชัดเจน แต่คุณสามารถลดความสว่างของรูปภาพในโหมดมืดได้

สำหรับรูปภาพบางรูป คุณอาจต้องการเปลี่ยนรูปภาพเหล่านั้นทั้งหมดในโหมดมืด เช่น คุณอาจต้องการแสดงแผนที่ด้วยรูปแบบสีเข้ม ใช้องค์ประกอบ <picture> ที่มีองค์ประกอบ <source> ที่มีสื่อ prefers-color-scheme

<picture>
  <source srcset="darkimage.png" media="(prefers-color-scheme: dark)">
  <img src="lightimage.png" alt="A description of the image.">
</picture>
แผนที่ 2 แผ่นของบรูคลิน แผ่นหนึ่งใช้สีอ่อนและอีกแผ่นใช้สีเข้ม
แผนที่เดียวกัน 2 เวอร์ชัน เวอร์ชันหนึ่งสำหรับโหมดสว่างและอีกเวอร์ชันหนึ่งสำหรับโหมดมืด

ฟอร์ม

เบราว์เซอร์มีชุดสีเริ่มต้นสำหรับช่องแบบฟอร์ม แจ้งให้เบราว์เซอร์ทราบว่าเว็บไซต์ของคุณมีทั้งโหมดมืดและโหมดสว่าง วิธีนี้จะช่วยให้เบราว์เซอร์กำหนดรูปแบบเริ่มต้นที่เหมาะสมสำหรับแบบฟอร์มได้

เพิ่มโค้ดต่อไปนี้ลงใน CSS

html {
  color-scheme: light;
}
@media (prefers-color-scheme: dark) {
  html {
    color-scheme: dark;
  }
}

คุณยังใช้ HTML ได้ด้วย เพิ่มโค้ดนี้ในส่วน head ของเอกสาร

<meta name="supported-color-schemes" content="light dark">

ใช้คุณสมบัติ accent-color ใน CSS เพื่อจัดรูปแบบช่องทำเครื่องหมาย ปุ่มตัวเลือก และช่องแบบฟอร์มอื่นๆ

html {
  accent-color: red;
}

ธีมสีเข้มมักจะมีสีของแบรนด์ที่ดูนุ่มนวล คุณอัปเดตค่า accent-color สำหรับโหมดมืดได้

html {
  accent-color: red;
}
@media (prefers-color-scheme: dark) {
  html {
    accent-color: pink;
  }
}

การใช้คุณสมบัติที่กำหนดเองสำหรับกรณีนี้จึงสมเหตุสมผลเพื่อให้คุณเก็บการประกาศสีทั้งหมดไว้ในที่เดียว

html {
  color-scheme: light;
  --page-color: white;
  --ink-color: black;
  --highlight-color: red;
}
@media (prefers-color-scheme: dark) {
  html {
    color-scheme: dark;
    --page-color: black;
    --ink-color: white;
    --highlight-color: pink;
  }
}
html {
  accent-color: var(--highlight-color);
}
body {
  background-color: var(--page-color);
  color: var(--ink-color);
}

การแสดงโหมดมืดเป็นเพียงตัวอย่างหนึ่งของการปรับเว็บไซต์ให้เหมาะกับค่ากำหนดของผู้ใช้ จากนั้นคุณจะได้เรียนรู้วิธีปรับเว็บไซต์ให้เข้ากับข้อควรพิจารณาด้านการช่วยเหลือพิเศษทุกประเภท

ทดสอบความเข้าใจ

ทดสอบความรู้เกี่ยวกับการกำหนดธีม

หากต้องการระบุสีธีมที่มีผลต่อเบราว์เซอร์ภายนอกหน้าเว็บ ให้ใช้

CSS
ข้อมูลธีม CSS อาจทำให้เกิดการกะพริบของสีปกติ ซึ่งเป็นประสบการณ์ของผู้ใช้ที่ไม่พึงประสงค์
JavaScript
เฉพาะในกรณีที่คุณใช้เพื่ออัปเดตแท็ก <meta> "theme-color"
ไฟล์ Manifest ของเว็บแอป
manifest.json สามารถระบุได้และมีช่องสำหรับระบุสีของธีมเพื่อกำหนดสีของลักษณะที่แอปจะปรากฏเมื่อเปิดจากหน้าจอหลักของอุปกรณ์เคลื่อนที่
แท็ก <meta> "theme-color"
ทันทีที่เบราว์เซอร์สังเกตเห็นสีธีมนี้ในแท็ก <head> ก็จะหลีกเลี่ยงการกะพริบสีที่ไม่ต้องการ

หากต้องการเชื่อมต่อกับค่ากำหนดของระบบของผู้ใช้เกี่ยวกับธีมสว่างหรือมืด ให้ใช้

(prefers-color-scheme) การค้นหาสื่อ
ส่งค่าที่ต้องการตรวจสอบ เช่น สว่างหรือมืด แล้วคุณก็พร้อมใช้งาน
JavaScript
จากนั้นจะใช้ไวยากรณ์คิวรี่สื่อ CSS เพื่อขอสถานะปัจจุบันของค่ากำหนด

ดังนั้นคุณจึงรองรับธีมมืด แต่ช่องป้อนข้อมูลทั้งหมดในแบบฟอร์มยังคงเป็นธีมสว่าง คุณทำอะไรได้บ้าง

เพิ่ม html { color-scheme: light dark; } ลงใน CSS
ซึ่งเป็นสัญญาณจาก CSS ที่ระบุว่าอินพุตของแบบฟอร์มควรตรงกับรูปแบบสีของระบบ
เพิ่ม <meta name="supported-color-schemes" content="light dark"> ลงในแท็ก <head> HTML
ซึ่งส่งสัญญาณจาก HTML ว่าอินพุตของแบบฟอร์มควรตรงกับรูปแบบสีของระบบ
เขียน CSS จำนวนมากเพื่อเปลี่ยนค่าเริ่มต้นทั้งหมดของอินพุต
วิธีนี้ก็ได้ผลเช่นกัน แต่จะยากกว่าเล็กน้อย