Apakah mungkin, menggunakan CSS saja, untuk membuat background
suatu elemen semi-transparan tetapi memiliki konten (teks & gambar) dari elemen yang buram?
Saya ingin menyelesaikan ini tanpa teks dan latar belakang sebagai dua elemen terpisah.
Saat mencoba:
p {
position: absolute;
background-color: green;
filter: alpha(opacity=60);
opacity: 0.6;
}
span {
color: white;
filter: alpha(opacity=100);
opacity: 1;
}
<p>
<span>Hello world</span>
</p>
Sepertinya elemen anak-anak tunduk pada opacity orang tua mereka, sehingga opacity:1
relatif terhadap opacity:0.6
orang tua.
p
opacity itu.6
danspan
opacity itu.5
maka opacity teks yang sebenarnya dalam rentang tersebut0.3
.opacity:.5
untuk elemen induk danopacity:2
elemen anak?opacity:2;
adalah CSS valid . Nilaiopacity
properti harus dalam kisaran inklusif [0,1].Jawaban:
Baik menggunakan gambar PNG semi-transparan atau menggunakan CSS 3:
Berikut ini artikel dari css3.info, Opacity, RGBA, dan kompromi (2007-06-03).
sumber
background-color: rgba(#000, .5);
Di Firefox 3 dan Safari 3, Anda dapat menggunakan RGBA seperti yang disebutkan Georg Schölly .
Trik yang sedikit diketahui adalah Anda bisa menggunakannya di Internet Explorer juga menggunakan filter gradien.
Nomor heks pertama mendefinisikan nilai alfa warna.
Solusi lengkap semua browser:
Ini dari transparansi latar belakang CSS tanpa mempengaruhi elemen anak, melalui RGBa dan filter .
Tangkapan layar bukti hasil:
Ini saat menggunakan kode berikut:
sumber
Ini adalah solusi terbaik yang bisa saya buat, BUKAN menggunakan CSS 3. Dan itu berfungsi dengan baik di Firefox, Chrome, dan Internet Explorer sejauh yang saya bisa lihat.
Letakkan wadah
div
dan dua anakdiv
di tingkat yang sama, satu untuk konten, satu untuk latar belakang. Dan menggunakan CSS, ukuran otomatis latar belakang agar sesuai dengan konten dan menempatkan latar belakang sebenarnya di belakang menggunakan z-index.sumber
:after
dan menghindari markup tambahan?Untuk warna latar semi-transparan sederhana, solusi di atas (gambar CSS3 atau bg) adalah pilihan terbaik. Namun, jika Anda ingin melakukan sesuatu yang lebih menarik (mis. Animasi, banyak latar belakang, dll.), Atau jika Anda tidak ingin bergantung pada CSS3, Anda dapat mencoba "teknik pane":
Teknik ini bekerja dengan menggunakan dua "lapisan" di dalam elemen panel luar:
The
position: relative
pada panel penting; itu memberitahu lapisan belakang agar sesuai dengan ukuran panel. (Jika Anda ingin<p>
tag menjadi absolut, ubah panel dari a<p>
ke a<span>
dan bungkus semua itu dalam<p>
tag posisi absolut .)Keuntungan utama teknik ini memiliki lebih dari yang serupa yang tercantum di atas adalah bahwa panel tidak harus menjadi ukuran yang ditentukan; seperti dikodekan di atas, itu akan cocok dengan lebar penuh (tata letak elemen blok normal) dan hanya setinggi konten. Elemen panel luar dapat ukuran sesuka Anda, selama itu persegi panjang (yaitu blok inline akan berfungsi; inline biasa tidak akan).
Juga, itu memberi Anda banyak kebebasan untuk latar belakang; Anda bebas untuk meletakkan apa pun di elemen belakang dan membuatnya tidak mempengaruhi aliran konten (jika Anda ingin beberapa sub-layer ukuran penuh, pastikan mereka juga memiliki posisi: absolut, lebar / tinggi: 100%, dan atas / bawah / kiri / kanan: otomatis).
Satu variasi untuk memungkinkan penyesuaian inset latar belakang (melalui atas / bawah / kiri / kanan) dan / atau penyematan latar belakang (dengan menghapus salah satu pasangan kiri / kanan atau atas / bawah) adalah menggunakan CSS berikut sebagai gantinya:
Seperti yang tertulis, ini berfungsi di Firefox, Safari, Chrome, IE8 +, dan Opera, meskipun IE7 dan IE6 membutuhkan CSS dan ekspresi tambahan, IIRC, dan terakhir kali saya memeriksa, variasi CSS kedua tidak berfungsi di Opera.
Hal-hal yang harus diperhatikan:
<div>
s bukannya<span>
s untuk menyederhanakan CSS Anda.Demo yang lebih lengkap, memamerkan fleksibilitas teknik ini dengan menggunakannya bersama-sama
display: inline-block
, dan dengan keduanyaauto
&width
s / s spesifikmin-height
:Dan inilah demo langsung dari teknik yang digunakan secara luas:
sumber
width:
&height:
properti berbagi garis karena mereka jenis konstruksi yang sama dan lebih dipahami sebagai bentuk 2 dimensi, bukan sepasang kendala 1 dimensi. Lebih lanjut, beberapa baris memiliki jumlah yang cukup untuk dikemas karena mereka mengulangi konten yang tidak terlalu penting untuk dipamerkan.Lebih baik menggunakan semi-transparan
.png
.Cukup buka Photoshop , buat
2x2
gambar piksel ( memetik1x1
dapat menyebabkan bug Internet Explorer! ), Isi dengan warna hijau dan atur opacity di "Layers tab" menjadi 60%. Kemudian simpan dan jadikan gambar latar belakang:Ini bekerja keren, tentu saja, kecuali di Internet Explorer 6 yang indah . Ada perbaikan yang lebih baik yang tersedia, tetapi inilah hack cepat:
sumber
Ada trik untuk meminimalkan markup: Gunakan elemen pseudo sebagai latar belakang dan Anda dapat mengatur opacity untuk itu tanpa mempengaruhi elemen utama dan anak-anaknya:
DEMO
Keluaran:
Kode yang relevan:
Dukungan browser adalah Internet Explorer 8 dan yang lebih baru.
sumber
Metode termudah adalah dengan menggunakan gambar PNG latar belakang semi-transparan .
Anda dapat menggunakan JavaScript untuk membuatnya berfungsi di Internet Explorer 6 jika perlu.
Saya menggunakan metode yang diuraikan dalam PNG Transparan di Internet Explorer 6 .
Selain itu, Anda bisa memalsukannya menggunakan dua elemen saudara berdampingan - buat satu semi-transparan , lalu posisikan yang lainnya di atas .
sumber
Metode ini memungkinkan Anda untuk memiliki gambar di latar belakang dan tidak hanya warna solid, dan dapat digunakan untuk memiliki transparansi pada atribut lain seperti perbatasan. Tidak diperlukan gambar PNG transparan.
Gunakan
:before
(atau:after
) dalam CSS dan beri mereka nilai opacity untuk membiarkan elemen pada opacity aslinya. Dengan demikian Anda dapat menggunakan: sebelum untuk membuat elemen palsu dan memberikan latar belakang transparan (atau batas) yang Anda inginkan dan memindahkannya di belakang konten yang Anda ingin tetap buramz-index
.Contoh ( biola ) (perhatikan bahwa
DIV
kelas withdad
hanya untuk memberikan beberapa konteks dan kontras dengan warna, elemen tambahan ini sebenarnya tidak diperlukan, dan persegi panjang merah digerakkan sedikit ke bawah dan ke kanan untuk meninggalkan latar belakang yang terlihat di belakang. yangfancyBg
elemen):dengan CSS ini:
Dalam hal ini
.fancyBg:before
memiliki properti CSS yang ingin Anda miliki dengan transparansi (latar belakang merah dalam contoh ini, tetapi dapat berupa gambar atau batas). Diposisikan mutlak untuk memindahkannya.fancyBg
(gunakan nilai nol atau apa pun yang lebih sesuai dengan kebutuhan Anda).sumber
Masalahnya adalah, teks tersebut sebenarnya memiliki opacity penuh dalam contoh Anda. Ini memiliki opacity penuh di dalam
p
tag, tetapip
tag itu hanya semi-transparan.Anda dapat menambahkan gambar latar belakang PNG semi-transparan alih-alih menyadarinya dalam CSS, atau memisahkan teks dan div menjadi dua elemen dan memindahkan teks di atas kotak (misalnya, margin negatif).
Kalau tidak, itu tidak akan mungkin.
Sama seperti yang disebutkan Chris: jika Anda menggunakan file PNG dengan transparansi, Anda harus menggunakan solusi JavaScript untuk membuatnya berfungsi di Internet Explorer yang sial ...
sumber
Hampir semua jawaban ini menganggap desainer menginginkan latar belakang warna solid. Jika perancang sebenarnya menginginkan foto sebagai latar belakang, satu-satunya solusi nyata saat ini adalah JavaScript seperti plugin jQuery Transify yang disebutkan di tempat lain .
Yang perlu kita lakukan adalah bergabung dengan diskusi kelompok kerja CSS dan membuat mereka memberi kita atribut latar belakang-opacity! Ini harus bekerja bahu membahu dengan fitur multi-latar belakang.
sumber
Inilah cara saya melakukan ini (mungkin tidak optimal, tetapi berfungsi):
Buat
div
yang Anda inginkan semi-transparan. Berikan kelas / id. Biarkan kosong , dan tutup. Berikan tinggi dan lebar yang ditetapkan (misalnya, 300 piksel kali 300 piksel). Berikan opacity 0,5 atau apa pun yang Anda suka, dan warna latar belakang.Kemudian, langsung di bawah div itu, buat div lain dengan kelas / id yang berbeda. Buat paragraf di dalamnya, tempat Anda akan meletakkan teks Anda. Beri
div
posisi: relatif, dan atas:-295px
(itu negatif 295 piksel). Berikan z-indeks 2 untuk ukuran yang baik, dan pastikan opacity-nya adalah 1. Gaya paragraf yang Anda inginkan, tetapi pastikan dimensi kurang dari yang pertamadiv
sehingga tidak meluap.Itu dia. Berikut kodenya:
Ini berfungsi di Safari 2.x, tapi saya tidak tahu tentang Internet Explorer.
sumber
:before
atau:after
Berikut ini adalah plugin jQuery yang akan menangani segalanya untuk Anda, Transify ( Transify - plugin jQuery untuk dengan mudah menerapkan transparansi / opacity ke latar belakang elemen ).
Saya mengalami masalah ini setiap saat, jadi saya memutuskan untuk menulis sesuatu yang akan membuat hidup jauh lebih mudah. Script kurang dari 2 KB dan hanya membutuhkan satu baris kode untuk membuatnya bekerja, dan itu juga akan menangani menjiwai opacity dari latar belakang jika Anda suka.
sumber
Beberapa waktu yang lalu, saya menulis tentang ini di Cross Browser Background Transparency With CSS .
Dengan aneh Internet Explorer 6 akan memungkinkan Anda untuk membuat latar belakang transparan dan menjaga teks di atas sepenuhnya buram. Untuk browser lain saya kemudian menyarankan menggunakan file PNG transparan.
sumber
Keburaman latar belakang, tetapi tidak teks memiliki beberapa ide. Baik menggunakan gambar semi-transparan, atau overlay elemen tambahan.
sumber
Jika Anda seorang pria Photoshop , Anda juga dapat menggunakan:
Atau:
sumber
Untuk membuat latar belakang elemen semi-transparan, tetapi memiliki konten (teks & gambar) elemen buram, Anda perlu menulis kode CSS untuk gambar itu, dan Anda harus menambahkan satu atribut yang disebut
opacity
dengan nilai minimum.Sebagai contoh,
// Semakin kecil nilainya, semakin transparan, bijih nilainya kurang akan transparan.
sumber
CSS 3 memiliki solusi mudah untuk masalah Anda. Menggunakan:
Di sini,
rgba
singkatan dari nilai merah, hijau, biru, dan alfa. Nilai hijau diperoleh karena 255 dan setengah transparansi diperoleh dengan nilai 0,5 alpha.sumber
Jika Anda menggunakan Less , Anda dapat menggunakan
fade(color, 30%)
.sumber
background-color: rgba (255, 0, 0, 0.5); seperti yang disebutkan di atas adalah jawaban terbaik. Untuk mengatakan menggunakan CSS 3, bahkan pada tahun 2013, tidak sederhana karena tingkat dukungan dari berbagai browser berubah setiap iterasi.
Meskipun
background-color
didukung oleh semua browser utama (bukan yang baru untuk CSS 3) [1] transparansi alpha bisa rumit, terutama dengan Internet Explorer sebelum versi 9 dan dengan warna perbatasan pada Safari sebelum versi 5.1. [2]Menggunakan sesuatu seperti Compass atau SASS dapat sangat membantu produksi dan kompatibilitas lintas platform.
[1] W3Schools: Properti CSS-warna latar belakang
[2] Blog Norman: Daftar Periksa Dukungan Browser CSS3 (Oktober 2012)
sumber
Anda dapat menyelesaikan ini untuk Internet Explorer 8 dengan (ab) menggunakan sintaks gradien. Format warna adalah ARGB. Jika Anda menggunakan preprosesor Sass, Anda dapat mengonversi warna menggunakan fungsi bawaan "ie-hex-str ()".
sumber
Anda dapat menggunakan murni CSS 3 :
rgba(red, green, blue, alpha)
, di manaalpha
adalah tingkat transparansi yang Anda inginkan. Tidak perlu JavaScript atau jQuery.Berikut ini sebuah contoh:
sumber
http://jsfiddle.net/x2ukko7u/ ?
sumber
Anda dapat melakukannya dengan
rgba color code
menggunakan CSS seperti contoh di bawah ini.sumber
Ada solusi yang lebih mudah untuk meletakkan overlay pada gambar pada div yang sama. Ini bukan penggunaan yang tepat dari alat ini. Tetapi berfungsi seperti pesona untuk membuat hamparan menggunakan CSS.
Gunakan bayangan inset seperti ini:
Itu saja :)
sumber
Anda dapat menggunakan RGBA
(red, green, blue, alpha)
di CSS . Sesuatu seperti ini:Jadi hanya melakukan sesuatu seperti ini akan berhasil dalam kasus Anda:
sumber
Sesuai sudut pandang saya, cara terbaik untuk menggunakan warna latar belakang dengan opacity adalah sebagai berikut. Jika kita menggunakan ini, maka kita tidak akan kehilangan opacity untuk elemen lain, seperti warna tes, batas, dll.
Gunakan warna latar belakang dengan opacity
sumber
Saya biasanya menggunakan kelas ini untuk pekerjaan saya. Itu cukup bagus.
sumber
Itu bekerja untuk saya ketika menggunakan format
#AARRGGBB
sehingga yang bekerja untuk saya adalah#1C00ff00
. Cobalah, karena saya telah melihatnya bekerja untuk beberapa orang dan tidak bekerja untuk orang lain. Saya menggunakannya dalam CSS.sumber
Anda dapat menggunakan nilai opacity ditambahkan ke nilai heksadesimal:
Dalam contoh ini
aa
adalah opacity. Opacity00
berarti transparan danff
berarti warna solid.Opacity adalah opsional, sehingga Anda dapat menggunakan nilai heksadesimal seperti biasa:
Anda juga dapat menggunakan cara lama dengan
rgba()
:Dan
background
singkatan jika Anda ingin memastikan bahwa latar belakang tidak memiliki gaya lain, seperti gambar atau gradien:Dari spesifikasi Mozilla ( https://developer.mozilla.org/en-US/docs/Web/CSS/background-color ):
sumber
Anda dapat menggunakan warna RGB dengan opacity seperti kode warna dalam RGB (63, 245, 0) dan menambahkan opacity (seperti 63, 245, 0, 0,5) dan juga mengganti RGB dengan RGBA.
A
akan digunakan untuk opacity.sumber