อีกวิธีหนึ่งในการทำสิ่งนี้ให้สำเร็จโดยเฉพาะอย่างยิ่งสำหรับผู้ที่ต้องการให้สิ่งนี้ทำงานกับสามเหลี่ยมด้านเท่าหรือแม้แต่ย้อยเหมือนที่ฉันทำคือใช้filter: drop-shadow(...)
กับหลายค่าและไม่มีรัศมีเบลอ สิ่งนี้มีประโยชน์เพิ่มเติมจากการไม่ต้องการองค์ประกอบหลายรายการหรือการเข้าถึงทั้งก่อนและหลัง (ฉันพยายามทำสิ่งนี้ให้สำเร็จด้วย: after เนื้อหาที่อยู่ในบรรทัดดังนั้นจึงต้องการหลีกเลี่ยงการวางตำแหน่งแบบสัมบูรณ์ด้วย)
สำหรับกรณีข้างต้น CSS ของ after อาจมีลักษณะเช่นนี้ ( fiddle ):
.container {
margin-left: 15px;
width: 200px;
background: #FFFFFF;
border: 1px solid #CAD5E0;
padding: 4px;
position: relative;
min-height: 200px;
}
.container:after {
content: '';
display: block;
position: absolute;
top: 10px;
left: 100%;
width: 0;
height: 0;
border-style: solid;
border-width: 20px 0 40px 15px; /* skewed to show support for non-right-angle triangles */
border-color: transparent transparent transparent #fff;
filter: drop-shadow(1px 0 0 #CAD5E0) drop-shadow(0 .5px 0 #CAD5E0);
}
<div class="container">
Test Container
</div>
ฉันคิดว่ามีข้อ จำกัดหรือแปลก ๆ อยู่บ้าง:
- ไม่รองรับ IE11 (แม้ว่าจะดูดีใน FF, Chrome และ Edge)
- ฉันไม่ค่อยแน่ใจว่าทำไม. 5px สำหรับ
<offset-y>
ค่าใน drop-shadow ที่สอง () ด้านบนจึงดูเหมือน 1px มากกว่า 1px จะมีแม้ว่าฉันคิดว่ามันเกี่ยวข้องกับตรีโกณมิติ (แม้ว่าอย่างน้อยในจอภาพของฉันฉันก็ไม่เห็นความแตกต่างระหว่าง ค่าตามจริงหรือ. 5px หรือแม้แต่. 1px สำหรับเรื่องนั้น)
- เส้นขอบที่มากกว่า 1px (ลักษณะที่ปรากฏในแบบนั้น) ดูเหมือนจะไม่ได้ผล หรืออย่างน้อยฉันก็ยังไม่พบวิธีแก้ปัญหา แต่ดูด้านล่างสำหรับวิธีที่น้อยกว่าที่เหมาะสมในการไปให้ใหญ่ขึ้นเล็กน้อย (ฉันคิดว่าพารามิเตอร์ที่ 4 ที่มีเอกสาร แต่ไม่รองรับ (
<spread-radius>
) ของ drop-shadow () อาจเป็นสิ่งที่ฉันกำลังมองหาแทนที่จะเป็นค่าตัวกรองหลายค่า แต่การเพิ่มเข้าไปในสิ่งที่ขัดข้องโดยสิ้นเชิง) ที่นี่คุณสามารถดูสิ่งที่ เริ่มเกิดขึ้นเมื่อเกิน 1px ( ซอ ):
.container {
background-color: #eee;
padding: 1em;
}
.container:after {
content: "";
width: 0;
height: 0;
border-style: solid;
border-width: 20.4px 10px 0 10px;
border-color: yellow transparent transparent transparent;
margin-left: .25em;
display: inline-block;
filter: drop-shadow(-6px -4px 0 green) drop-shadow(6px -4px 0 red) drop-shadow(0 6px 0 blue);
}
<div class="container">
Test Container
</div>
สังเกตความสนุกสนานที่อันแรก (สีเขียว) ถูกนำไปใช้ครั้งเดียว แต่อันที่สอง (สีแดง) จะถูกนำไปใช้ทั้งกับสามเหลี่ยมสีเหลืองที่สร้างผ่านเส้นขอบเช่นเดียวกับเงาหล่นสีเขียว () และอันสุดท้าย (สีน้ำเงิน) จะถูกนำไปใช้กับทั้งหมดข้างต้น (บางทีอาจเกี่ยวข้องกับลักษณะที่ปรากฏ. 5px ด้วย)
แต่ฉันเดาว่าคุณสามารถใช้ประโยชน์จากการสร้างเงาตกกระทบซึ่งกันและกันได้หากคุณต้องการอะไรที่ดูกว้างกว่า 1px โดยเปลี่ยนเป็นสิ่งต่อไปนี้ ( ซอ ):
filter: drop-shadow(0 0 2.5px red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red);
โดยที่อันแรกมีการตั้งค่ารัศมีเบลอ (2.5px ในกรณีนี้แม้ว่าผลลัพธ์จะปรากฏเป็นทวีคูณ) และส่วนที่เหลือทั้งหมดจะเบลอที่ 0 แต่จะใช้ได้เฉพาะกับสีเดียวกันในทุกด้านและให้ผลลัพธ์ ในบางมุมที่ดูโค้งมนและขอบที่ค่อนข้างหยาบยิ่งคุณไปกันใหญ่