Saya mengalami masalah saat bersarang di Sass. Katakanlah saya memiliki HTML berikut:
<p href="#" class="item">Text</p>
<p href="#" class="item">Text</p>
<a href="#" class="item">Link</a>
Ketika saya mencoba untuk menumpuk gaya saya berikut ini saya mendapatkan kesalahan kompilasi:
.item {
color: black;
a& {
color:blue;
}
}
Bagaimana cara mereferensikan pemilih tipe sebelum pemilih induk ketika itu adalah bagian dari elemen yang sama?
sass
css-selectors
McShaman
sumber
sumber
.item a.item
karena beberapa alasan. Saya mencoba melakukannyaa#{&}
sendiri juga dan hasilnya tetap sama.The
@at-root
Metode -hanya tidak akan memecahkan masalah jika Anda berniat untuk memperpanjang pemilih terdekat sampai rantai. Sebagai contoh:Akan dikompilasi ke:
Bagaimana jika Anda perlu menggabungkan tag Anda ke
.element
alih-alih#id
?Ada fungsi di Sass yang disebut
selector-unify()
yang menyelesaikan ini. Menggunakan ini dengan@at-root
itu dimungkinkan untuk menargetkan.element
.Akan dikompilasi ke:
sumber
#id > .element #id > div.element { color: blue; }
. Pendekatan lain akan digunakanselector_replace
,#id { > .element { @at-root #{selector-replace(&,'.element', 'div.element')} { color: blue;}}}
. Berikut adalah Inti untuk keterbacaan yang lebih baik.selector-replace
Meskipun demikian , ini juga merupakan cara lain untuk melakukannya, tetapi perlu mengetahui apa itu selektor. Theselector-unify
metode memiliki manfaat yang digunakan dalam mixin.Sebagai permulaan, (pada saat menulis jawaban ini) tidak ada sintaks sass yang menggunakan selector & . Jika Anda akan melakukan sesuatu seperti itu, Anda memerlukan spasi antara pemilih dan simbol ampers. Sebagai contoh:
Cara lain untuk menggunakan ampersand mungkin adalah yang Anda (salah) cari:
Ini memungkinkan Anda untuk memperluas selektor dengan kelas lain, ID, pseudo-selektor, dll. Sayangnya untuk kasus Anda, ini secara teoritis akan dikompilasi ke sesuatu seperti .itema yang jelas tidak berfungsi.
Anda mungkin hanya ingin memikirkan kembali bagaimana Anda menulis CSS Anda. Apakah ada elemen induk yang dapat Anda gunakan?
Dengan cara ini, Anda dapat dengan mudah menulis SASS Anda dengan cara berikut:
(Catatan tambahan: Anda harus melihat html Anda. Anda mencampur tanda kutip tunggal dan ganda DAN meletakkan atribut href pada tag p.)
sumber
href
tag pada ap
untuk menulis CSS yang berfungsi..item { a& }
dan tidak ada sintaks sass untuk itu (sejauh yang saya ketahui. Saya menyarankan dia mungkin mencari sesuatu seperti sintaks ampersand yang Anda jelaskan yang digunakan secara teratur di Sass. Namun, membangun contoh OP,.item { &a }
adalah tidak valid dan akan dikompilasi.itema
. Seperti yang saya katakan dalam jawaban saya. Apakah ada sesuatu yang saya lewatkan?.item { a& { ... } }
yang sekarang bisa dilakukan seperti yang ditunjukkan @Blaine.item { @at-root a#{&} { ... } }
. Intinya adalah jika Anda memiliki kelas pada elemen itu mudah dilakukan.item { &.class { ... } }
jadi mengapa Anda tidak bisa melakukan hal yang sama dengan elemen html mentah. Hanya karena tidak ada cara untuk melakukannya pada saat OP diposting tidak berarti dia salah untuk menginginkan fungsionalitas tersebut benar-benar melakukannya.AFAIK Jika Anda ingin menggabungkan ampersand untuk kelas dan tag pada saat yang sama, Anda perlu menggunakan sintaks ini:
akan dikompilasi ke
Kegunaan lain (seperti menggunakan kelas sebelumnya
@at-root
atau menggunakan beberapa@at-root
) akan menyebabkan kesalahan.Semoga bermanfaat
sumber
#{&}
dasarnya menipu kompiler - atau akankah ini selalu berhasil di masa depan !?#{}
dievaluasi. Juga&
berarti pemilih saat ini. Jadi#{&}
dievaluasi.c1
.&
Fitur ini telah hadir di versi terbaru Sass,
3.3.0.rc.1
(Maptastic Maple)
Dua fitur terkait erat yang perlu Anda gunakan adalah scriptable
&
, yang dapat Anda interpolasi dalam gaya bertingkat untuk mereferensikan elemen induk, dan@at-root
direktif, yang menempatkan selektor atau blok css berikut di root (tidak akan memiliki orang tua di css yang dikeluarkan)Lihat masalah Github ini untuk lebih jelasnya
sumber