Кеширане на текущия селектор (&) в Sass - CSS-трикове

Anonim

Символът &в Sass е уникален с това, че представлява текущия селектор. Променя се, докато гнездите. Да приемем, че сте вложени, но искате достъп до селектор, който архивира малко вложеното. Номерът е да кеширате и да го използвате по-дълбоко в гнезденето. Като:

.parent ( $this: &; &--elem ( display: inline-block; &:hover, #($this)__variation--active & ( background: red; ) ) )

Който се компилира за:

.parent--elem ( display: inline-block; ) .parent--elem:hover, .parent__variation--active .parent--elem ( background: red; )

(Благодаря на Сергей Коваленко, че изпрати този трик!)

Това означава, че ви позволява да използвате едновременно .parentи .parent--elemв селектора. Малко езотерично, но понякога може да бъде полезно. По някакъв начин се избягват ситуации, в които може да се наложи да използвате @ at-root, за да отстъпите докрай и да направите отново селектори.

Същността на Сергей има примери, базирани на BEM:

 
  • Page 1
  • Page 2
$gray-very-light: #ccc; .pagination ( display: flex; padding: 0; list-style: none; $this: &; &__item ( border: 1px solid $gray-very-light; & + & ( margin-left: .5rem; ) ) &__link ( display: block; padding: .25rem .5rem; text-decoration: none; &:hover, #($this)__item--active & ( // Here we get .pagination from $this variable background-color: $gray-very-light; ) ) )

Изход:

.pagination ( display: flex; padding: 0; list-style: none; ) .pagination__item ( border: 1px solid #ccc; ) .pagination__item + .pagination__item ( margin-left: .5rem; ) .pagination__link ( display: block; padding: .25rem .5rem; text-decoration: none; ) .pagination__link:hover, .pagination__item--active .pagination__link ( background-color: #ccc; )