เครื่องสร้างเงากล่อง 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 แทน
เครื่องมือที่เกี่ยวข้อง
อ้างอิงตัวอักษร HTML
รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ
ตารางอ้างอิง ASCII
ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL
ตารางอ้างอิงแป้นพิมพ์ลัด
ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux
เครื่องสุ่มที่อยู่
สร้างระเบียนคล้ายที่อยู่ 1–20 รายการสำหรับแบบจำลองและการทดสอบ ด้วยรูปแบบประเทศแบบย่อ
ตัวตรวจสอบความถูกต้องของ JSON
ตรวจสอบไวยากรณ์ JSON และตรวจจับเครื่องหมายจุลภาคต่อท้าย เครื่องหมายอัญประกาศที่ผิด คีย์ซ้ำ และโครงสร้างที่ผิดรูปแบบ พร้อมระบุตำแหน่งข้อผิดพลาดอย่างแม่นยำ
เครื่องสร้างตัวอักษรสุ่ม
สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน
เครื่องมือนี้มีให้บริการในภาษาอื่น
- CSS 박스 그림자 생성기 [KO]
- Gerador de Sombra de Caixa CSS [PT]
- Generador de Sombra de Caja CSS [ES]
- CSSボックスシャドウジェネレーター [JA]
- CSS-box-shadow-generator [NL]
- Trình tạo box-shadow CSS [VI]
- Générateur d'ombre de boîte CSS [FR]
- CSS-Box-Schatten-Generator [DE]
- CSS box-shadow-generator [SV]
- مولد الظل لصندوق CSS [AR]
- Generator Bayangan Kotak CSS [ID]
- Generator cienia CSS (box-shadow) [PL]
- Generatore di Ombre CSS [IT]
- Генератор теней box-shadow для CSS [RU]
- CSS Box Shadow (Kutu Gölgesi) Oluşturucu [TR]
- CSS 盒子阴影生成器 [ZH]
- CSS Box Shadow Generator [EN]