เครื่องสร้างเงากล่อง CSS
สร้างกฎ box-shadow ครั้งละหนึ่งกฎ: ตั้งค่าออฟเซ็ตแนวนอนและแนวตั้ง การเบลอ การกระจาย สี และ inset (ไม่บังคับ) แล้วคัดลอกผลลัพธ์ เงาที่สมจริงมักต้องใช้สองหรือสามชั้น ดังนั้นให้สร้างแต่ละชั้นแยกกันแล้วต่อกฎเข้าด้วยกันด้วยเครื่องหมายจุลภาค
วิธีออกแบบเงากล่อง
-
1
ตั้งค่าเงา
ออฟเซ็ตแนวนอน ออฟเซ็ตแนวตั้ง รัศมีการเบลอ การกระจาย และสีพร้อมค่าความทึบ
-
2
สลับ inset
พลิกเงาเป็น inset เพื่อสร้างเงาด้านใน เหมาะสำหรับปุ่มที่ถูกกดและเอฟเฟกต์รอยบุ๋ม
-
3
เลือกสีของเงา
สีดำที่มีความทึบต่ำเป็นตัวเลือกคลาสสิก ส่วนเงาที่มีสี (เข้ากับโทนสีขององค์ประกอบและเข้มกว่าเล็กน้อย) จะดูเป็นธรรมชาติมากกว่า
-
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