ข้ามไปยังเนื้อหา

Display และ Theme

เมื่อผู้ใช้ติดตั้ง PWA ของคุณแล้ว ฟิลด์ใน manifest ที่กล่าวถึงในบทเรียนนี้จะกำหนดว่าแอปดูเหมือน application แท้จริงหรือยังคงแสดง UI ของ browser และวิธีที่แอปผสานกับ OS ในระดับภาพ

ฟิลด์ display ตั้งค่า display mode ที่ต้องการสำหรับหน้าต่างแอป:

ค่าUI browserกรณีใช้งาน
standaloneไม่มีแถบที่อยู่, มี OS chrome น้อยที่สุดแอปส่วนใหญ่ — รู้สึกเหมือนแอปแท้จริง
fullscreenไม่มี UI browser เลยเกม, ประสบการณ์แบบดื่มด่ำ
minimal-uiมีเพียงปุ่มย้อนกลับ/ไปข้างหน้า/โหลดซ้ำตัวดูเนื้อหา, media player
browserUI browser แบบเต็มFallback — เหมือนแท็บปกติ
{ "display": "standalone" }

display_override คือรายการลำดับความชอบ browser เลือกค่าแรกที่รองรับแล้ว fallback ไปยัง display ใช้เพื่อขอ mode ใหม่กว่าอย่าง window-controls-overlay บน browser ที่รองรับ:

{
"display": "standalone",
"display_override": ["window-controls-overlay", "standalone"]
}

theme_color ทาสีแถบเครื่องมือของ browser และไทล์ task switcher บน Android ตั้งค่าเป็นสีหลักของแบรนด์ คุณสามารถตั้งค่าต่อหน้าด้วย <meta name="theme-color"> ได้ — meta tag จะ override manifest สำหรับหน้านั้น

background_color คือสีที่แสดงระหว่าง splash screen (ช่วงสั้น ๆ ระหว่างการแตะ icon กับการแสดงผลครั้งแรกของแอป) ตั้งค่าให้ตรงกับ background ของแอปเพื่อให้การเปลี่ยนผ่านราบรื่น

{
"theme_color": "#5A0FC8",
"background_color": "#ffffff"
}
flowchart TD
  A["Browser reads display_override list"] --> B{"Supports first value?"}
  B -->|"Yes"| C["Use that display mode"]
  B -->|"No"| D{"More items in override list?"}
  D -->|"Yes"| A
  D -->|"No"| E["Fall back to display field"]
  E --> F{"display value supported?"}
  F -->|"Yes"| G["Use display value"]
  F -->|"No"| H["Use browser (default)"]
วิธีที่ browser เลือก display mode

orientation ล็อกการหมุนหน้าจอเมื่อ PWA กำลังทำงาน ค่าทั่วไป: "portrait", "landscape", "any", "natural" ละเว้นเพื่อให้ผู้ใช้หมุนได้อย่างอิสระ

{ "orientation": "portrait" }

categories คืออาร์เรย์ของสตริงที่แนะนำ app directory และ OS store เกี่ยวกับประเภทของแอป ค่าทั่วไปสอดคล้องกับหมวดหมู่ Play Store: "productivity", "utilities", "games", "finance" เป็นต้น

{ "categories": ["productivity", "utilities"] }

screenshots ให้รูปภาพที่แสดงใน install dialog บน browser และ OS store ที่รองรับ แต่ละรายการมี src, sizes, type และ form_factor ที่ไม่บังคับ ("narrow" สำหรับมือถือ, "wide" สำหรับเดสก์ท็อป)

{
"screenshots": [
{
"src": "/screenshots/home-narrow.png",
"sizes": "390x844",
"type": "image/png",
"form_factor": "narrow",
"label": "Home screen on mobile"
},
{
"src": "/screenshots/home-wide.png",
"sizes": "1280x800",
"type": "image/png",
"form_factor": "wide",
"label": "Home screen on desktop"
}
]
}

Chrome บนเดสก์ท็อปต้องการ screenshot อย่างน้อยหนึ่งรูปก่อนจะแสดง install dialog แบบ rich พร้อม preview panel

ตัวเลือกBenefitCost
display: “standalone”รู้สึกเหมือน native app เต็มตัว ไม่มี browser UIผู้ใช้เสีย back/forward button และ address bar ที่คุ้นเคย
display: “browser”คงพฤติกรรม browser ปกติ ผู้ใช้งานคุ้นเคยทันทีไม่ได้ความรู้สึก “แอป” ที่ install prompt สัญญาไว้
  • ตั้ง theme_color ใน manifest อย่างเดียว โดยไม่ตั้ง <meta name="theme-color"> คู่กัน ทำให้สีไม่ตรงกันระหว่าง browser UI กับตอนเป็น standalone
  • เลือก display: “fullscreen” สำหรับแอปทั่วไป ทำให้ผู้ใช้เสีย status bar และ gesture navigation จนใช้งานยาก
  • ไม่ทดสอบ theme บน dark mode ทำให้สี background/theme ขัดกับสีระบบของผู้ใช้

💡 ตัวอย่างจากของจริง

Spotify Web Player — ใช้ display: “standalone” คู่กับ theme_color สีดำ ให้ความรู้สึกเหมือนแอป desktop native ตั้งแต่วินาทีแรกที่เปิด

Twitter Lite — ปรับ theme_color ให้ตรงกับ brand color ทำให้ status bar กลมกลืนกับ UI ทันทีที่เปิดจาก home screen

ค่า display ใดที่ลบ UI browser ทั้งหมดเพื่อสร้างประสบการณ์แบบดื่มด่ำเต็มที่?
background_color ใน manifest มีจุดประสงค์อะไร?
display_override ทำงานอย่างไรเมื่อ browser ไม่รองรับค่าแรก?
ฟิลด์ manifest ใดที่แนะนำ app store เกี่ยวกับหมวดหมู่ของแอป?