Apakah ada cara CSS lurus ke depan untuk membuat perbatasan elemen semi-transparan dengan sesuatu seperti ini?
border-opacity: 0.7;
Jika tidak, apakah ada yang tahu bagaimana saya bisa melakukannya tanpa menggunakan gambar?
Sayangnya opacity
elemen tersebut membuat keseluruhan elemen (termasuk teks apa saja) semi-transparan. Cara terbaik untuk membuat perbatasan semi-transparan adalah dengan format warna rgba. Misalnya, ini akan memberikan batas merah dengan opacity 50%:
div {
border: 1px solid rgba(255, 0, 0, .5);
-webkit-background-clip: padding-box; /* for Safari */
background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}
Masalah dengan pendekatan ini adalah bahwa beberapa browser tidak memahami rgba
format dan tidak akan menampilkan perbatasan sama sekali jika ini adalah keseluruhan deklarasi. Solusinya adalah dengan memberikan dua deklarasi perbatasan. Yang pertama dengan opacity palsu, dan yang kedua dengan yang sebenarnya. Jika browser mampu, itu akan menggunakan yang kedua, jika tidak, itu akan menggunakan yang pertama.
div {
border: 1px solid rgb(127, 0, 0);
border: 1px solid rgba(255, 0, 0, .5);
-webkit-background-clip: padding-box; /* for Safari */
background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}
Deklarasi perbatasan pertama akan menjadi warna yang setara dengan 50% perbatasan merah buram di atas latar belakang putih (meskipun setiap grafik di bawah perbatasan tidak akan berdarah).
UPDATE: Saya telah menambahkan "background-clip: padding-box;" untuk jawaban ini (sesuai saran SooDesuNe dalam komentar) untuk memastikan perbatasan tetap transparan bahkan jika warna latar belakang yang kuat diterapkan.
border-radius
, maka mereka mendapatkan sudut membulat. Jika tidak, mereka tidak melakukannya. Konten masih dapat diakses, masih terlihat baik, hanya saja terlihat lebih baik jika mereka menggunakan browser yang mampu. Saya tidak pernah punya satu klien mengeluh tentang ini dalam 1,5 tahun terakhir beroperasi dengan cara ini di setiap proyek.background-clip:padding-box;
juga.Sangat mudah, gunakan bayangan padat dengan 0 offset:
Juga, jika Anda menetapkan radius batas ke elemen, itu memberi Anda batas yang cukup bulat
Demo jsFiddle
sumber
box-shadow
tidak memiliki ukuran dan dapat merusak tata letak Anda, membuat Anda margin tidak merata! jsfiddle.net/bj81hew7/2Seperti yang disebutkan orang lain: CSS-3 mengatakan bahwa Anda dapat menggunakan
rgba(...)
sintaks untuk menentukan warna batas dengan nilai opacity (alpha).inilah contoh cepat jika Anda ingin memeriksanya.
Ini bekerja di Safari dan Chrome (mungkin bekerja di semua browser webkit).
Ini berfungsi di Firefox
Saya ragu itu bekerja sama sekali di IE, tapi saya curiga ada beberapa filter atau perilaku yang akan membuatnya bekerja.
Ada juga posting stackoverflow ini , yang menunjukkan beberapa masalah lain - yaitu, bahwa perbatasan membuat di atas semua warna latar belakang (atau gambar latar belakang) yang telah Anda tentukan; dengan demikian membatasi kegunaan alpha perbatasan dalam banyak kasus.
sumber
background-clip: padding-box;
(dan sampai didukung, Anda dapat menggunakan ekstensi vendor -webkit dan -moz).Jika Anda memeriksa kode CSS dengan validator W3C, Anda akan melihat apakah kode CSS Anda dapat diterima, bahkan jika itu berfungsi di browser utama.
Membuat batas transparan melalui CSS, seperti yang tertulis di atas,
tidak diterima oleh standar W3C, bahkan untuk CSS3. Saya menggunakan validator input langsung dengan kode CSS berikut,
Hasilnya adalah,
Sayangnya nilai alpha (huruf "a" di akhir "rgb") belum diterima oleh W3C sebagai bagian dari nilai warna perbatasan. Saya bertanya-tanya mengapa tidak dibakukan, karena ini bekerja di semua browser. Satu-satunya halangan adalah apakah Anda ingin tetap berpegang pada standar W3C atau menyingkir darinya untuk membuat sesuatu dalam CSS.
Untuk menggunakan validator CSS W3C online / Input Langsung .
Selalu merupakan ide bagus untuk menggunakan validator untuk memeriksa pekerjaan Anda, itu benar-benar membantu menemukan kesalahan kecil atau bahkan besar dalam pengkodean ketika Anda akan juling setelah berjam-jam pekerjaan pengkodean.
sumber
* Tidak sejauh yang saya tahu tidak ada yang biasanya saya lakukan dalam keadaan seperti ini adalah membuat blok di bawahnya dengan ukuran yang lebih besar ((berbatasan * 2) + ukuran asli) dan membuatnya transparan menggunakan
di sini adalah sebuah contoh
Memperbarui:
Jawaban ini sudah usang, karena setelah semua pertanyaan ini lebih dari 8 tahun. Hari ini semua browser terbaru mendukung rgba, bayangan kotak, dan sebagainya. Tapi ini adalah contoh yang layak bagaimana itu 8+ tahun yang lalu.
sumber
rgba(...)
dalam warna perbatasan. Anda dapat mencobanya di sini .Sebagai solusi alternatif yang mungkin berfungsi dalam beberapa kasus: ubah
border-style
kedotted
.Memiliki kelompok piksel bergantian antara warna latar depan dan warna latar belakang tidak sama dengan garis kontinu piksel transparan sebagian. Di sisi lain, ini membutuhkan jauh lebih sedikit CSS dan jauh lebih kompatibel di setiap browser tanpa arahan khusus browser.
sumber
Jawaban lain berhubungan dengan aspek teknis dari masalah opacity-perbatasan, sementara saya ingin menyajikan peretasan (hanya CSS murni dan HTML). Pada dasarnya buat div kontainer, memiliki div perbatasan dan kemudian div konten.
Dan kemudian CSS: (atur batas konten ke tidak ada, urus pemosisian sedemikian rupa sehingga ketebalan perbatasan diperhitungkan)
sumber
Tidak, tidak ada cara hanya mengatur opacity perbatasan dengan css.
Misalnya, jika Anda tidak tahu warnanya , tidak ada cara untuk hanya mengubah opacity perbatasan hanya dengan menggunakan
rgba()
.sumber
coba ini:
Dan inilah CSS magis kami ..
Lihat Demo di sini.
sumber