SCSS mixin의 if / else 조건 구문


106

안녕하세요 저는 SASS / SCSS를 배우려고하고 있으며 clearfix를 위해 내 믹스 인을 리팩터링하려고합니다.

내가 원하는 것은 mixin이 너비를 통과하는지 여부에 따라 mixin이되는 것입니다.

지금까지의 생각 (다른 믹스 인을 포함 할 것이므로 의사 코드 만 해당)

@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
Ryan James의 답변을 참조하십시오-현재 허용되는 것보다 훨씬 낫습니다. =)
Quinn Strahl

답변:


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 구문에 넣어도 변수를 설정할 필요가 없었습니다. @mixin clearfix($width: auto) {... 감사합니다. :)
clairesuzy

$ width : auto를 제공하는 목적입니다. 기본값으로?
Krish

222

믹스 인을 처음 만들 때 기본 매개 변수 값을 인라인으로 할당 할 수 있습니다.

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

  @if $width == 'auto' {

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

  } @else {

    display: inline-block;
    width: $width;

  }
}

23
이것이 받아 들여진 대답이어야합니다! 기본 매개 변수를 사용하는 것이 더 좋고 / 깨끗합니다.
Think Graphical

@hellaFont : 잘못된 편집을 추가하지 마십시오. 코드를 추가하거나 변경하면 답변의 의미가 변경됩니다. 의견이면 충분합니다.
Brian

10

매개 변수를 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.