SCSSミックスインのif / else条件の構文


106

こんにちは私はSASS / SCSSを学習しようとしていて、自分のミックスインをクリアフィックス用にリファクタリングしようとしています

私が欲しいのは、ミックスインに幅を渡すかどうかに基づいてミックスインを設定することです。

これまでの考え(他のミックスインを含めるので、疑似コードのみ)

@mixin clearfix($width) {

   @if !$width {

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

   } @else {

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

これは私がそれを呼ぶかもしれないと思った方法ですが、それは機能していません。

@include clearfix();

または

@include clearfix(100%)

または

@include clearfix(960px)

これを行うための最善または正しい方法についての助けをいただければ幸いです!


3
ライアン・ジェームズの答えを見てください-それは現在受け入れられているものよりはるかに優れています。=)
Quinn Strahl 2013

回答:


145

あなたはこれを試すことができます:

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

   @if $width == 'auto' {

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

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

意図した結果はわかりませんが、デフォルト値を設定するとfalseが返されます。


5
使用していただきありがとうございます" "が、自動値の方が好きです:)-変数を設定する必要はありませんでしたが、デフォルトの値としてミックスイン構文に入れ@mixin clearfix($width: auto) {... ました:)
clairesuzy

$ width:autoを与える目的があります。デフォルト値として?
クリッシュ

222

最初にミックスインを作成するときに、デフォルトのパラメータ値をインラインで割り当てることができます。

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

  @if $width == 'auto' {

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

  } @else {

    display: inline-block;
    width: $width;

  }
}

23
これは受け入れられる答えになるはずです!デフォルトのパラメータを使用する方が適切です。
グラフィカルな

@hellaFont:無効な編集を追加しないでください。コードを追加したり変更したりすると、回答の意味が変わります。コメントで十分です。
ブライアン

9

パラメータのデフォルトをnullまたはにすることができますfalse
この方法では、値がパラメーターとして渡されたかどうかをテストする方が短くなります。

@mixin clearfix($width: null) {

  @if not ($width) {

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

  } @else {

    display: inline-block;
    width: $width;

  }
}

賛成票が最も少ない最も論理的な答え...世界は非論理的です。
CPHPython
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.