Rumah hujung hadapan web tutorial css Pseudo-Comments dalam CSS (atau, Bagaimana Pelayar Menguraikan Gaya)

Pseudo-Comments dalam CSS (atau, Bagaimana Pelayar Menguraikan Gaya)

Feb 23, 2025 am 11:14 AM

CSS伪注释 (或浏览器如何解析样式)

Walaupun spesifikasi CSS tidak disebutkan, terdapat beberapa cara anda boleh mensimulasikan komen gaya C-style dan/atau UNIX dalam fail CSS (dengan beberapa batasan). Lain -lain telah menulis mengenai perkara ini sebelum ini (terutamanya anotasi CSS diliputi dalam artikel Yayasan Web SitePoint). Artikel ini akan membincangkannya dengan lebih terperinci.

mata utama

    CSS secara rasmi hanya menyokong komen multi-garis gaya C, tetapi komen pseudo menggunakan kesilapan parsing untuk secara tidak sengaja mengulas kod tersebut.
  • Komen pseudo boleh dibuat dengan memalukan perisytiharan CSS, seperti menghilangkan titik koma atau menggunakan nama atribut yang tidak diiktiraf, mengakibatkan kod berikutnya diabaikan.
  • Penempatan baris dan penempatan baris seterusnya pseudo akan menjejaskan sama ada peraturan CSS berikutnya digunakan, dan komen pseudo sebaris boleh membatalkan pengisytiharan berikutnya pada baris yang sama.
  • Pseudo-annotasi juga boleh digunakan untuk @ peraturan, dan tingkah laku yang diperhatikan akan berbeza-beza bergantung kepada sama ada peraturan @ mengandungi blok badan atau berakhir dengan titik koma.
  • Walaupun komen pseudo boleh digunakan untuk debugging, mereka tidak boleh dibaca dengan baik dan tidak boleh menggantikan komen CSS standard dalam kod pengeluaran.

CSS Comments

Menurut spesifikasi, parser CSS secara rasmi menyokong gaya anotasi, iaitu, komen berbilang baris dari bahasa gaya C, yang menggunakan tanda permulaan

dan tanda akhir /* seperti yang ditunjukkan di bawah: */

Oleh itu, pengisytiharan peraturan dalam komen akan diabaikan:
<code>/*
  起始和结束标记之间(包括起始和结束标记)的字符将被解析器忽略,
*/</code>
Salin selepas log masuk
Salin selepas log masuk

Pengisytiharan blok dalam komen akan diabaikan:
<code>body {
  background: red;
  /*
  background: white;
  */
}</code>
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh -contoh ini, kita semua
<code>/*
body {
  background: red;
}
*/</code>
Salin selepas log masuk
Salin selepas log masuk
sengaja

Gunakan sintaks komen untuk mengarahkan parser untuk mengabaikan kandungan. Walau bagaimanapun, kita juga boleh melakukan ini secara tidak disangka, seperti menggunakan pernyataan yang salah:

Dalam contoh ini, pengisytiharan latar belakang tidak digunakan kerana kekurangan titik koma. Parser mengimbas titik koma seterusnya untuk menentukan bahawa keseluruhan pernyataan dua baris tidak betul, jadi kandungan keseluruhan analisis leksikal diabaikan. Perkara yang sama akan berlaku jika kita menghilangkan nilai atribut sama sekali:

<code>body {
  background: red    /* 缺少分号 */
  background: blue;      
}</code>
Salin selepas log masuk
Salin selepas log masuk

dan ini menunjukkan bahawa kita boleh menggunakan pernyataan yang salah sebagai ...

<code>body {
  background:
  background: blue; /* 此声明未应用 */
}</code>
Salin selepas log masuk
Salin selepas log masuk

Pseudo Comment

kami memanggil "komen pseudo" ini kerana ketat, ini bukan komen yang ditamatkan pada akhir watak garis. Sebaliknya, mereka bekerja dengan memalukan input berikutnya (walaupun pada baris berikutnya). Ini disebabkan oleh proses pengendalian ralat set peraturan, blok pengisytiharan dan pemilih:

