Rumah >hujung hadapan web >tutorial css >Lebih banyak kegunaan dunia nyata untuk: mempunyai ()
:has()
Sebab mengapa ia dipanggil "lebih kuat" adalah kerana banyak pemaju pintar telah menerbitkan banyak idea pintar yang menakjubkan, seperti:
Jen Simmons '"Penggunaan: mempunyai () sebagai pemilih ibu bapa CSS dan banyak lagi"
dalam kerja harian saya ... Sudah tentu, premisnya adalah bahawa sokongan penyemak imbas cukup baik. (Firefox adalah penyemak imbas terakhir untuk bertahan, tetapi ia akan disokong tidak lama lagi.) :has()
:has()
Apabila sokongan penyemak imbas sempurna, saya pasti akan menggunakannya di mana -mana
disokong sepenuhnya!"
:has()
Elakkan beroperasi di luar komponen JavaScript :has()
<nav></nav>
Saya rasa saya selalu perlu melakukan perkara seperti ini.
di luar bahagian React halaman "sentuh" dan togol kelas pada
,, atau komponen lain. Ini bukan akhir dunia, tetapi ia berasa sedikit janggal. Walaupun dalam laman web React Complete (seperti laman web Next.js), saya terpaksa memilih antara menguruskan keadaan document.querySelector(...)
pada pokok komponen yang lebih tinggi atau melakukan pemilihan elemen DOM yang sama - yang tidak cukup reaksi. Dengan <header></header>
, masalahnya diselesaikan: <main></main>
menuIsOpen
:has()
Komponen JavaScript saya tidak lagi perlu berurusan dengan bahagian lain DOM!
header:has(.megamenu--open) { /* 如果包含具有类“.megamenu--open”的元素,则以不同的方式设置 header 样式 */ }Pengalaman Pengguna Jadual Jadual Lebih Baik
Menambah baris berganti "jalur" ke meja boleh meningkatkan pengalaman pengguna. Mereka membantu mata anda menjejaki baris yang sedang anda lakukan ketika mengimbas meja.
Tetapi dalam pengalaman saya, ini tidak berfungsi dengan baik di atas meja dengan hanya dua atau tiga baris. Sebagai contoh, jika jadual anda mempunyai tiga baris dalam <tbody> dan anda "jalur" setiap "walaupun" baris, anda mungkin berakhir dengan hanya satu jalur. Ini tidak layak untuk corak ini dan boleh membuat pengguna tertanya -tanya apa yang istimewa tentang garis yang diserlahkan. Menggunakan Bramus menggunakan teknik menggunakan gaya berdasarkan bilangan elemen kanak -kanak, kita boleh menggunakan jalur meja apabila terdapat lebih daripada tiga baris: <code>:has()
mahukan ciri -ciri yang lebih canggih? Anda juga boleh memutuskan untuk melakukan ini hanya jika jadual mempunyai sekurang -kurangnya beberapa lajur tertentu:
header:has(.megamenu--open) { /* 如果包含具有类“.megamenu--open”的元素,则以不同的方式设置 header 样式 */ }Keluarkan logik kelas bersyarat dari templat
Ini mungkin bergantung kepada sama ada halaman saudara ditetapkan dalam CMS. Saya biasanya menggunakan logik templat untuk menambahkan kelas pengubah BEM ke pembalut susun atur agar sesuai dengan kedua -dua susun atur. CSS mungkin kelihatan seperti ini (peraturan responsif dan kandungan lain yang ditinggalkan untuk keringkasan):
table:has(:is(td, th):nth-child(3)) { /* 只有在有三列或更多列时才执行操作 */ }Sudah tentu, dari perspektif CSS, ini benar -benar baik. Tetapi ini menjadikan kod templat sedikit kemas. Bergantung pada bahasa templat anda, menambah sekumpulan kelas yang boleh menjadi sangat hodoh, terutama jika anda perlu melakukan perkara yang sama dengan banyak elemen kanak -kanak.
Bandingkan ini dengan kaedah berdasarkan
: :has()
/* m = 主要内容 */ /* s = 侧边栏 */ .standard-page--with-sidebar { grid-template-areas: 's s s m m m m m m m m m'; } .standard-page--without-sidebar { grid-template-areas: '. m m m m m m m m m . .'; }jujur, dari perspektif CSS, ini tidak lebih baik. Tetapi pada pendapat saya, mengeluarkan kelas pengubah bersyarat dari templat HTML adalah keuntungan yang baik.
Mudah untuk memikirkan keputusan reka bentuk mikro
- apabila imej dimasukkan ke dalam kad, sebagai contoh - tetapi saya fikir ia juga sangat berguna untuk perubahan susun atur makro ini. :has()
dan :has()
ke seluruh gaya, pastikan anda menggunakan :not()
. :where()
adalah berdasarkan elemen yang paling spesifik :has()
dalam senarai parameternya. Jadi jika anda memasukkan sesuatu seperti ID di dalamnya (saya tidak tahu mengapa!) Pemilih anda akan sukar untuk menimpa dalam lata.
:where()
masa depan yang cerah
/* m = 主要内容 */ /* s = 侧边栏 */ .standard-page:has(.sidebar) { grid-template-areas: 's s s m m m m m m m m m'; } .standard-page:not(:has(.sidebar)) { grid-template-areas: '. m m m m m m m m m . .'; }Ini hanya beberapa ciri yang saya tidak sabar untuk digunakan dalam persekitaran pengeluaran. CSS-Tricks Almanac juga menyediakan beberapa contoh. Apa yang anda nantikan untuk menggunakan
Atas ialah kandungan terperinci Lebih banyak kegunaan dunia nyata untuk: mempunyai (). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!