Når du utvider en velger med @extend
direktivet, tar ikke Sass CSS-innholdet fra den utvidede velgeren for å plassere det i den utvidende. Det fungerer omvendt. Det tar utvidelsesvelgeren og legger den til den utvidede.
På grunn av hvordan det fungerer, gjør det det umulig å bruke det fra forskjellige omfang. For eksempel kan du ikke utvide en plassholder som er erklært i en @media
blokk, og du kan heller ikke utvide en plassholder fra roten hvis du er innenfor et @media
direktiv.
Sikkert kan vi finne en måte å bruke @extend
når det er mulig, bland ellers. Faktisk er det gjennomførbart, men det er litt vanskelig, jeg kaller dette blandingshacket. Det kan være lurt å tenke deg om før du implementerer overalt i prosjektet. Kanskje det bare er enklere å bruke mixins. Jeg lar deg dommeren.
Innpakning @extend
Ideen er faktisk ganske enkel å forstå. Først definerer vi mixin. Den eneste parameteren er $extend
, som definerer om mixin skal prøve å utvide i stedet for å inkludere. Åpenbart er det en boolsk (standard til true
).
Hvis $extend
ja true
, utvider vi en plassholder oppkalt etter mixin (dessverre blir dette ikke automatisk beregnet). Hvis det er false
, dumper vi CSS-koden som en vanlig mixin ville gjort.
Ut av mixin definerer vi den nevnte plassholderen. For å unngå å gjenta CSS-koden i plassholderen, trenger vi bare å inkludere miksen ved å sette $extend
til false
slik at den kaster CSS-koden i plassholderens kjerne.
/// *Mixtend* hack /// @author Hugo Giraudel @mixin mixtend-boilerplate($extend: true) ( @if $extend ( @extend %mixtend-boilerplate-placeholder; ) @else ( // Mixtend content ) ) %mixtend-boilerplate-placeholder ( @include mixtend-boilerplate($extend: false); )
Eksempel
Som et enkelt eksempel vil vi bruke micro-clearfix fra Nicolas Gallagher.
@mixin clearfix($extend: true) ( @if $extend ( @extend %clearfix; ) @else ( &:after ( content: ''; display: table; clear: both; ) ) ) %clearfix ( @include clearfix($extend: false); )
Å bruke den er ganske grei:
.a ( @include clearfix; ) .b ( @include clearfix; ) @media (min-width: 48em) ( .c ( @include clearfix(false); ) )
Resultat CSS:
.a:after, .b:after ( content: ''; display: table; clear: both; ) @media (min-width: 48em) ( .c:after ( content: ''; display: table; clear: both; ) )
Sublim teksttekst
Hvis du vil lagre kjeleplaten for å gjøre den svært gjenbrukbar, vil du være glad for å vite at det er veldig enkelt å lage et sublimt tekstutdrag for dette. I Sublime, gå til Verktøy> Ny kodebit ... og lim inn innholdet nedenfor.
Bytt gjerne nøkkelen for å sette det som flyter båten din; det er ordet å skrive før du trykker på for
tab
å utvide kodebiten. Jeg gikk med mixtend
.
mixtend source.scss