CATATAN: Saya sarankan memeriksa jawaban @ Hamish di bawah ini; itu tidak melibatkan "masking" yang tidak sempurna dalam solusi yang dijelaskan di sini.
Anda bisa dekat dengan banyak bayangan kotak; satu untuk setiap sisi
box-shadow: 12px 0 15px -4px rgba(31, 73, 125, 0.8), -12px 0 8px -4px rgba(31, 73, 125, 0.8);
http://jsfiddle.net/YJDdp/
Edit
Tambahkan 2 bayangan kotak lagi untuk bagian atas dan bawah depan untuk menutupi yang berdarah.
box-shadow: 0 9px 0px 0px white, 0 -9px 0px 0px white, 12px 0 15px -4px rgba(31, 73, 125, 0.8), -12px 0 15px -4px rgba(31, 73, 125, 0.8);
http://jsfiddle.net/LE6Lz/
Saya tidak puas dengan bagian atas dan bawah yang dibulatkan ke bayangan yang ada dalam solusi Deefour sehingga saya buat sendiri.
inset
box-shadow
menciptakan bayangan seragam yang bagus dengan potongan atas dan bawah.Untuk menggunakan efek ini di sisi elemen Anda, buat dua elemen semu
:before
dan:after
posisikan secara absolut di sisi elemen asli.Edit
Tergantung pada desain Anda, Anda mungkin dapat menggunakan
clip-path
, seperti yang ditunjukkan pada jawaban @ Luke. Namun, perhatikan bahwa dalam banyak kasus ini masih menghasilkan pengurangan bayangan di bagian atas dan bawah seperti yang Anda lihat dalam contoh ini:sumber
:after
kebutuhan Andatop: 0
juga.display: inline-block
kelas pseudo agar contoh Anda berfungsi. Semua dalam semua: solusi bagus. +1not
memerlukan kembali<div>
elemen pembantu . :-)Coba ini, ini bekerja untuk saya:
sumber
Pendekatan klasik: Penyebaran negatif
CSS box-shadow menggunakan 4 parameter: h-shadow, v-shadow, blur, spread:
The v-shadow (bayangan verical) diatur ke 0.
The blur parameter menambahkan efek gradien, tetapi menambahkan juga bayangan kecil di perbatasan vertikal (yang kita ingin menyingkirkan).
Spread negatif mengurangi bayangan di semua batas: Anda dapat bermain dengannya mencoba menghilangkan bayangan vertikal kecil tanpa mempengaruhi terlalu banyak yang mematuhi sisi (lebih mudah untuk bayangan kecil, 5 hingga 10px.)
Berikut contoh biola .
Pendekatan kedua: Absolute div di samping
Tambahkan div kosong di elemen Anda, dan gaya itu dengan posisi absolut sehingga tidak mempengaruhi konten elemen.
Di sini biola dengan contoh bayangan kiri.
Ketiga: Masking shadow
Jika Anda memiliki latar belakang tetap, Anda dapat menyembunyikan efek bayangan sisi dengan dua bayangan masking yang memiliki warna latar yang sama dan blur = 0, contoh:
Saya telah menambahkan lagi sebaran negatif (-3px) ke bayangan hitam, sehingga tidak meluas di luar sudut.
Sini biola .
sumber
Ini berfungsi dengan baik untuk semua browser:
sumber
DEMO
Anda harus menggunakan banyak
box-shadow;
. Properti inset membuatnya terlihat bagus dan di dalamsumber
Cara lain adalah dengan:
overflow-y:hidden
pada induk dengan padding.http://jsfiddle.net/qqx221c8/
sumber
clip-path
sekarang (2020) cara terbaik yang saya temukan untuk mencapai bayangan kotak pada sisi elemen tertentu, terutama ketika efek yang diperlukan adalah bayangan "potongan bersih" di bagian tertentu , seperti ini:... sebagai lawan dari bayangan yang dilemahkan / dikurangi / menipis seperti ini:
Cukup terapkan CSS berikut ke elemen yang dimaksud:
Dimana:
Apx
mengatur visibilitas bayangan untuk tepi atasBpx
BaikCpx
bawahDpx
kiriMasukkan nilai 0 untuk setiap tepi di mana bayangan harus disembunyikan dan nilai negatif (sama dengan hasil gabungan dari radius blur + nilai sebaran -
Xpx + Ypx
) ke tepi mana pun di mana bayangan harus ditampilkan.sumber
clip-path
contohnya? Ada 2 cuplikan kode. Penggunaan pertamaclip-path
dan memiliki cut off yang benar-benar bersih tanpa "sudut atas dan bawah melengkung" - sangat mirip dengan solusi Anda (tetapi dengan CSS lebih sedikit diperlukan). Cuplikan kode kedua adalah contoh hanya untuk perbandingan - banyak solusi menghasilkan bayangan kotak yang tersebar yang sering kali bukan yang ingin dicapai orang.box-shadow
properti menjadi sesuatu seperti0 0 10px 5px rgba(0,0,0,0.75);
. Catat nilai tambahspread
dan kurangiblur-radius
.Ini bekerja di pihak saya. Semoga ini bisa membantu Anda.
sumber
NAD INSET BAGUS PADA KIRI DAN SISI YANG TEPAT UNTUK DIV, GAMBAR ATAU ISI INNER
Untuk bayangan sisipan yang bagus di sisi kanan dan kiri pada gambar, atau konten lainnya, gunakan dengan cara ini
*** Indeks-z: -1 melakukan trik yang bagus saat menampilkan gambar atau objek dalam dengan insets
sumber
Dalam beberapa situasi Anda dapat menyembunyikan bayangan dengan wadah lain. Misalnya, jika ada DIV di atas dan di bawah DIV dengan bayangan, Anda dapat menggunakan
position: relative; z-index: 1;
DIV sekitarnya.sumber
Untuk horizontal saja, Anda bisa menipu bayangan kotak menggunakan overflow pada div induknya:
sumber
Gagasan lain dapat menciptakan elemen pseudo kabur gelap akhirnya dengan transparansi untuk meniru bayangan. Buat dengan ketinggian sedikit lebih sedikit dan lebih banyak ig
sumber
Anda dapat menggunakan 1 div di dalamnya untuk "menghapus" bayangan:
Anda dapat bermain dengan "tinggi:%;" dan "lebar:%;" untuk menghapus bayangan apa yang Anda inginkan.
sumber
Untuk alasan apa pun jawaban yang diberikan di sini tidak akan berfungsi dalam kasus saya. Jadi, saya jadi kreatif. Berikut adalah solusi baru untuk Anda semua yang menggunakan
linear-gradient()
di tempatbox-shadow
.Meskipun saya tidak ingin memperdebatkan hal ini, ini sebenarnya bukan "kotak" yang Anda (kami) coba bentuk, jadi saya kira bisa dikatakan itu
box-shadow
tidak masuk akal untuk memulai.sumber
Saya mencoba menyalin bootstrap shadow-sm tepat di sebelah kanan, ini kode saya:
sumber