Apa yang dimaksud dengan "i" dalam pemilih atribut CSS?

112

Saya telah menemukan pemilih CSS berikut di lembar gaya agen pengguna Google Chrome:

[type="checkbox" i]

Apa imaksudnya

AntiCZ
sumber
1
@Alexander O'Mara: Pemilih level 4 adalah bagian dari CSS3 - ini hanyalah level modul berikutnya yang dimulai pada level 3. "CSS4" adalah istilah yang salah.
BoltClock
2
@Alexander O'Mara: Saya ingin sekali melihatnya dibawa ke meta. Secara khusus, saya ingin tahu bagaimana kita dapat menangani penggunaan tag [css4] - tindakan paling drastis yang dapat saya lakukan adalah menjadikannya sinonim dari [css3], dan itu akan menjadi hal yang benar untuk dilakukan.
BoltClock
1
@BoltClock Meta Pertanyaan sudah habis! BTW, ketika Anda bertanya tentang penggabungan jawaban Anda dengan pertanyaan ini, apakah Anda bermaksud mengedit pertanyaan / jawaban di sini untuk menambahkan informasi, atau apakah Anda mengacu pada tombol ajaib pindah-jawab-ke-pertanyaan-lain?
Alexander O'Mara
1
@Alexander O'Mara: Tidak memindahkan jawaban individu, tetapi menggabungkan dua pertanyaan keseluruhan. Ini adalah fungsi khusus mod.
BoltClock
1
@TylerH Kami memiliki diskusi tentang Meta tentang topik ini . Jangan ragu untuk menambahkan diskusi di sana.
Alexander O'Mara

Jawaban:

132

Seperti yang disebutkan dalam komentar, ini untuk pencocokan atribut tidak peka huruf besar / kecil. Ini adalah fitur baru di CSS Selectors Level 4.

Saat ini tersedia di Chrome 49+, Firefox 47+, Safari 9+, dan Opera 37 + *. Sebelumnya, fitur ini hanya tersedia dalam gaya agen pengguna Chrome mulai sekitar Chrome 39, tetapi dapat diaktifkan untuk konten web dengan menyetel tanda fitur eksperimental.

* Opera versi sebelumnya mungkin juga mendukungnya.

Contoh Kerja / Pengujian Browser:

[data-test] {
    width: 100px;
    height: 100px;
    margin: 4px;
}

[data-test="A"] {
    background: red;
}

[data-test="a" i] {
    background: green;
}
Green if supported, red if not:

<div data-test="A"></div>

Kotak di atas akan berwarna hijau jika browser mendukung fitur ini, merah jika tidak.

Alexander O'Mara
sumber
6
Terima kasih telah mengajar! Selamat menikmati topi barumu. Apakah hal semacam ini berfungsi di perpustakaan pemilih? Jenis dukungan browser apa yang dimilikinya?
Benjamin Gruenbaum
1
@BenjaminGruenbaum Sepertinya ini hanya tersedia dalam gaya agen pengguna Chrome (bukan CSS situs web, setidaknya belum). Saya tidak dapat menemukan dokumentasi kompatibilitas resmi.
Alexander O'Mara
(Memposting ulang komentar saya sebelumnya sekarang setelah pertanyaan digabungkan.) Tidak sepenuhnya mengherankan bahwa standar eksperimental baru seperti ini didokumentasikan dengan buruk. Karena itu, jawaban saya berisi beberapa informasi lebih lanjut tentang ini, yaitu cara kerjanya, mengapa digunakan, dan bagaimana penerapannya di Chrome (seperti yang diberikan oleh pertanyaan).
BoltClock
Chrome akan menambahkan dukungan untuk ini di versi 49.0 (saat ini dalam Beta), Firefox di versi 47.0 (dijadwalkan akan dirilis pada Juni 2016). Sumber: developer.mozilla.org/en-US/docs/Web/CSS/…
Miscreant
1
@LWChris: Saya tidak yakin browser semacam itu benar-benar ada. IE6 sama sekali tidak memahami pemilih atribut, dan IE7 mendukungnya bahkan dengan atribut data khusus.
BoltClock
36

Itu adalah tanda case-insensitive untuk atribut selector, yang diperkenalkan di Selectors 4 . Tampaknya mereka menyelinap penerapan fitur ini ke Chrome pada awal Agustus 2014.

Singkatnya: tanda ini memberi tahu browser untuk mencocokkan nilai masing-masing untuk typeatribut secara case-insensitively. Perilaku pencocokan pemilih default untuk nilai atribut di HTML peka huruf besar / kecil , yang sering kali tidak diinginkan karena banyak atribut yang ditetapkan memiliki nilai tidak peka huruf besar / kecil, dan Anda ingin memastikan pemilih Anda mengambil semua elemen yang tepat apa pun hurufnya. typeadalah salah satu contoh dari atribut semacam itu, karena ini adalah atribut yang disebutkan , dan atribut yang disebutkan dikatakan memiliki nilai case-insensitive .

Berikut adalah komitmen yang relevan:

  • 179370 - implementasi
  • 179401 - perubahan pada stylesheet UA seperti yang ditunjukkan pada tangkapan layar di pertanyaan

Perhatikan bahwa itu saat ini tersembunyi dalam tanda "Aktifkan fitur Platform Web eksperimental", yang dapat Anda akses di chrome: // flags / # enable-eksperimental-web-platform-features. Ini mungkin menjelaskan mengapa fitur tersebut sebagian besar tidak diperhatikan - fitur yang tersembunyi di balik tanda tersebut hanya dapat digunakan secara internal dan tidak dalam kode yang dapat dilihat publik (seperti stylesheet penulis) kecuali jika diaktifkan, karena bersifat eksperimental dan oleh karena itu tidak siap untuk penggunaan produksi.

Berikut adalah kasus uji yang dapat Anda gunakan - bandingkan hasil saat flag diaktifkan dan dinonaktifkan:

span[data-foo="bar"] {
    color: red;
}

span[data-foo="bar" i] {
    color: green;
}
<span data-foo="bar">If all of this text is green,</span>
<span data-foo="Bar">your browser supports case-insensitive attribute selectors.</span>

Perhatikan bahwa saya menggunakan atribut data khusus dan bukan typeuntuk menunjukkan bahwa atribut itu dapat digunakan dengan atribut apa saja.

Saya tidak mengetahui penerapan lain apa pun saat tulisan ini dibuat, tetapi mudah-mudahan browser lain segera menyusul. Ini adalah tambahan yang relatif sederhana tetapi sangat berguna untuk standar dan saya berharap dapat menggunakannya di masa mendatang.

BoltClock
sumber
Saya mengalami kelelahan "sore itu" ... Setelah membaca spesifikasi W3 saya masih belum mengerti sepenuhnya, apa yang akan menjadi penggunaan praktis kehidupan nyata di css untuk ini?
Matt
2
@Matt: Pencocokan pemilih atribut peka huruf besar / kecil seperti yang dinyatakan dalam HTML5 , yang dalam banyak kasus tidak diinginkan karena HTML5 memungkinkan nilai tidak peka huruf besar / kecil untuk atribut tertentu. Anda dapat menggunakan tanda ini untuk memastikan Anda mengambil elemen yang tepat apa pun kasusnya. Misalnya di tangkapan layar Anda dapat melihat yang dicari input[type="search" i], yang akan cocok dengan elemen seperti <input type="SEARCH">.
BoltClock
1
Saya dapat mengonfirmasi bahwa ini berfungsi dengan Chromium Versi 43.0.2357.130 dan mengaktifkan "Mengaktifkan fitur Platform Web eksperimental".
Robert Siemer