"Jika terdapat ralat di mana -mana pemilih, keseluruhan pernyataan harus diabaikan, walaupun selebihnya pemilih kelihatan munasabah dalam CSS 2.1."

Dalam contoh berikut (petikan dari spesifikasi), set peraturan kedua diabaikan kerana watak yang tidak sah "&" dalam pemilih:

Begitu juga, dalam contoh berikut, pengisytiharan kedua dan ketiga diabaikan kerana kehadiran aksara yang berlebihan di latar belakang nama harta:

pandangan pantas di papan kekunci Bahasa Inggeris akan mendedahkan bahawa watak-watak khas berikut akan bertindak sebagai komen perisytiharan satu baris:

<code>/*
  起始和结束标记之间(包括起始和结束标记)的字符将被解析器忽略,
*/</code>
Salin selepas log masuk
Salin selepas log masuk

Walau bagaimanapun, jangan gunakan mana -mana aksara, tetapi berpegang pada konvensyen C dan UNIX dan gunakan # atau //:

<code>body {
  background: red;
  /*
  background: white;
  */
}</code>
Salin selepas log masuk
Salin selepas log masuk

Semi-kolon

Tanda titik koma adalah tanda akhir pengisytiharan peraturan. Oleh itu, mereka tidak boleh "mengulas" teks yang berikut. Dalam spesifikasi, parser merawat titik koma yang menggantung sebagai perisytiharan yang salah (pengisytiharan nama, kolon, atau nilai hilang).

Seperti yang dinyatakan sebelum ini, apabila format komen multiline biasa adalah salah, iaitu apabila tag permulaan dan akhir tidak seimbang di sekitar set peraturan atau perisytiharan, parser mengabaikan pengisytiharan atau peraturan berikutnya. Yang berikut sebenarnya "mengulas" pengisytiharan latar belakang

dua , kerana parser akan mencari tag akhir pengisytiharan seterusnya (separuh kolon) perisytiharan yang terjejas:

<code>/*
body {
  background: red;
}
*/</code>
Salin selepas log masuk
Salin selepas log masuk
Betulkan masalah ini dengan menambahkan titik koma selepas komen, sebelum pernyataan seterusnya (jadi pengisytiharan biru latar akan digunakan):

<code>body {
  background: red    /* 缺少分号 */
  background: blue;      
}</code>
Salin selepas log masuk
Salin selepas log masuk
untuk komen pseudo yang hilang titik koma dalam baris, kesannya adalah sama:

<code>body {
  background:
  background: blue; /* 此声明未应用 */
}</code>
Salin selepas log masuk
Salin selepas log masuk
dan membetulkannya dengan memulihkan titik koma:

<code>h1, h2 {color: green }
h3, h4 & h5 {color: red } /* h6 {color: black }</code>
Salin selepas log masuk

sebaris dengan baris seterusnya

Ini adalah di mana "pseudo" memasuki perkataan "pseudo comment". Ini mungkin merupakan alasan yang baik untuk tidak menyebutnya "komen" sama sekali, kerana mereka melanggar konvensyen akhir-of-line C atau UNIX Style Line Comments.

komen pseudo yang diletakkan pada satu baris akan menindas pengisytiharan pada baris seterusnya. Dalam contoh berikut, latar belakang akan menjadi biru:

<code>body {
  background: red;
  xbackground: white;    /* 属性名称未被识别 */
  y background: blue;    /* 属性名称格式不正确 */
}</code>
Salin selepas log masuk
Komen pseudo diletakkan pada baris yang sama selepas

ditindas oleh . Dalam contoh berikut, latar belakang akan menjadi putih dan bukannya biru:

