ไวยากรณ์สำหรับเงื่อนไข if / else ใน SCSS mixin


106

สวัสดีฉันกำลังพยายามเรียนรู้ SASS / SCSS และกำลังพยายาม refactor mixin ของตัวเองสำหรับ 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;
   }
}

ฉันไม่แน่ใจในผลลัพธ์ที่คุณต้องการ แต่การตั้งค่าเริ่มต้นควรส่งคืนเป็นเท็จ


5
ขอบคุณที่ใช้" "แต่ฉันชอบค่าอัตโนมัติดีกว่า :) - ไม่จำเป็นต้องตั้งค่าตัวแปรแม้ว่าฉันจะใส่ไว้ในไวยากรณ์ของ mixin เป็นค่าเริ่มต้น@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
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ! การใช้พารามิเตอร์เริ่มต้นจะดีกว่า / สะอาดกว่า
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;

  }
}

คำตอบที่เป็นเหตุเป็นผลกับผู้โหวตน้อยที่สุด ... โลกไร้เหตุผล
CPHP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.