2012-07-29 38 views
11

Tôi đang cố tối ưu hóa các phép tính liên quan đến CSS bằng cách sử dụng hai hàm tiện ích tùy chỉnh trong Scss.Viết hàm Sass/Scss trả về một chuỗi

Một cho DTTS:

@function _em($wanted, $inherited) { 
    @return ($wanted/$inherited) + 'em'; 
} 

... và một cho tỷ lệ phần trăm:

@function _pc($wanted, $parent) { 
    @return (($wanted/$parent) * 100) + '%'; 
} 

... sau đó gọi điện cho họ inline:

body { 
    margin: _pc(40,1024); 
    font-size: _em(20,16); 
    line-height: _em(26,20); 
} 

Không những được trở về Tuy nhiên, chuỗi Nem hoặc N% được mong đợi. (Tôi nghĩ rằng đó là chuỗi nối của tôi - tức là dán tuyên bố đơn vị vào cuối tính toán - nhưng tôi không chắc chắn.)

Có ai có thể làm sáng tỏ những gì tôi đang làm không?

Trả lời

16

Thực ra, vấn đề của bạn là tên của mixin. Tôi mới phát hiện ra điều này, nhưng dường như bạn không thể bắt đầu một mixin với dấu gạch dưới.

này hoạt động: http://jsfiddle.net/B94p3/

@function -em($wanted, $inherited) { 
    @return ($wanted/$inherited) + 'em'; 
} 

@function -pc($wanted, $parent) { 
    @return (($wanted/$parent) * 100) + '%'; 
} 

p { 
    font-size: -em(40,16); 
} 
+0

Cảm ơn Ayman, mặc dù đó là một chút khó chịu. Hãy suy nghĩ tôi sẽ chỉ đi với pc (x, y) và em (x, y) làm tên hàm tiền tố với dấu trừ có thể gây hiểu nhầm cho các dev khác. – markedup

+5

Để tham khảo cho bất kỳ ai muốn những điều này, nhưng không có đầu ra chuỗi, chỉ cần bọc trả về trong cú pháp nội suy SASS, ví dụ: '@function -px-to-pc ($ muốn, $ parent) { @return # {(($ wanted/$ parent) * 100) + '%'}; } ' –

+0

Cảm ơn, Jasmine, đây là giải pháp tốt nhất - nếu không Sass có vẻ như kết xuất phép tính + nối như một chuỗi được trích dẫn bằng chữ như giá trị quy tắc CSS! – markedup

-1

Tương tự như vậy, tôi đã viết chức năng này để chuyển đổi đơn vị px-rem.

Bạn có thể sửa đổi cho phù hợp.

$is-pixel: true; 
$base-pixel: 16; 

@function unit($value) { 
    @if $is-pixel == true { 
    $value: #{$value}px; 
    } @else { 
    $value: #{$value/$base-pixel}rem; 
    } 
    @return $value; 
} 

Bây giờ, người ta có thể sử dụng như sau

.my-class { 
    width: unit(60); 
    height: unit(50); 
} 
Các vấn đề liên quan