Membantu memilih sintaks untuk Nesting CSS

Kelompok Kerja CSS terus memperdebatkan cara terbaik untuk mendefinisikan nesting di CSS. Dan jika Anda adalah seseorang yang menulis CSS, kami membutuhkan bantuan Anda.

Bersarang adalah fitur alat yang sangat populer seperti Sass. Ini dapat menghemat waktu pengembang web jika tidak dihabiskan untuk menulis pemilih yang sama berulang kali. Dan itu bisa membuat kode lebih bersih dan lebih mudah dipahami.

CSS tidak bersarang

.class1 
  color: green;

.class1 .class2 
  border: 5px solid black;

Bersarang di Sass

.class1 
  color: green;
  .class2 
    border: 5px solid black;
  

Semua orang berharap CSS bersarang dapat menggunakan jenis sintaksis sederhana yang sama seperti yang dilakukan Sass. Itu tidak mungkin, bagaimanapun, karena cara kerja mesin parsing browser. Jika mereka melihat urutan seperti element:pseudomereka akan menguraikan seluruh aturan gaya seolah-olah itu adalah a property: value pernyataan.

Jadi, diskusi panjang dimulai tentang apa yang harus dilakukan. Awal musim panas ini, CSSWG memperdebatkan antara Opsi 1, Opsi 2, dan Opsi 3. Dari jumlah tersebut, Opsi 3 menang. Sejak itu, dua opsi lagi telah diusulkan, Opsi 4 dan Opsi 5. Jika Anda mengingat berbagai detail yang dibahas di 53+ masalah, kesampingkan semua gagasan lama tersebut. Pada titik ini, kami hanya memperdebatkan antara Opsi 3, 4 dan 5, seperti yang dijelaskan dalam artikel ini melalui kumpulan contoh di bawah ini.

Untuk membantu kami memutuskan opsi mana yang akan dipilih, kami ingin Anda membaca contoh ini dan menjawab survei satu pertanyaan.

Silakan lihat contoh-contoh ini, pertimbangkan bagaimana Anda menulis dan mempertahankan style sheet, dan pikirkan secara mendalam tentang sintaks mana yang Anda sukai. Kemudian pilih salah satu yang menurut Anda terbaik.

Dalam ketiga opsi tersebut, file & simbol adalah penanda yang berarti “meletakkan pemilih yang berada di luar sarang [here]”. Sebagai contoh…

Ini…

.foo 
  & .bar 
    color: blue;
  

… menjadi ini.

.foo .bar 
  color: blue;

Dan ini…

.foo 
  .bar & 
    color: blue;
  

… menjadi ini.

.bar .foo 
  color: blue;

Oke?

Dalam banyak contoh berikut, the & adalah opsional. Beberapa pengembang akan menggunakannya karena membantu membuat kode mereka lebih mudah dibaca. Pengembang lain akan memilih untuk mengabaikannya, terutama saat menyalin & menempelkan kode dari konteks yang tidak bersarang. Ketika & ditinggalkan, pemilih luar ditambahkan di awal, sebagai leluhur. (Saat kami mensurvei penulis, pendapat mereka tentang penggunaan opsional & dibagi 50/50.)

Tapi inilah trik utama untuk Opsi 3 (dan hanya Opsi 3) — jika Anda menggunakan pemilih elemen (seperti p, articleatau div), itu & diperlukan. Jika Anda menggunakan pemilih lain, seperti kelas atau ID, Anda dapat memilih untuk meninggalkannya & keluar. Cara termudah untuk mengingat ini: pemilih tidak pernah bisa dimulai dengan huruf. Itu harus dimulai dengan simbol. Beberapa orang di CSSWG yakin ini akan mudah diingat dan dilakukan. Yang lain bertanya-tanya, mengingat bahwa aturan gaya ditempatkan di tempat lain di CSS tidak memiliki batasan sintaksis seperti itu, jika itu akan menimbulkan kebingungan, membuat pengembang tersandung dengan cara yang sulit untuk di-debug.

Saat Anda membandingkan opsi, pikirkan bagaimana seluruh tim Anda akan menangani kode bersarang. Pikirkan tentang bagaimana rasanya menyalin & menempelkan kode dari satu proyek ke proyek lainnya. Opsi mana yang memudahkan pengkodean di dalam dan di luar konteks bersarang? Manakah yang paling memudahkan untuk membaca, menulis, dan mengedit CSS dalam jumlah besar?

Mana yang terbaik untuk masa depan CSS? Ketika orang menulis CSS tiga puluh tahun dari sekarang — lama setelah kebiasaan dan harapan hari ini benar-benar dilupakan, ketika generasi mendatang belum pernah mendengar tentang Sass — opsi apa yang akan membuat penulisan bahasa ini mudah dan elegan?

