Cara lain untuk mencapai ini, terutama bagi seseorang yang membutuhkan ini untuk bekerja dengan segitiga sama sisi atau bahkan tidak sama panjang seperti yang saya lakukan, adalah menggunakan filter: drop-shadow(...)
beberapa nilai dan tanpa radius buram. Ini memiliki keuntungan tambahan karena tidak memerlukan banyak elemen, atau akses ke keduanya : sebelum dan: sesudah (saya mencoba melakukannya dengan: setelah konten yang sebaris, jadi ingin menghindari pemosisian absolut juga).
Untuk kasus di atas, CSS: after bisa terlihat seperti ini ( biola ):
.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>
Saya pikir ada beberapa batasan atau keanehan:
- Tidak ada dukungan di IE11 (meskipun tampaknya baik-baik saja di FF, Chrome, dan Edge)
- Saya tidak begitu yakin mengapa .5px untuk
<offset-y>
nilai di drop-shadow kedua () di atas tampak lebih seperti 1px daripada 1px, meskipun saya membayangkan itu terkait dengan trigonometri (meskipun setidaknya di monitor saya, saya tidak melihat perbedaan antara nilai sebenarnya berbasis trigonometri atau .5px atau bahkan .1px dalam hal ini).
- Batas lebih besar dari 1px (yah, tampilannya seperti itu) sepertinya tidak berfungsi dengan baik. Atau setidaknya saya belum menemukan solusinya, meskipun lihat di bawah untuk cara yang kurang optimal untuk menjadi sedikit lebih besar. (Saya akan berpikir parameter ke-4 yang didokumentasikan-tetapi-tidak didukung (
<spread-radius>
) dari drop-shadow () mungkin yang sebenarnya saya cari daripada beberapa nilai filter, tetapi menambahkannya hanya akan merusak semuanya.) Di sini Anda dapat melihat apa mulai terjadi saat melampaui 1px ( biola ):
.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>
Perhatikan kelucuan bahwa yang pertama (hijau) diterapkan sekali, tetapi yang kedua (merah) diterapkan baik ke segitiga kuning yang dibuat melalui perbatasan serta drop-shadow hijau (), dan yang terakhir (biru) diterapkan ke semua hal di atas. (Mungkin itu juga terkait dengan hal tampilan .5px).
Tapi saya rasa Anda bisa memanfaatkan drop-shadow ini yang saling membangun jika Anda membutuhkan sesuatu yang tampak lebih lebar dari 1px, dengan mengubahnya menjadi seperti berikut ( biola ):
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);
di mana yang pertama memiliki rangkaian blur-radius (dalam hal ini 2.5px, meskipun hasilnya tampak berlipat ganda), dan sisanya memiliki blur pada 0. Tetapi ini hanya akan berfungsi untuk warna yang sama di semua sisi, dan hasilnya di beberapa sudut yang tampak membulat serta tepi yang cukup kasar, semakin besar ukurannya.