เครื่องสร้างเงากล่อง CSS

ถัดไป

สร้างกฎ box-shadow ครั้งละหนึ่งกฎ: ตั้งค่าออฟเซ็ตแนวนอนและแนวตั้ง การเบลอ การกระจาย สี และ inset (ไม่บังคับ) แล้วคัดลอกผลลัพธ์ เงาที่สมจริงมักต้องใช้สองหรือสามชั้น ดังนั้นให้สร้างแต่ละชั้นแยกกันแล้วต่อกฎเข้าด้วยกันด้วยเครื่องหมายจุลภาค

วิธีออกแบบเงากล่อง

  1. 1

    ตั้งค่าเงา

    ออฟเซ็ตแนวนอน ออฟเซ็ตแนวตั้ง รัศมีการเบลอ การกระจาย และสีพร้อมค่าความทึบ

  2. 2

    สลับ inset

    พลิกเงาเป็น inset เพื่อสร้างเงาด้านใน เหมาะสำหรับปุ่มที่ถูกกดและเอฟเฟกต์รอยบุ๋ม

  3. 3

    เลือกสีของเงา

    สีดำที่มีความทึบต่ำเป็นตัวเลือกคลาสสิก ส่วนเงาที่มีสี (เข้ากับโทนสีขององค์ประกอบและเข้มกว่าเล็กน้อย) จะดูเป็นธรรมชาติมากกว่า

  4. 4

    คัดลอก CSS

    คัดลอกกฎเงาเดี่ยวแล้ววางลงในสไตล์ชีตของคุณ สำหรับเงาหลายชั้น ให้สร้างแต่ละชั้นแยกกันแล้วรวมกฎด้วยเครื่องหมายจุลภาค

ไวยากรณ์ของ box-shadow

box-shadow: <x-offset> <y-offset> <blur> <spread> <colour> [inset];
  • x-offset: ค่าบวก = ไปทางขวา, ค่าลบ = ไปทางซ้าย
  • y-offset: ค่าบวก = ลงล่าง, ค่าลบ = ขึ้นบน
  • blur: 0 = ขอบคมชัด, ค่ายิ่งสูงยิ่งนุ่มนวลขึ้น ขนาดที่มองเห็นจะแผ่ออกนอกองค์ประกอบประมาณ 1.5 เท่าของค่าเบลอ
  • spread: ขนาดที่เพิ่มออกไปเกินขอบขององค์ประกอบ ค่าบวกทำให้เงาขยายใหญ่ขึ้น ค่าลบทำให้เล็กลง (เหมาะสำหรับสร้างแสงเรืองรอบบางๆ)
  • colour: รองรับสีทุกแบบของ CSS โดย rgba(0, 0, 0, 0.15) เป็นค่าพื้นฐานที่ใช้กันมากที่สุด
  • inset: คีย์เวิร์ดที่พลิกเงาให้อยู่ภายในองค์ประกอบ

เงาหลายชั้นดูสมจริง

เครื่องมือนี้สร้างกฎเงาครั้งละหนึ่งกฎ หากต้องการเงาหลายชั้น ให้สร้างแต่ละชั้นแยกกันแล้วรวมกฎด้วยเครื่องหมายจุลภาค

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

box-shadow:
  0 1px 2px rgba(0, 0, 0, 0.08),
  0 4px 12px rgba(0, 0, 0, 0.08);

บรรทัดแรกให้เงาสัมผัสที่แนบชิด ส่วนบรรทัดที่สองให้เงาแวดล้อมที่นุ่มนวลกว่า รูปแบบเดียวนี้ครอบคลุมอินเทอร์เฟซแบบการ์ดได้ถึง 80%

ระบบระดับความสูง (Elevation)

Material Design ใช้ระดับความสูง (elevation) 6 ระดับ โดยแต่ละระดับมีชุดเงาที่ต่างกัน สรุปอย่างง่ายได้ดังนี้:

