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!


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.


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;

  }
}

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;

  }
}

La réponse la plus logique avec le moins de votes positifs ... Le monde est illogique.
CPHPython
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.