2011-10-07 27 views
19

Hãy nói rằng bạn có một mixin cho bóng như ví dụ:Có thể quá tải mixin trong sass không?

@mixin box-shadow($offset, $blur, $color) 
{ 
    -moz-box-shadow: $offset $offset $blur $color; 
    -webkit-box-shadow: $offset $offset $blur $color; 
    box-shadow: $offset $offset $blur $color; 
} 

Có thể quá tải mixin rằng với một cái gì đó như:

@mixin box-shadow($offset, $blur) 
{ 
    @include box-shadow($offset, $blur, #999); 
} 

Hoặc tôi phải sử dụng tên gọi khác nhau cho mixins?

+0

Chỉ như một mẹo, quản lý nhà cung cấp tiền tố trong sass là khó khăn, các trình duyệt web liên tục được cập nhật và rất khó để mantain mã của chúng tôi để giữ cho nó chạy đúng với mỗi cập nhật vì vậy tôi khuyên bạn nên sử dụng [autoprefixer] (http://stackoverflow.com/questions/20150621/sass-mixin-for- animation-keyframe-which-includes-multiple-stages-and-transform-p/20166008 # 20166008) –

Trả lời

20

Bạn không thể quá tải, nhưng thực tế thông thường là đặt giá trị mặc định.

/* this would take color as an arg, or fall back to #999 on a 2 arg call */ 
@mixin box-shadow($offset, $blur, $color: #999) { 
    -webkit-box-shadow: $offset $offset $blur $color; 
    -moz-box-shadow: $offset $offset $blur $color; 
    box-shadow: $offset $offset $blur $color; 
} 
+0

Ngọt ... nhưng về cơ bản là quá tải :). –

+3

@Tomas Mặc dù nó hoạt động trong trường hợp của bạn, nhưng nó không thực sự quá tải: Quá tải sẽ cho phép bạn có hai mixin riêng biệt này 'border-radius ($ radius); 'và' border-radius ($ top-angle, $ bottom -corners) ' – Armstrongest

+4

Điều này cũng không tính đến khi mixin hiện có là một phần của thư viện của nhà cung cấp mà bạn không thể hoặc không muốn sửa đổi. –

2

Nếu bạn cần tinh chỉnh một mixin nhà cung cấp hơi, bạn có thể sao chép nó vào tập tin khác - bao gồm sau khi bản gốc - và chỉnh sửa nó trong đó, và của nhà cung cấp ban đầu sẽ bị bỏ qua.

@import "_their-mixins"; 
@import "_our-mixins"; 

Warning - điều này có thể phụ thuộc vào bộ xử lý bạn đang sử dụng. Tại thời điểm viết nó hoạt động tuyệt vời sử dụng gruntgrunt-contrib-compass

+1

Yeah, grunt nào - gulp don't – mate64

2

@ numbers1311407 giải pháp là đúng, nhưng bạn có thể sử dụng các chỉ thị @each để tạo ra một mixin ngắn:

@mixin box-shadow($offset, $blur, $color: #999) { 
    @each $prefix in -moz-, -webkit-, null { 
    #{$prefix}box-shadow: $offset $offset $blur $color; 
    } 
} 
Các vấn đề liên quan