Syntaxe de la condition if / else dans SCSS mixin

106

Salut, j'essaie d'apprendre SASS / SCSS et j'essaye de refactoriser mon propre mixin pour clearfix

ce que j'aimerais, c'est que le mixin soit basé sur le fait que je passe le mix dans une largeur.

pensées jusqu'à présent (pseudo code uniquement car je vais inclure d'autres mixins)

@mixin clearfix($width) {

   @if !$width {

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

   } @else {

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

voici comment je pensais pouvoir l'appeler, mais cela ne fonctionne pas.

@include clearfix();

ou

@include clearfix(100%)

ou

@include clearfix(960px)

J'apprécierais toute aide sur la meilleure ou la bonne façon de faire cela!

clairesuzy
la source
3
Veuillez voir la réponse de Ryan James - elle est bien meilleure que celle actuellement acceptée. =)
Quinn Strahl

Réponses:

145

Vous pouvez essayer ceci:

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

   @if $width == 'auto' {

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

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

Je ne suis pas sûr du résultat escompté, mais la définition d'une valeur par défaut doit renvoyer false.

thèmes simples
la source
5
il le fait, merci de l'avoir utilisé " "mais j'aime mieux la valeur automatique :) - je n'ai pas besoin de définir de variable bien que je l'ai mis dans la syntaxe de mixin comme valeur par défaut @mixin clearfix($width: auto) {... merci :)
clairesuzy
Est-ce un but pour donner $ width: auto; comme valeur par défaut?
Krish
222

Vous pouvez affecter des valeurs de paramètre par défaut en ligne lorsque vous créez le mixin pour la première fois:

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

  @if $width == 'auto' {

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

  } @else {

    display: inline-block;
    width: $width;

  }
}
Ryan James
la source
23
Cela devrait être la réponse acceptée! Il est préférable / plus propre d'utiliser un paramètre par défaut.
Think Graphical
@hellaFont: veuillez ne pas ajouter de modifications non valides. Ajouter un code ou le modifier changera la signification d'une réponse. Un commentaire suffira.
Brian
10

Vous pouvez définir par défaut le paramètre nullou false.
De cette façon, il serait plus court de tester si une valeur a été passée en paramètre.

@mixin clearfix($width: null) {

  @if not ($width) {

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

  } @else {

    display: inline-block;
    width: $width;

  }
}
Quentin Véron
la source
La réponse la plus logique avec le moins de votes positifs ... Le monde est illogique.
CPHPython