Pastikan untuk membaca semua contoh. Satu opsi mungkin menonjol sebagai favorit Anda dalam satu contoh, namun memiliki masalah yang tidak Anda sukai di contoh lain.

Membandingkan Pilihan

  • Opsi 5: @nest tingkat teratas: Aturan gaya bersarang dideklarasikan dalam at-rule khusus dan independen yang hanya menerima aturan gaya. Deklarasi dapat disarangkan menggunakan & .. .
  • Opsi 4: Blok Postfix: Aturan gaya memungkinkan blok opsional kedua setelah blok deklarasi yang hanya berisi aturan gaya.
  • Opsi 3: Permulaan non-huruf: Aturan gaya bersarang dapat ditambahkan langsung ke blok deklarasi, tetapi tidak dapat dimulai dengan huruf.

Contoh A: Dasar-Dasar

CSS tidak bersarang

article 
  font-family: avenir;

article aside 
  font-size: 1rem;

Opsi 5

@nest article 
  & 
    font-family: avenir;
  
  aside 
    font-size: 1rem;
  

Opsi 4

article 
  font-family: avenir;
 
  aside 
    font-size: 1rem;
  

Opsi 3

article 
  font-family: avenir;
  & aside 
    font-size: 1rem;
  

Contoh B: Dengan variasi sintaks

Ada banyak cara berbeda yang disukai pengembang untuk menyusun CSS mereka — menggunakan tab vs spasi, menempatkan tanda kurung pada baris yang sama sebagai aturan atau pada baris terpisah, mengatur aturan dalam urutan tertentu. Ini juga berlaku saat menulis CSS bersarang. Contoh B mengartikulasikan beberapa kemungkinan variasi tentang bagaimana Anda dapat memformat kode bersarang untuk setiap opsi. Ini sepenuhnya terserah preferensi pribadi Anda.

CSS tidak bersarang

.foo 
  color: red;

.foo .bar 
  color: blue;

.foo p 
  color: yellow;

Opsi 5

@nest .foo 
  & 
    color: red;
  
  .bar 
    color: blue;
  
  p 
    color: yellow;
  

Atau Anda dapat menggunakan sintaks ini:

@nest .foo 
  color: red; 
  .bar 
    color: blue;
  
  p 
    color: yellow;
  

Opsi 4

.foo 
  color: red;
 
  .bar 
    color: blue;
  
  p 
    color: yellow;
  

Atau Anda dapat memformatnya seperti ini:

.foo 
  color: red;  
  .bar 
    color: blue;
  
  p 
    color: yellow;
  

Opsi 3

.foo 
  color: red;
  .bar 
    color: blue;
  
  & p 
    color: yellow;
  

Atau Anda dapat menggunakan sintaks ini:

.foo 
  color: red;
  & .bar 
    color: blue;
  
  & p 
    color: yellow;
  

Contoh C: Bersarang kembali di dalam pemilih elemen

Ada situasi untuk Opsi 3 di mana hanya menggunakan an & tidak cukup – ketika kita ingin penyeleksi induk direferensikan oleh & datang setelah pemilih bersarang. Karena kita tidak bisa mulai dengan &kita perlu menggunakan sesuatu seperti :is() atau :where() untuk memulai dengan simbol, bukan huruf.

CSS tidak bersarang

a:hover 
  color: hotpink;

aside a:hover 
  color: red;

Opsi 5

@nest a:hover 
  & 
    color: hotpink;
  
  aside & 
    color: red;
  

Opsi 4

a:hover 
  color: hotpink;
 
  aside & 
    color: red;
  

Opsi 3

a:hover 
  color: hotpink;
  :is(aside) & 
    color: red;
  

Contoh D: Nol deklarasi tanpa sarang + berbagai penyeleksi

CSS tidak bersarang

:has(img) .product 
  margin-left: 1rem;

:has(img) h2 
  font-size: 1.2rem;

:has(img) > h3 
  font-size: 1rem;

:has(img):hover 
  box-shadow: 10px 10px;

a:has(img) 
  border: none;

Opsi 5

@nest :has(img) 
  .product 
    margin-left: 1rem;
  
  h2 
    font-size: 1.2rem;
  
  > h3 
    font-size: 1rem;
  
  &:hover 
    box-shadow: 10px 10px;
  
  a& 
    border: none;
  

Opsi 4

:has(img)  
  .product 
    margin-left: 1rem;
  
  h2 
    font-size: 1.2rem;
  
  > h3 
    font-size: 1rem;
  
  &:hover 
    box-shadow: 10px 10px;
  
  a& 
    border: none;
  

Opsi 3

