Når @extend
Sass udvider med direktivet, tager Sass ikke CSS-indholdet fra den udvidede vælger for at placere det i det udvidede. Det fungerer omvendt. Det tager den udvidede vælger og føjer den til den udvidede.
På grund af hvordan det fungerer, gør det det umuligt at bruge det fra forskellige anvendelsesområder. For eksempel kan du ikke udvide en pladsholder, der er erklæret i en @media
blok, og du kan heller ikke udvide en pladsholder fra rod, hvis du er inden for et @media
direktiv.
Vi kan helt sikkert finde en måde at bruge, @extend
når det er muligt, mixin ellers. Faktisk er det gennemførligt, men det er lidt vanskeligt, jeg kalder dette blandingshacket. Du vil måske tænke to gange, før du implementerer overalt i dit projekt. Måske ville det kun være lettere at bruge mixins. Jeg efterlader dig dommeren over det.
Indpakning @extend
Ideen er faktisk ret enkel at forstå. Først definerer vi mixin. Den eneste parameter er $extend
, der definerer, om mixin skal prøve at udvide i stedet for at inkludere. Det er selvfølgelig en boolsk (standard til true
).
Hvis det $extend
er true
, udvider vi en pladsholder, der er opkaldt efter mixin (desværre beregnes dette ikke automatisk). Hvis det er false
, dumper vi CSS-koden, som en almindelig mixin ville gøre.
Ud af mixin definerer vi den førnævnte pladsholder. For at undgå at gentage CSS-koden i pladsholderen, behøver vi kun at inkludere mixin ved at indstille $extend
til, false
så den dumper CSS-koden i pladsholderens kerne.
/// *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 simpelt eksempel bruger vi 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); )
Brug af det er ret ligetil:
.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 tekstuddrag
Hvis du vil gemme kedelpladen for at gøre den meget genanvendelig, vil du være glad for at vide, at det er meget let at oprette et sublimt tekstuddrag til dette. I Sublime skal du gå til Værktøjer> Nyt uddrag ... og indsætte indholdet nedenfor.
Du er velkommen til at skifte nøgle for at sætte det, der flyder din båd; det er ordet at skrive, inden du trykker på for
tab
at udvide kodestykket. Jeg gik med mixtend
.
mixtend source.scss