SCSS karışımında if / else koşulu için sözdizimi


106

Merhaba SASS / SCSS öğrenmeye çalışıyorum ve kendi mixin'imi clearfix için yeniden düzenlemeye çalışıyorum

Karışımın, bir genişlikte karışımı geçip geçmediğime bağlı olmasını istiyorum.

Şimdiye kadarki düşünceler (sözde kod yalnızca diğer karışımları da dahil edeceğim gibi)

@mixin clearfix($width) {

   @if !$width {

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

   } @else {

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

işte böyle adlandırabileceğimi düşündüm, ama işe yaramıyor.

@include clearfix();

veya

@include clearfix(100%)

veya

@include clearfix(960px)

Bunu yapmanın en iyi veya en doğru yolu konusunda her türlü yardım için minnettar olurum!


3
Lütfen Ryan James'in cevabına bakın - şu anda kabul edilmiş olandan çok daha iyi. =)
Quinn Strahl

Yanıtlar:


145

Bunu deneyebilirsin:

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

   @if $width == 'auto' {

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

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

İstediğiniz sonuçtan emin değilim, ancak varsayılan bir değer belirlemek yanlış döndürmelidir.


5
öyle, teşekkür ederim kullandım " "ama otomatik değerini daha çok seviyorum :) - varsayılan değer olarak mixin sözdizimine koysam da değişken ayarlamama gerek yoktu, @mixin clearfix($width: auto) {... teşekkürler :)
clairesuzy

$ Width vermenin herhangi bir amacı var mı: auto; varsayılan değer olarak?
Krish

222

Mixin'i ilk oluşturduğunuzda varsayılan parametre değerlerini satır içi olarak atayabilirsiniz:

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

  @if $width == 'auto' {

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

  } @else {

    display: inline-block;
    width: $width;

  }
}

23
Kabul edilen cevap bu olmalı! Varsayılan bir parametre kullanmak daha iyi / daha temizdir.
Grafik düşünün

@hellaFont: Lütfen geçersiz düzenlemeler eklemeyin. Kod eklemek veya değiştirmek bir cevabın anlamını değiştirecektir. Bir yorum yeterli olacaktır.
Brian

10

Parametreyi nullveya olarak varsayılan yapabilirsiniz false.
Bu şekilde, bir değerin parametre olarak geçip geçmediğini test etmek daha kısa olacaktır.

@mixin clearfix($width: null) {

  @if not ($width) {

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

  } @else {

    display: inline-block;
    width: $width;

  }
}

En az olumlu oyla en mantıklı cevap ... Dünya mantıksız.
CPHPython
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.