2011-10-06 8 views
7

Czy jest jakiś sposób, aby zmodyfikować sposób, w jaki Sass będzie obsługiwać miejsca dziesiętne? Widziałem kilka osób, które mówiły, że Sass będzie dynamicznie wykonywał obliczenia (docelowy/nadrzędny) * 100 potrzebne dla układów responsywnych, a wynik będzie generowany w czasie kompilacji. Ma nawet funkcję procentową, która zasadniczo przyjmuje dwie wartości i robi to.Sass i zaokrąglanie liczb. Czy można to skonfigurować?

Niestety, Sass da mi tylko 3 miejsca dziesiętne. Moje zrozumienie do tej pory było takie, że w niektórych przypadkach może to nie być wystarczający stopień dokładności dla wszystkich przeglądarek, aby poprawnie wyświetlać układ bez żadnych przeszkód.

Czy ktoś może mi pomóc dotrzeć do sedna tego?

EDIT

rozwiązany. Jeśli ktoś inny jest zainteresowany, udało mi się osiągnąć to, co chciałem w numerze sr. Sass, zmieniając wartość @precision. To zmienia sposób, w jaki wyprowadzane są wszystkie pływaki.

Odpowiedz

4

Można go także skonfigurować za pomocą linii poleceń --precision, patrz SASS Changelog, version 3.1.8.

Należy również dodać, że jeśli chcesz edytować @precision w numbers.rb bezpośrednio można znaleźć numbers.rb (przynajmniej na OS X), tutaj:

/usr/lib/ruby/user-gems/1.8/gems/sass-3.1.10/lib/sass/script 

1.8 i 3.1.10 powinny oczywiście być zastąpione twoje (najlepiej najnowsze) numery wersji.

+0

Czy udało się uzyskać to do pracy? Kiedy próbuję "sass - precision 6" Nic się nie dzieje. – Jon

+0

@Jeśli składnia jest nieco inna: '--precision = 6' ... więc zamiast' 'potrzebujesz' = ' – conceptdeluxe

14

Jeśli używasz kompasu, można łatwo określić precyzję w pliku projektu (config.rb) bez hacking rdzenia:

Sass::Script::Number.precision = 8 

Więcej informacji można znaleźć Sass documentation

0

Pierwszy set your default precision do najwyższa precyzja, jakiej będziesz potrzebować w swoim projekcie.

Następnie użyj funkcji podobnej do poniższej (opartej na this function by Takeru Suzuki), aby dostosować liczbę miejsc dziesiętnych na poziomie poszczególnych właściwości.

Kod:

@function decimal-round ($number, $digits: 0, $mode: round) { 
    $n: 1; 
    // $number must be a number 
    @if type-of($number) != number { 
     @warn '#{ $number } is not a number.'; 
     @return $number; 
    } 
    // $digits must be a unitless number 
    @if type-of($digits) != number { 
     @warn '#{ $digits } is not a number.'; 
     @return $number; 
    } @else if not unitless($digits) { 
     @warn '#{ $digits } has a unit.'; 
     @return $number; 
    } 
    @if $digits > 0 { 
     @for $i from 1 through $digits { 
      $n: $n * 10; 
     } 
    } 
    @if $mode == round { 
     @return round($number * $n)/$n; 
    } @else if $mode == ceil { 
     @return ceil($number * $n)/$n; 
    } @else if $mode == floor { 
     @return floor($number * $n)/$n; 
    } @else { 
     @warn '#{ $mode } is undefined keyword.'; 
     @return $number; 
    } 
} 

wyjściowa:

decimal-round(0.333) => 0 
decimal-round(0.333, 1) => 0.3 
decimal-round(0.333, 2) => 0.33 
decimal-round(0.666) => 1 
decimal-round(0.666, 1) => 0.7 
decimal-round(0.666, 2) => 0.67 
Powiązane problemy