El &
personaje de Sass es único en el sentido de que representa al selector actual. Cambia a medida que anida. Digamos que está anidado, pero desea acceder a un selector que respalde un poco el anidamiento. El truco es almacenar en caché y usarlo más profundamente en el anidamiento. Me gusta:
.parent ( $this: &; &--elem ( display: inline-block; &:hover, #($this)__variation--active & ( background: red; ) ) )
Que se compila para:
.parent--elem ( display: inline-block; ) .parent--elem:hover, .parent__variation--active .parent--elem ( background: red; )
(¡Gracias a Sergey Kovalenko por enviar este truco!)
Lo que significa que le permitió usar .parent
y .parent--elem
dentro de un selector al mismo tiempo. Un poco esotérico, pero a veces puede resultar útil. En cierto modo evita situaciones en las que es posible que deba usar @ at-root para retroceder por completo y volver a hacer selectores.
La esencia de Sergey tiene ejemplos basados en 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; ) ) )
Producción:
.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; )