Sintassi per la condizione if / else nel mixin SCSS


106

Ciao, sto cercando di imparare SASS / SCSS e sto cercando di rifattorizzare il mio mixin per clearfix

quello che vorrei è che il mixin si basi sul fatto che io passi al mixin una larghezza.

pensieri fino ad ora (solo pseudo codice poiché includerò altri mixin)

@mixin clearfix($width) {

   @if !$width {

    // if width is not passed, or empty do this

   } @else {

        display: inline-block;
        width: $width;
   }
}

ecco come pensavo di chiamarlo, ma non funziona.

@include clearfix();

o

@include clearfix(100%)

o

@include clearfix(960px)

Apprezzerei qualsiasi aiuto sul modo migliore o giusto per farlo!


3
Si prega di vedere la risposta di Ryan James: è molto meglio di quella attualmente accettata. =)
Quinn Strahl

Risposte:


145

Potresti provare questo:

$width:auto;
@mixin clearfix($width) {

   @if $width == 'auto' {

    // if width is not passed, or empty do this

   } @else {
        display: inline-block;
        width: $width;
   }
}

Non sono sicuro del risultato desiderato, ma l'impostazione di un valore predefinito dovrebbe restituire false.


5
lo fa, grazie di averlo usato " "ma mi piace di più il valore automatico :) - non è necessario impostare la variabile anche se l'ho inserita nella sintassi mixin come valore predefinito @mixin clearfix($width: auto) {... grazie :)
clairesuzy

È uno scopo per dare $ larghezza: auto; come valore predefinito?
Krish

222

È possibile assegnare i valori dei parametri predefiniti inline quando si crea per la prima volta il mixin:

@mixin clearfix($width: 'auto') {

  @if $width == 'auto' {

    // if width is not passed, or empty do this

  } @else {

    display: inline-block;
    width: $width;

  }
}

23
Questa dovrebbe essere la risposta accettata! È meglio / più pulito usare un parametro predefinito.
Think Graphical

@ hellaFont: per favore non aggiungere modifiche non valide. L'aggiunta di codice o la modifica cambierà il significato di una risposta. Basterà un commento.
Brian

9

È possibile impostare il parametro predefinito su nullo false.
In questo modo, sarebbe più breve verificare se un valore è stato passato come parametro.

@mixin clearfix($width: null) {

  @if not ($width) {

    // if width is not passed, or empty do this

  } @else {

    display: inline-block;
    width: $width;

  }
}

La risposta più logica con il minor numero di voti positivi ... Il mondo è illogico.
CPHPython
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.