การกำหนดค่าหน้าจอ

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

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

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

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

ภาพจากโทรศัพท์แบบพับได้ในรูปแบบที่หลากหลาย

Dual Screen

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

เว็บไซต์ที่ครอบคลุม 2 หน้าจอ การไหลเวียนของข้อความในแนวนอนถูกขัดจังหวะด้วยบานพับระหว่างหน้าจอ

กลุ่มวิวพอร์ต

มีฟีเจอร์สื่อทดลองที่ออกแบบมาเพื่อตรวจสอบว่าเว็บไซต์ของคุณกำลังแสดงบนอุปกรณ์แบบ 2 หน้าจอหรือไม่ ชื่อที่เสนอของฟีเจอร์สื่อคือ viewport-segments มีรูปแบบ 2 แบบ ได้แก่ horizontal-viewport-segments และ vertical-viewport-segments

หากฟีเจอร์สื่อของ horizontal-viewport-segments รายงานค่า 2 และ vertical-viewport-segments รายงานค่าเป็น 1 ซึ่งหมายความว่าบานพับบนอุปกรณ์จะทำงานจากบนลงล่าง และแยกเนื้อหาออกเป็น 2 แผงข้างกัน

@media (horizontal-viewport-segments: 2) and (vertical-viewport-segments: 1) {
  // Styles for side-by-side screens.
}

หากฟีเจอร์สื่อของ vertical-viewport-segments รายงานค่า 2 และ horizontal-viewport-segments รายงานค่าเป็น 1 บานพับจะทำงานจากด้านหนึ่งไปอีกด้านหนึ่ง โดยแบ่งเนื้อหาออกเป็น 2 แผง โดยแผงหนึ่งอยู่ที่ด้านบนของอีกแผง

@media (vertical-viewport-segments: 2) and (horizontal-viewport-segments: 1) {
  // Styles for stacked screens.
}
แผนภาพแสดงส่วนวิวพอร์ต
แผนภาพจาก Microsoft Edge Explainers

หากทั้ง vertical-viewport-segments และ horizontal-viewport-segments รายงานค่า 1 หมายความว่าเว็บไซต์กำลังแสดงเพียงหน้าจอเดียว แม้ว่าอุปกรณ์จะมีหน้าจอมากกว่า 1 หน้าจอก็ตาม ซึ่งเทียบเท่ากับการไม่ใช้คิวรี่สื่อใดๆ

ตัวแปรสภาพแวดล้อม

แค่เพียงฟีเจอร์สื่อของ viewport-segments ก็ช่วยออกแบบบานพับที่ก่อให้เกิดความรำคาญใจได้ ต้องรู้ขนาดบานพับ สิ่งที่ตัวแปรสภาพแวดล้อมสามารถช่วยได้

ตัวแปรสภาพแวดล้อมใน CSS ช่วยให้คุณสามารถรวมการบุกรุกอุปกรณ์ที่น่าอึดอัดใจในสไตล์ของคุณ เช่น คุณสามารถออกแบบบริเวณ "รอยบาก" ใน iPhone X โดยใช้ค่าสภาพแวดล้อม safe-area-inset-top, safe-area-inset-right, safe-area-inset-bottom และ safe-area-inset-left คีย์เวิร์ดเหล่านี้จะรวมอยู่ในฟังก์ชัน env()

body {
  padding-top: env(safe-area-inset-top);
  padding-right: env(safe-area-inset-right);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: env(safe-area-inset-left);
}

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

body {
  padding-top: env(safe-area-inset-top, 1em);
  padding-right: env(safe-area-inset-right, 1em);
  padding-bottom: env(safe-area-inset-bottom, 1em);
  padding-left: env(safe-area-inset-left, 1em);
}

อัปเดตองค์ประกอบ meta ที่ระบุข้อมูล viewport เพื่อให้ตัวแปรสภาพแวดล้อมดังกล่าวทำงานใน iPhone X ได้

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">

ตอนนี้เลย์เอาต์หน้าเว็บจะเริ่มกินทั้งวิวพอร์ตและใส่ไว้ในเอกสารอย่างปลอดภัยด้วยค่าภายในที่ให้มา

มีการเสนอตัวแปรสภาพแวดล้อมใหม่ 6 ตัวแปรสำหรับหน้าจอแบบพับได้ ได้แก่ viewport-segment-width, viewport-segment-height, viewport-segment-top, viewport-segment-left, viewport-segment-bottom, viewport-segment-right

แผนภาพแสดงตัวแปรสภาพแวดล้อมสำหรับ Dual Screen
แผนภาพจาก Microsoft Edge Explainers

ต่อไปนี้เป็นตัวอย่างของการออกแบบที่มี 2 คอลัมน์ โดยคอลัมน์หนึ่งกว้างกว่าอีกคอลัมน์

@media (min-width: 45em) {
  main {
    display: flex;
    flex-direction: row;
  }
  main article {
    flex: 2;
  }
  main aside {
    flex: 1;
  }
}

เลย์เอาต์จะแยกออกเป็น 2 หน้าจอ โดยมีบานพับขัดจังหวะคอลัมน์ที่กว้าง

สำหรับ Dual Screen ที่มีบานพับแนวตั้ง ให้ตั้งค่าคอลัมน์แรกเป็นความกว้างของหน้าจอแรก และคอลัมน์ที่ 2 เป็นความกว้างของหน้าจอที่ 2

@media (horizontal-viewport-segments: 2) and (vertical-viewport-segments: 1) {
  main article {
    flex: 1 1 env(viewport-segment-width 0 0);
  }
  main aside {
    flex: 1;
  }
}

เลย์เอาต์จะแบ่งออกเป็น 2 หน้าจอเท่าๆ กันโดยไม่มีการหยุดชะงัก

ถือว่า Dual Screen เป็นโอกาส บางทีอาจใช้หน้าจอหนึ่งเพื่อแสดงเนื้อหาข้อความแบบเลื่อนได้ ขณะที่อีกหน้าจอหนึ่งแสดงองค์ประกอบคงที่ เช่น รูปภาพหรือแผนที่

แผนภาพแสดงบริการตำแหน่งที่แยกเป็น 2 หน้าจอ โดยมีแผนที่ในหน้าจอหนึ่งและขอเส้นทางอยู่อีกหน้าจอ
แผนภาพจาก Microsoft Edge Explainers

อนาคต

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

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

ตรวจสอบความเข้าใจของคุณ

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

คำค้นหาสื่อใดกำหนดเป้าหมายอุปกรณ์พับได้ในโหมดแนวนอนแยก

@media (horizontal-viewport-segments: 2) and (vertical-viewport-segments: 1)
หน้าจอได้รับการกำหนดค่าด้วย 2 คอลัมน์และ 1 แถวแนวนอน
@media (vertical-viewport-segments: 2) and (horizontal-viewport-segments: 1)
2 แถวและ 1 คอลัมน์ แยกแนวตั้ง
@media (vertical-viewport-segments: 2) and (horizontal-viewport-segments: 2)
2 แถวและ 2 คอลัมน์ โดยแยกเป็น 4 ส่วน
@media (vertical-viewport-segments: 1) and (horizontal-viewport-segments: 1)
เซลล์เดียว ไม่มีการแยก

ตัวแปรสภาพแวดล้อมคืออะไร เช่น env(safe-area-inset-top)

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