Saya tidak ingin mewarisi opacity anak dari orang tua di CSS.
Saya memiliki satu div yang merupakan orangtua, dan saya memiliki div lain di dalam div pertama yang adalah anak.
Saya ingin mengatur properti opacity di div induk, tapi saya tidak ingin div anak mewarisi properti opacity.
Bagaimana saya bisa melakukan itu?
opacity
agak sepertidisplay: none
dalam pengertian ini.Jawaban:
Alih-alih menggunakan opacity, atur warna latar belakang dengan rgba, di mana 'a' adalah tingkat transparansi.
Jadi alih-alih:
menggunakan
sumber
.png
:)Opacity sebenarnya tidak diwariskan dalam CSS. Ini adalah transformasi grup pasca-perenderan. Dengan kata lain, jika
<div>
opacity membuat Anda merender div dan semua anak-anaknya menjadi buffer sementara, dan kemudian menggabungkan seluruh buffer itu ke halaman dengan pengaturan opacity yang diberikan.Apa yang ingin Anda lakukan di sini tergantung pada perenderan yang Anda cari, yang tidak jelas dari pertanyaan.
sumber
opacity: .7;
padadiv#container
membuat setiap elemen anak - dariul
/li
keimg
kep
- juga memiliki opacity yang sama. Ini tentu saja merupakan warisan.opacity: 0.7
semua keturunan untuk melihat seperti apa warisan itu. Seperti yang saya katakan, yang terjadi adalah opacity diterapkan ke seluruh grup "elemen dan semua turunannya" sebagai satu unit alih-alih mewarisi.Seperti orang lain telah sebutkan di thread ini dan yang serupa lainnya, cara terbaik untuk menghindari masalah ini adalah dengan menggunakan RGBA / HSLA atau menggunakan PNG transparan.
Tetapi, jika Anda menginginkan solusi konyol, mirip dengan yang ditautkan di jawaban lain di utas ini (yang juga merupakan situs web saya), inilah skrip baru yang saya tulis yang memperbaiki masalah ini secara otomatis, yang disebut thatsNotYoChild.js:
http://www.impressivewebs.com/fixing-parent-child-opacity/
Pada dasarnya ia menggunakan JavaScript untuk menghapus semua anak dari div induk, lalu memposisikan ulang elemen anak ke tempat seharusnya tanpa menjadi anak-anak dari elemen itu lagi.
Bagi saya, ini harus menjadi pilihan terakhir, tetapi saya pikir akan menyenangkan untuk menulis sesuatu yang melakukan ini, jika ada yang mau melakukan ini.
sumber
Sedikit trik jika orangtua Anda transparan dan Anda ingin anak Anda sama, tetapi didefinisikan secara eksklusif (misalnya untuk menimpa gaya agen pengguna dari dropdown pilih):
sumber
Opacity elemen anak diwarisi dari elemen induk.
Tetapi kita dapat menggunakan properti posisi css untuk mencapai pencapaian kita.
Div wadah teks dapat diletakkan di luar div induk tetapi dengan memposisikan absolut memproyeksikan efek yang diinginkan.
Persyaratan Ideal ------------------ >>>>>>>>>>>>
HTML
CSS
Keluaran:--
Teks tidak terlihat karena mewarisi opacity dari div induk.
Solusi ------------------- >>>>>>
HTML
CSS
Keluaran:
Teks terlihat dengan warna yang sama dengan latar belakang karena div tidak dalam transparan
sumber
Pertanyaannya tidak menentukan apakah latar belakangnya berwarna atau gambar tetapi karena @Blowski sudah menjawab untuk latar belakang berwarna, ada peretasan untuk gambar di bawah ini:
Dengan cara ini Anda dapat memanipulasi warna opacity Anda dan bahkan menambahkan efek gradien yang bagus.
sumber
Tampaknya
display: block
elemen tidak mewarisi keburaman daridisplay: inline
orang tua.Contoh codepen
Mungkin karena markup tidak valid dan browser memisahkan mereka secara diam-diam? Karena sumber tidak menunjukkan hal itu terjadi. Apakah saya melewatkan sesuatu?
sumber
Jawaban di atas tampaknya rumit bagi saya, jadi saya menulis ini:
kb-mask-overlay
itu adalah orangtua Anda (opacity),pop-up
itu adalah anak-anak Anda (tanpa opacity). Segala sesuatu di bawah ini adalah sisa situs Anda.sumber
Tidak ada satu ukuran yang cocok untuk semua pendekatan, tetapi satu hal yang saya temukan sangat membantu adalah mengatur opacity untuk anak-anak langsung div, kecuali untuk yang Anda ingin tetap terlihat sepenuhnya. Dalam kode:
dan css:
Jika Anda memiliki warna latar belakang / gambar pada induk Anda memperbaiki opacity warna dengan rgba dan gambar latar belakang dengan menerapkan filter alpha
sumber
Jika Anda harus menggunakan gambar sebagai latar belakang transparan, Anda mungkin bisa mengatasinya menggunakan elemen pseudo:
html
css
sumber
Jawaban saya bukan tentang tata letak orangtua-anak statis, ini tentang animasi.
Saya sedang melakukan demo svg hari ini, dan saya membutuhkan svg untuk berada di dalam div (karena svg dibuat dengan lebar dan tinggi div orang tua, untuk menghidupkan jalur), dan div induk ini perlu tidak terlihat selama animasi path svg (dan kemudian div ini seharusnya
animate opacity from 0 to 1
, itu bagian terpenting). Dan karena div induk denganopacity: 0
menyembunyikan svg saya, saya menemukan hack ini denganvisibility
opsi (anak denganvisibility: visible
dapat dilihat di dalam orangtua denganvisibility: hidden
):Dan kemudian, di js, Anda menghapus
.invisible
kelas dengan fungsi timeout, menambahkan.opacity-zero
kelas, memicu tata letak dengan sesuatu sepertiwhatever.style.top;
dan menghapus.opacity-zero
kelas.Lebih baik untuk memeriksa demo ini http://codepen.io/suez/pen/54bbb2f09e8d7680da1af2faa29a0aef?editors=011
sumber
Pada mac Anda dapat menggunakan editor Pratinjau untuk menerapkan opacity ke kotak putih yang diletakkan di atas gambar .png Anda sebelum Anda memasukkannya ke dalam .css Anda.
1)
Logo Gambar
2) Buat persegi panjang di sekitar gambar
Rectanle sekitar logo
3) Ubah warna latar belakang menjadi
persegi panjang putih menjadi putih
4) Sesuaikan gambar opacity persegi panjang
opak
sumber
Tetapkan opacity 1.0 ke anak secara rekursif dengan:
Contoh:
sumber
Untuk orang lain mencoba membuat tabel (atau sesuatu) terlihat fokus pada satu baris menggunakan opacity. Seperti @Blowski mengatakan gunakan warna bukan opacity. Lihat biola ini: http://jsfiddle.net/2en6o43d/
sumber