ระดับความสูง เงา
1 (อยู่นิ่ง) 0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.24)
2 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(0,0,0,.23)
3 0 10px 20px rgba(0,0,0,.19), 0 6px 6px rgba(0,0,0,.23)
4 (ยกขึ้น) 0 14px 28px rgba(0,0,0,.25), 0 10px 10px rgba(0,0,0,.22)
5 (ลอยอยู่) 0 19px 38px rgba(0,0,0,.30), 0 15px 12px rgba(0,0,0,.22)

เลือกหนึ่งค่าสำหรับแต่ละบทบาทระดับความสูง แล้วใช้อย่างสม่ำเสมอ

เงาที่มีสีดูเป็นธรรมชาติมากกว่า

เงาสีดำล้วนดูปลอม เพราะเงาจริงจะถูกย้อมสีโดยพื้นผิวที่อยู่ด้านล่าง ลองทำดังนี้:

box-shadow: 0 12px 24px rgba(40, 80, 120, 0.18);

ใช้สีเทาอมฟ้าเย็นๆ แทนสีดำล้วน หากเป็นพื้นหลังโทนอุ่น ให้เลือกโทนสีที่อุ่นกว่า

ประสิทธิภาพ

box-shadow จะถูกวาดใหม่ทุกครั้งที่มีการรีเพนต์ (repaint) เงาขนาดใหญ่และหนาบนองค์ประกอบจำนวนมากอาจทำให้การเลื่อนหน้าจอช้าลง วิธีบรรเทา:

  • ใช้ transform: translateZ(0) กับองค์ประกอบเพื่อบังคับให้เกิดเลเยอร์แบบคอมโพสิต
  • แทนที่เงาที่ซับซ้อนด้วย filter: drop-shadow() เฉพาะเมื่อคุณต้องการให้เงาเคลื่อนตาม clip-path เท่านั้น (โดยทั่วไปจะช้ากว่า)
  • จำกัดเงาบนองค์ประกอบที่ถูกเรนเดอร์ใหม่บ่อยครั้ง

inset สำหรับสถานะที่ถูกกด

.button:active {
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.12);
}

เงาแบบ inset จำลองลักษณะที่จมลงไป ทำให้ปุ่มดูเหมือนถูกกดลงไปในพื้นผิว เมื่อใช้ร่วมกับ transform: translateY(1px) เล็กน้อยที่ขยับลงล่าง จะให้ความรู้สึกของการคลิกที่จับต้องได้

คำถามที่พบบ่อย

โดยทั่วไปเป็นเพราะค่าเบลอต่ำเกินไปหรือค่าการกระจายสูงเกินไป เงาที่มีขอบคมชัดและไม่มีการเบลอจะดูเหมือนองค์ประกอบที่ถูกทำซ้ำ ให้เพิ่มค่าเบลอ (20–30px เป็นจุดเริ่มต้นที่นิยมใช้) และคงค่าการกระจายไว้ที่ 0 หรือค่าลบเล็กๆ

box-shadow จะเคลื่อนตามกล่องขอบ (border-box) ขององค์ประกอบ รวมถึงค่า border-radius ด้วย ดังนั้นการ์ดที่มีมุมโค้งจะได้เงาโค้งมนสวยงามโดยอัตโนมัติ สำหรับรูปทรงที่สร้างด้วย clip-path นั้น box-shadow จะไม่เคลื่อนตามรอยตัด ให้ใช้ filter: drop-shadow() แทน

เลื่อนเงาไปในทิศทางที่เลือกอย่างมาก แล้วใช้ค่าการกระจายแบบลบเพื่อซ่อนด้านตรงข้าม หรือใช้เงาสองชั้น ชั้นหนึ่งมองเห็นได้ที่ด้านเป้าหมาย อีกชั้นใช้ค่าการกระจายแบบลบเพื่อ “กลืน” ส่วนที่ล้นออกมาโดยไม่ต้องการ

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

เครื่องมือที่เกี่ยวข้อง

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

ตัวลดรูปพีชคณิตบูลีน

ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^

เครื่องสร้างตัวอักษรสุ่ม

สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

เครื่องมือตรวจสอบหมายเลขโทรศัพท์

ตรวจสอบโครงสร้างหมายเลขตามประเทศ พร้อมดูภูมิภาค ประเภท และรูปแบบ E.164 ระหว่างประเทศ ในประเทศ และ RFC 3966