Pemilih anak langsung di LESS


112

Apakah ada cara agar LESS menerapkan selektor anak langsung (>) dalam keluarannya?

Dalam style.less saya, saya ingin menulis sesuatu seperti:

.panel {
    ...
    > .control {
        ...
    }
}

dan LESS menghasilkan sesuatu seperti:

.panel > .control { ... }


15
Anehnya, potongan pertanyaan Anda ternyata merupakan jawaban yang benar.
tigapuluhdot

@thirtydot Tentu, kecuali itu tidak berfungsi ... tidak jika Anda tidak menghapus spasi atau menambahkan "&". Saya menggunakan less.js. Tidak bisa memastikan untuk parser lain.
Dave

2
Saya baru saja mengujinya, dan kode asli dari pertanyaan Anda berfungsi di less.js. Lihat sendiri: jsfiddle.net/thirtydot/vcE8t
tigapuluhdot

1
Ya, maafkan saya, ini berfungsi seperti pesona dengan ruang. 1 untuk Anda. Saya tidak tahu bagaimana itu tidak berhasil untuk saya selama berjam-jam kemarin ... kalau tidak saya tidak akan memposting pertanyaan itu.
Dave

Jawaban:


144

MEMPERBARUI

Sebenarnya, kode dalam pertanyaan awal berfungsi dengan baik. Anda bisa tetap menggunakan >pemilih anak.


Temukan jawabannya.

.panel {
    ...
    >.control {
        ...
    }
}

Perhatikan kurangnya spasi antara ">" dan ".", Jika tidak maka tidak akan berfungsi.


4
Saya tidak akan meragukan bahwa ini adalah bug jika tidak berfungsi dengan ruang di sana, kecuali didokumentasikan secara khusus.
BoltClock

Ini hanya membodohi parser. Ia melihatnya sebagai pemilih tunggal, jadi Anda mengerti .panel >.control.
Ricardo Tomasi

Saya menganggapnya sebagai fitur daripada bug. Ini jauh lebih konsisten bila Anda menggunakannya dengan cara ini dibandingkan dengan "&". Saya pikir ini adalah kode yang lebih jelas jika Anda hanya menggunakan "&" dengan pseudo-class dan bukan kelas anak.
Dave

1
Ini adalah fitur CSS, yang menerima div > pdan div>p. Konsistensi akan selalu menggunakan spasi di antara penyeleksi (lihat CSS yang dihasilkan).
Ricardo Tomasi

Tentu, tapi saya lebih mementingkan konsistensi penggunaan &.
Dave

78

Cara resmi:

.panel {
  & > .control {
    ...
  }
}

& selalu mengacu pada pemilih saat ini.

Lihat http://lesscss.org/features/#features-overview-feature-nested-rules


1
Saya pikir ini juga hanya membodohi pengurai (seperti yang Anda rasakan tentang jawaban lain). Biar saya jelaskan. Seperti yang Anda katakan, & selalu mengacu pada pemilih (induk) saat ini. Jadi apa pun setelah itu harus berlaku untuk orang tua. Dan, itulah peran kelas-semu. Kelas anak langsung lebih dekat dengan kelas anak terkesiap **** daripada kelas semu. Jadi menggunakan just> lebih intuitif dan logis.
Dave

6
Menurut Anda mana yang lebih benar? div > patau div >p? The &combinator adalah cara kanonik melakukannya di KURANG, bukan perasaan saya. Penjelasan Anda rethorical. Beberapa orang menulis CSS mereka dalam satu baris ...
Ricardo Tomasi

Kebanyakan orang menggunakan LESS sehingga mereka tidak perlu peduli dengan CSS sebenarnya yang dihasilkan. Bagaimanapun, ternyata space tersebut dapat digunakan setelah>. Jadi & benar-benar berlebihan.
Dave

13

Sintaks yang benar akan mengikuti saat menggunakan '&' akan menjadi redundan di sini.

.panel{
   > .control{
   }
}

Menurut panduan yang lebih sedikit , '&' digunakan untuk membuat parameter leluhur (tetapi tidak diperlukan di sini). Dalam contoh yang lebih sedikit ini , &: hover sangat penting di atas : hover jika tidak maka akan menghasilkan kesalahan sintaksis. Namun, tidak ada persyaratan sintaksis untuk menggunakan '&' di sini. Jika tidak, semua sarang akan membutuhkan '&' karena pada dasarnya mengacu pada induk.


1
@JJF tidak ada pertanyaan karena itu adalah jawaban?
Bill Woodger

0

Jika Anda perlu menargetkan lebih banyak pemilih:

.parent {
    >.first-child,
    >.second-child,
    >.third-child {
    ...
    }
}

-1

Selain itu, Jika Anda menargetkan elemen anak pertama, seperti yang pertama <td>dari a <tr>, Anda dapat menggunakan sesuatu seperti ini:

tr {
    & > td:first-child {font-weight:bold;}
}

ini membantu mengurangi deklarasi kelas saat tidak diperlukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.