Karakter / simbol apa yang diperbolehkan dalam pemilih kelas CSS ?
Saya tahu bahwa karakter berikut tidak valid , tetapi karakter apa yang valid ?
~ ! @ $ % ^ & * ( ) + = , . / ' ; : " ? > < [ ] \ { } | ` #
css
css-selectors
Darryl Hein
sumber
sumber
.hello/world
kelas dengan melarikan diri backslash:.hello\2fworld
,hello\2f world
atauhello\/world
Jawaban:
Anda dapat memeriksa langsung di tata bahasa CSS .
Pada dasarnya 1 , nama harus dimulai dengan garis bawah (
_
), tanda hubung (-
), atau huruf (a
-z
), diikuti oleh sejumlah tanda hubung, garis bawah, huruf, atau angka. Ada tangkapan: jika karakter pertama adalah tanda hubung, karakter kedua harus 2 menjadi huruf atau garis bawah, dan nama harus minimal 2 karakter.Singkatnya, aturan sebelumnya diterjemahkan menjadi yang berikut, diekstraksi dari spesifikasi W3C. :
Pengidentifikasi yang dimulai dengan tanda hubung atau garis bawah biasanya disediakan untuk ekstensi khusus browser, seperti pada
-moz-opacity
.1 Semuanya dibuat sedikit lebih rumit dengan masuknya karakter unicode yang lolos (yang tidak ada yang benar-benar menggunakan).
2 Perhatikan bahwa, menurut tata bahasa yang saya tautkan, aturan yang dimulai dengan DUA tanda hubung, misalnya
--indent1
, tidak valid. Namun, saya cukup yakin saya sudah melihat ini dalam praktek.sumber
In CSS, identifiers (including element names, classes, and IDs in selectors) can contain only the characters [a-zA-Z0-9] and ISO 10646 characters U+00A0 and higher, plus the hyphen (-) and the underscore (_); they cannot start with a digit, two hyphens, or a hyphen followed by a digit. Identifiers can also contain escaped characters and any ISO 10646 character as a numeric code (see next item). For instance, the identifier "B&W?" may be written as "B\&W\?" or "B\26 W\3F"
. Jadi ---indent1
tidak valid dan perlu untuk melarikan diri sebagai\--indent1
(--
kelas istirahat di iOS, misalnya)Yang mengejutkan saya, sebagian besar jawaban di sini salah. Ternyata itu:
Karakter apa pun kecuali NUL diizinkan dalam nama kelas CSS di CSS. (Jika CSS berisi NUL (lolos atau tidak), hasilnya tidak ditentukan. [ CSS-karakter ])
Tautan jawaban Mathias Bynens ke penjelasan dan demo menunjukkan cara menggunakan nama-nama ini. Ditulis dalam kode CSS, nama kelas mungkin perlu diloloskan , tetapi itu tidak mengubah nama kelas. Misalnya, representasi yang tidak perlu diloloskan secara berlebihan akan terlihat berbeda dari representasi lain dari nama itu, tetapi itu masih merujuk pada nama kelas yang sama.
Sebagian besar bahasa lain (pemrograman) tidak memiliki konsep melarikan diri dari nama variabel ("pengidentifikasi"), sehingga semua representasi dari suatu variabel harus terlihat sama. Ini tidak terjadi di CSS.
Perhatikan bahwa dalam HTML tidak ada cara untuk memasukkan karakter spasi (spasi, tab, umpan baris, umpan form, dan carriage return) dalam atribut nama kelas , karena mereka sudah memisahkan kelas dari satu sama lain.
Jadi, jika Anda perlu mengubah string acak menjadi nama kelas CSS: jaga NUL dan spasi, dan keluar (sesuai untuk CSS atau HTML). Selesai
sumber
Saya telah menjawab pertanyaan Anda secara mendalam di sini: http://mathiasbynens.be/notes/css-escapes
Artikel ini juga menjelaskan cara keluar dari karakter apa pun di CSS (dan JavaScript), dan saya juga membuat alat yang berguna untuk ini. Dari halaman itu:
sumber
class="404-error"
dapat bermanfaat<p class="foo bar">
menambahkan dua kelas kep
elemen :,foo
danbar
. Tidak ada cara (yang dapat saya pikirkan) untuk menambahkan classname yang berisi spasi putih ke elemen HTML. Informasi tentang cara keluar dari karakter spasi putih dimasukkan karena berguna untuk keluar dari karakter tersebut dalam konteks pengidentifikasi lain, misalnya nama keluarga font.Baca spesifikasi W3C . (Ini adalah CSS 2.1, cari versi yang sesuai untuk asumsi Anda tentang peramban)
sunting: paragraf yang relevan berikut:
sunting 2: seperti yang ditunjukkan @mipadi dalam jawaban Triptych, ada peringatan ini , juga di laman web yang sama:
sumber
Ekspresi reguler lengkap adalah:
Jadi semua karakter Anda yang terdaftar kecuali "
-
" dan "_
" tidak diizinkan jika digunakan secara langsung. Tetapi Anda bisa menyandikannya menggunakan backslashfoo\~bar
atau menggunakan notasi unicodefoo\7E bar
.sumber
[\200-\377]
?[\178-\1114112]
diizinkan tanpa hambatan dalam CSS 3.\377
di sini sebenarnya salah. Ada catatan pada bagian Grammar of CSS2.1's Lexical Scanner yang menyatakan: "The" \ 377 "mewakili jumlah karakter tertinggi yang dapat ditangani oleh versi Flex saat ini (desimal 255). Itu harus dibaca sebagai" \ 4177777 "( desimal 1114111), yang merupakan titik kode tertinggi di Unicode / ISO-10646. " Itu juga harus dari\240
, bukan\377
. Saya kira ini sudah 7 tahun sekarang jadi hal-hal mungkin telah berubah sedikit sejak itu.-?(?:[_a-z]|(?![\u0000-\u0239]).*|\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])(?:[_a-z0-9-]|(?![\u0000-\u0239]).*|\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])*
.Bagi mereka yang mencari solusinya, Anda bisa menggunakan pemilih atribut, misalnya, jika kelas Anda dimulai dengan angka. Perubahan:
untuk ini:
Juga, jika ada beberapa kelas, Anda harus menentukannya di pemilih saya pikir.
Sumber:
sumber
Pemahaman saya adalah bahwa garis bawah secara teknis valid. Periksa:
https://developer.mozilla.org/en/underscores_in_class_and_id_names
"... kesalahan dengan spesifikasi yang diterbitkan pada awal 2001 membuat menggarisbawahi hukum untuk pertama kalinya."
Artikel yang ditautkan di atas mengatakan tidak pernah menggunakannya, lalu memberikan daftar peramban yang tidak mendukung mereka, yang semuanya, dalam hal jumlah pengguna setidaknya, lama-lama.
sumber
Untuk HTML5 / CSS3 kelas dan ID dapat dimulai dengan angka.
sumber
class="1a"
.). Namun, pengidentifikasi CSS tidak dapat dimulai dengan angka (mis. Tidak.1a
akan berfungsi). Anda dapat menghindarinya, tangguh (misalnya.\31 a
atau.\000031a
).Keluar dari jawaban @ Triptych, Anda dapat menggunakan 2 pencocokan regex berikut untuk membuat string valid:
Ini adalah pasangan terbalik yang memilih apa pun yang bukan huruf, angka, tanda hubung atau garis bawah untuk memudahkan penghapusan.
Ini cocok dengan 0 atau 1 tanda hubung diikuti oleh 1 atau lebih angka di awal string, juga agar mudah dihapus.
Bagaimana saya menggunakannya di PHP:
sumber