:has(img) 
  .product 
    margin-left: 1rem;
  
  & h2 
    font-size: 1.2rem;
  
  > h3 
    font-size: 1rem;
  
  &:hover 
    box-shadow: 10px 10px;
  
  :is(a&) 
    border: none;
  

Contoh E: Bersarang di dalam sarang

CSS tidak bersarang

table.colortable td 
  text-align: center;

table.colortable td .c 
  text-transform: uppercase;

table.colortable td:first-child,
table.colortable td:first-child + td 
  border: 1px solid black;

table.colortable th 
  text-align: center;
  background: black;
  color: white;

Opsi 5

@nest table.colortable 
  @nest td 
    & 
      text-align: center;
    
    .c 
      text-transform: uppercase;
    
    &:first-child,
    &:first-child + td 
       border: 1px solid black;
    
  
  th 
    text-align: center;
    background: black;
    color: white;
  

Opsi 4

table.colortable  
  td 
    text-align: center; 
    .c 
      text-transform: uppercase;
    
    &:first-child,
    &:first-child + td 
       border: 1px solid black;
    
  
  th 
    text-align: center;
    background: black;
    color: white;
  

Opsi 3

table.colortable 
  & td 
    text-align: center;
    .c 
      text-transform: uppercase;
    
    &:first-child,
    &:first-child + td 
       border: 1px solid black;
    
  
  & th 
    text-align: center;
    background: black;
    color: white;
  

Contoh F: Integrasi dengan Kueri Media

CSS tidak bersarang

ol, ul 
  padding-left: 1em;


@media (max-width: 30em)
  .type ul,
  .type ol 
    padding-left: 0;
  

Opsi 5

@nest ol, ul 
  & 
    padding-left: 1em;
  
  @media (max-width: 30em)
    .type & 
      padding-left: 0;
    
  

Opsi 4

ol, ul 
  padding-left: 1em;
 
  @media (max-width: 30em)
    .type & 
      padding-left: 0;
    
  

Opsi 3

ol, ul 
  padding-left: 1em;
  @media (max-width: 30em)
    .type & 
      padding-left: 0;
    
  

Contoh G: Integrasi dengan Cascade Layers

CSS tidak bersarang

@layer base 
  html 
    width: 100%;
  
  @layer support 
    html body 
      min-width: 100%;
    
  

Opsi 5

@layer base 
  @nest html 
    & 
      width: 100%;
    
    @layer support 
      body 
        min-width: 100%;
      
    
  

Opsi 4

@layer base 
  html 
    width: 100%;
   
    @layer support 
      body 
        min-width: 100%;
      
    
  

Opsi 3

@layer base 
  html 
    width: 100%;
    @layer support 
      & body 
        min-width: 100%;
      
    
  

Sekarang setelah Anda memiliki kesempatan untuk menyerap contoh dari tiga opsi, dan mungkin bermain-main dengan beberapa opsi Anda sendiri, mana yang menurut Anda harus menjadi cara penulisan CSS di masa mendatang?

Opsi mana yang terbaik untuk masa depan CSS?

Jika Anda ingin menjelaskan lebih banyak tentang pemikiran Anda, balas @webkit di Twitteratau @[email protected] di Mastodon.

Terima kasih atas tanggapan Anda. Banyak hal yang harus dilakukan dalam mendesain bahasa pemrograman, bukan hanya hasil survei seperti ini. Tetapi mengetahui apa yang dipikirkan pengembang web setelah membaca contoh akan membantu kami dalam diskusi yang sedang berlangsung.

Silakan sampaikan survei ini kepada orang lain yang Anda kenal yang juga menulis CSS, mempostingnya ke media sosial, dan membantu kami menyebarluaskannya. Semakin banyak orang yang menyuarakan pendapatnya, semakin baik.

Kami terutama ingin mendengar dari pengembang yang mengerjakan berbagai macam proyek — mulai dari situs web hingga aplikasi web, aplikasi asli hingga reklame digital hingga buku cetak. Apakah proyek besar dan kecil, tim besar atau kecil, basis kode baru atau puluhan tahun. Dibangun di berbagai kerangka kerja, CMS, sistem bangun… dinamis atau statis, sisi server atau sisi klien yang dirender… ada banyak cara orang menggunakan CSS, di seluruh dunia. Kita perlu mempertimbangkan semuanya.

Karena hanya sanggup bergantung kepada pihak yang sediakan knowledge togel sidnei saja yang dapat beroleh knowledge sgp lengkap. Lantas bersama dengan sukar nya mengakses website togel singapore pools terhadap negara +62. Maka alangkah baiknya berlangganan pada halaman ini untuk menemukan information keluaran sgp hari ini live tercepat hanya disini.