Ini seharusnya sederhana, tetapi saya kesulitan menemukan istilah pencarian untuk itu.
Katakanlah saya punya ini:
<div class="a c">Foo</div>
<div class="b c">Bar</div>
Di CSS, bagaimana saya bisa membuat pemilih yang cocok dengan sesuatu yang cocok dengan "(.a atau .b) dan .c"?
Saya tahu saya bisa melakukan ini:
.a.c,.b.c {
/* CSS stuff */
}
Tetapi, dengan anggapan saya harus banyak melakukan jenis logika ini, dengan berbagai kombinasi logis, adakah sintaks yang lebih baik?
html
css
css-selectors
Josh
sumber
sumber
Jawaban:
Tidak. Operator CSS
or
(,
) tidak mengizinkan pengelompokan. Ini pada dasarnya operator logis dengan presedensi terendah di penyeleksi, jadi Anda harus menggunakannya.a.c,.b.c
.sumber
Belum, tetapi ada fungsi
:matches()
pseudo-class eksperimental yang melakukan hal itu:Anda dapat menemukan lebih banyak info di sini dan di sini . Saat ini, sebagian besar browser mendukung versi awalnya
:any()
, yang berfungsi dengan cara yang sama, tetapi akan diganti oleh:matches()
. Kami hanya harus menunggu lebih lama sebelum menggunakan ini di mana-mana (saya pasti akan).sumber
:-moz-any()
dan:-webkit-any()
muncul jauh sebelum Mozilla menyarankannya untuk Selectors 4 (yang mengarah ke inkarnasi saat ini sebagai:matches()
).Uncaught DOMException: Failed to execute 'querySelector' on 'Document': ':any(.a .b)' is not a valid selector.
kesalahan? 🤔Jika Anda memiliki ini:
Dan Anda hanya ingin memilih elemen yang memiliki
.x
dan (.a
atau.b
), Anda dapat menulis:tapi itu nyaman hanya ketika Anda memiliki tiga "sub-kelas" dan Anda ingin memilih dua dari mereka.
Memilih hanya satu sub-kelas (misalnya
.a
):.a.x
Memilih dua sub-kelas (misalnya
.a
dan.b
):.x:not(.c)
Memilih ketiga sub-kelas:
.x
sumber
a or b or c or d
adalah sama dengannot(not(a) and not(b) and not(c) and not(d))
begitu 'atau' sebenarnya hanya fungsi kenyamanan. Secara teori seharusnya bisa bertahan tanpa itu dalam semua kasus. Dalam kasus OP(.a or .b) and .c
->:not(:not(.a):not(.b)).c
:not(:not([data-status="ACT"]):not([data-status="ISS"]):not([data-status="COR"]))[data-month="08"]
. Kode tidak cukup bersih untuk dibaca publik, kalau tidak, saya akan mempostingnya. Saya menguji pada chrome, safari dan ponsel Android low end.Tidak. Standar CSS tidak menyediakan hal-hal yang Anda cari.
Namun, Anda mungkin ingin melihat KURANG dan SASS .
Ini adalah dua proyek yang bertujuan untuk memperluas sintaks CSS default dengan memperkenalkan fitur tambahan, termasuk variabel, aturan bersarang, dan perangkat tambahan lainnya.
Mereka memungkinkan Anda untuk menulis kode CSS lebih terstruktur, dan salah satu dari mereka hampir pasti akan memecahkan kasus penggunaan khusus Anda.
Tentu saja, tidak ada peramban yang mendukung sintaks yang diperluas (terutama karena kedua proyek tersebut masing-masing memiliki sintaks dan fitur yang berbeda), tetapi yang mereka lakukan adalah menyediakan "kompiler" yang mengubah kode KURANG atau SASS Anda menjadi CSS standar, yang kemudian dapat Anda peroleh. gunakan di situs Anda.
sumber