<code>selector {
  ~ property-name: ignored;
  ` property-name: ignored;
  ! property-name: ignored;
  @ property-name: ignored;
  # property-name: ignored;
  $ property-name: ignored;
  % property-name: ignored;
  ^ property-name: ignored;
  & property-name: ignored;
  * property-name: ignored;
  _ property-name: ignored;
  - property-name: ignored;
  + property-name: ignored;
  = property-name: ignored;
  | property-name: ignored;
  \ property-name: ignored;
  : property-name: ignored;
  property-name: ignored;
  . property-name: ignored;
  > property-name: ignored;
  , property-name: ignored;
  ? property-name: ignored;
  / property-name: ignored;
}</code>
Salin selepas log masuk
Malah versi "termampat" pemilih CSS dengan ancaman pseudo sebaris akan berkelakuan sebagai anotasi mono yang diisytiharkan. Dalam contoh berikut, kerana tanda komen # yang diiktiraf oleh parser berakhir pada titik koma berikutnya, pengisytiharan latar belakang pertama diabaikan dan pengisytiharan latar belakang kedua diiktiraf sebagai diformatkan dengan betul dan oleh itu diterapkan (dalam kes ini, biru akan digunakan Latar Belakang Badan):

<code>// background: ignored;
  # background: ignored;</code>
Salin selepas log masuk

(sama seperti kandungan susulan. Oleh kerana batasan ruang, ciptaan pseudo-asal yang tersisa di bahagian yang tinggal di sini.)

Atas ialah kandungan terperinci Pseudo-Comments dalam CSS (atau, Bagaimana Pelayar Menguraikan Gaya). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1666
14
Tutorial PHP
1273
29
Tutorial C#
1253
24
Perbandingan pembekal bentuk statik Perbandingan pembekal bentuk statik Apr 16, 2025 am 11:20 AM

Mari kita cuba menyusun istilah di sini: "Penyedia Borang Statik." Anda membawa html anda

Bukti konsep untuk menjadikan sass lebih cepat Bukti konsep untuk menjadikan sass lebih cepat Apr 16, 2025 am 10:38 AM

Pada permulaan projek baru, kompilasi SASS berlaku dalam sekejap mata. Ini terasa hebat, terutamanya apabila ia dipasangkan dengan BrowserSync, yang dimuat semula

Berita Platform Mingguan: Atribut Memuat HTML, Spesifikasi ARIA Utama, dan Bergerak Dari IFRAME ke Shadow Dom Berita Platform Mingguan: Atribut Memuat HTML, Spesifikasi ARIA Utama, dan Bergerak Dari IFRAME ke Shadow Dom Apr 17, 2025 am 10:55 AM

Pada minggu ini, berita platform, Chrome memperkenalkan atribut baru untuk memuatkan, spesifikasi aksesibiliti untuk pemaju web, dan gerakan BBC

Beberapa tangan dengan elemen dialog HTML Beberapa tangan dengan elemen dialog HTML Apr 16, 2025 am 11:33 AM

Ini saya melihat elemen HTML untuk kali pertama. Saya telah menyedarinya untuk seketika, tetapi Haven &#039; t mengambilnya untuk putaran lagi. Ia mempunyai cukup keren dan

Di manakah 'Langgan Podcast' pautan ke? Di manakah 'Langgan Podcast' pautan ke? Apr 16, 2025 pm 12:04 PM

Untuk sementara waktu, iTunes adalah anjing besar dalam podcasting, jadi jika anda mengaitkan "Langgan Podcast" untuk suka:

Ia ' s di kepala: Menguruskan Ketua Dokumen Tapak Berteakona dengan Helmet React Ia ' s di kepala: Menguruskan Ketua Dokumen Tapak Berteakona dengan Helmet React Apr 15, 2025 am 11:01 AM

Ketua dokumen mungkin bukan bahagian paling glamor dari laman web, tetapi apa yang masuk ke dalamnya boleh dikatakan sama pentingnya dengan kejayaan laman web anda sebagai

Pilihan untuk menganjurkan analisis berasaskan bukan JavaScript anda sendiri Pilihan untuk menganjurkan analisis berasaskan bukan JavaScript anda sendiri Apr 15, 2025 am 11:09 AM

Terdapat banyak platform analisis untuk membantu anda mengesan data pelawat dan penggunaan di laman web anda. Mungkin paling penting Google Analytics, yang digunakan secara meluas

Kertas kerja Kertas kerja Apr 16, 2025 am 11:24 AM

Beli atau Membina adalah perdebatan klasik dalam teknologi. Membina barang sendiri mungkin berasa lebih murah kerana tidak ada item baris pada bil kad kredit anda, tetapi

See all articles