Pembaruan sintaksis longgar bertingkat CSS

Penyusunan bertingkat lookahead diaktifkan di Chrome 120.

Awal tahun ini, Chrome meluncurkan penyematan CSS di versi 112, dan kini fitur tersebut tersedia di setiap browser utama.

Dukungan Browser

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 117.
  • Safari: 17.2.

Sumber

Namun, ada satu persyaratan ketat dan berpotensi tidak terduga untuk sintaksis, yang tercantum dalam artikel pertama contoh penyusunan bertingkat yang tidak valid. Artikel lanjutan ini akan membahas perubahan pada spesifikasi, dan dari Chrome 120.

Nama tag elemen bertingkat

Salah satu batasan yang paling mengejutkan dalam rilis pertama sintaksis nesting CSS adalah ketidakmampuan untuk menyusun nama tag elemen telanjang. Ketidakmampuan ini telah dihapus, sehingga membuat tingkatan CSS berikut valid:

.card {
  h1 {
    /* this is now valid! */
  }
}

/* the same as */
.card {
  & h1 {
    /* this is now valid! */
  }
}

Hal ini menjadi sangat menarik saat menyusun daftar urut, tidak urut, atau definisi:

dl {
  dt {
    /* dl dt styles */
  }

  dd {
    /* dl dd styles */
  }
}

Apa yang berubah untuk mengizinkan penyusunan bertingkat ini?

Hal ini sebagian besar berkat beberapa eksplorasi dan pembuatan prototipe oleh engineer Chrome, yang dikombinasikan dengan keinginan dari komunitas dan CSS Working Group.

Ada banyak keraguan bahwa parser CSS dapat diajarkan untuk membedakan antara nama tag (div) dan nama properti (visibility) karena parser saat ini tidak memiliki konsep untuk melihat ke depan. Untuk memahami bahwa token adalah properti, browser perlu melihat ke depan dan melihat apakah : mengikuti token yang tidak dikenal. Oleh karena itu, dalam spesifikasi asli, simbol & digunakan untuk menunjukkan kepada browser bahwa yang mengikutinya disusun bertingkat, dan bukan properti dan nilai CSS reguler.

Untungnya, seorang engineer menemukan bahwa saat parser gagal mengurai pemilih bertingkat sebagai properti sesuai dengan kartu penggunaan normal, parser dapat dimulai ulang dalam mode yang mengasumsikan pemilih, bukan properti. Mengurai lanjutan, yang mengakui tingkatan sebagai tingkatan pemilih. Cukup cepat dan cukup andal sehingga ditentukan cukup memadai untuk merilis sintaksis.