Apakah mungkin untuk mengatur opacity gambar latar tanpa mempengaruhi opacity elemen anak?
Contoh
Semua tautan di catatan kaki memerlukan peluru khusus (gambar latar belakang) dan opacity peluru khusus harus 50%.
HTML
<div id="footer">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
<li><a href="#">Link 5</a></li>
</ul>
</div>
CSS
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
}
Apa yang saya coba
Saya mencoba mengatur opacity item daftar menjadi 50%, tetapi kemudian opacity teks tautan juga 50% - dan sepertinya tidak ada cara untuk mengatur ulang opacity elemen anak:
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
/* will also set the opacity of the link text */
opacity: 0.5;
}
Saya juga mencoba menggunakan rgba, tetapi itu tidak berpengaruh pada gambar latar:
#footer ul li {
/* rgba doesn't apply to the background image */
background: rgba(255, 255, 255, 0.5) url(/images/arrow.png) no-repeat 0 50%;
}
Jawaban:
Anda dapat menggunakan CSS
linear-gradient()
denganrgba()
.sumber
Ambil gambar Anda menjadi editor gambar, turunkan opacity, simpan sebagai .png dan gunakan itu.
sumber
Ini akan bekerja dengan setiap browser
Jika Anda tidak ingin transparansi memengaruhi seluruh wadah dan anak-anaknya, periksa solusi ini. Anda harus memiliki anak yang benar-benar diposisikan dengan orang tua yang relatif diposisikan.
Lihat demo di http://www.impressivewebs.com/css-opacity-that-doesnt-affect-child-elements/
sumber
position:relative;
dan img keposition:absolute;
TIDAK memungkinkan saya untuk menimpa opacity yang diwarisi pada img, dan saya tidak dapat menggunakan penentuan posisi absolut untuk <li> sendiri (itu berantakan ;-). Dalam Javascript saya mencobaimgs[i].style.opacity = '1';
, tetapi itu juga tidak berfungsi untuk menimpa opacity yang diwarisi. Jika saya mengerti dengan benar, saya juga tidak dapat menggunakan rgba karena saya harus memengaruhi img sendiri, bukan hanya warna latar belakang. Adakah yang punya rekomendasi untuk saya?Jika Anda menggunakan gambar sebagai peluru, Anda dapat mempertimbangkan: sebelum elemen semu.
sumber
*zoom: expression( … );
(lihat : setelah dan: sebelum elemen css pseudo meretas untuk IE 7 ), tetapi IE7 akhirnya menjadi ketinggalan jaman.Anda dapat meletakkan gambar di div: after atau div: before dan mengatur opacity pada "virtual div"
ditemukan di sini http://css-tricks.com/snippets/css/transparent-background-images/
sumber
Retas dengan opacity .99 (kurang dari 1) menciptakan konteks indeks-z sehingga Anda tidak dapat khawatir tentang nilai indeks-z global. (Cobalah untuk menghapusnya dan lihat apa yang terjadi di demo berikutnya di mana pembungkus induk memiliki z-indeks positif.)
Jika elemen Anda sudah memiliki z-indeks, maka Anda tidak memerlukan peretasan ini.
Demo teknik ini .
sumber
Sayangnya, pada saat menulis jawaban ini, tidak ada cara langsung untuk melakukan ini. Kamu butuh:
sumber
Pilihan lain adalah pendekatan CSS Trik memasukkan elemen pseudo ukuran yang tepat dari elemen asli tepat di belakangnya untuk memalsukan efek latar belakang buram yang kita cari. Terkadang Anda perlu mengatur ketinggian untuk elemen pseudo.
sumber
Properti "filter", membutuhkan bilangan bulat untuk persentase opacity alih-alih ganda, agar dapat bekerja untuk IE7 / 8.
PS: Saya memposting ini sebagai jawaban, karena SO, membutuhkan setidaknya 6 karakter yang diubah untuk diedit.
sumber
Untuk memperbaiki keadaan, saya sarankan menempatkan pilihan yang sesuai di bungkus penargetan browser. Ini adalah satu-satunya hal yang bekerja untuk saya ketika saya tidak bisa mendapatkan IE7 dan IE8 untuk "bermain dengan baik dengan orang lain" (karena saya saat ini bekerja untuk perusahaan perangkat lunak yang terus mendukung mereka).
Saya mungkin memiliki redudansi dalam kode di atas - jika ada yang ingin membersihkannya lebih lanjut, silakan saja!
sumber
-moz-border-radius
di Firefox 13 dan hanya mencariborder-radius
properti standar sekarang). IE7 dan IE8 adalah cerita yang berbeda, tapi itu hanya IE :-p-khtml-opacity
karena tidak mengerti permintaan media, menjadikannya tidak berguna 2) IE lebih stabil daripada yang Anda pikirkan; itu tidak akan "meledak" hanya karena Anda menambahkan awalan non-IE ke aturan yang berlaku untuk IE. Masalahnya, pada saat Anda menghadapinya, pasti datang dari tempat lain.Jika Anda harus mengatur opacity hanya ke bullet, mengapa Anda tidak mengatur saluran alpha langsung ke gambar? By the way, saya tidak berpikir ada cara untuk mengatur opacity ke gambar latar belakang melalui css tanpa mengubah opacity dari seluruh elemen (dan anak-anaknya juga).
sumber
Hanya untuk menambahkan ke atas .. Anda dapat menggunakan saluran alfa dengan atribut warna baru misalnya. rgba (0,0,0,0) ok jadi ini hitam tetapi dengan nol opacity sehingga sebagai orang tua tidak akan mempengaruhi anak. Ini hanya berfungsi pada Chrome, FF, Safari dan .... I thin O.
ubah warna hex Anda menjadi RGBA
sumber
background-image
seperti yang diminta oleh OP.Saya menemukan tutorial yang cukup bagus dan sederhana tentang masalah ini. Saya pikir ini berfungsi dengan baik (dan meskipun mendukung IE, saya hanya memberi tahu klien saya untuk menggunakan browser lain):
Transparansi latar belakang CSS tanpa mempengaruhi elemen anak, melalui RGBa dan filter
Dari sana Anda dapat menambahkan dukungan gradien, dll.
sumber
Anda dapat mencoba kode ini. Saya pikir itu akan berhasil. Anda dapat mengunjungi demo
sumber