Jak usunąć jednostkę z dowolnego numeru w SASS?

Wiem, że można usunąć jednostki z liczb w SASS, gdy znasz jednostkę przed-ręka w ten sposób:

$number: 16px;
$without-unit: 16px / 1px;
@warn $without-unit; // 16

Ale czy można usunąć jednostkę z numeru, nie wiedząc najpierw, Co To Jest jednostka?

@function strip-unit($number) {
  // magic code here...
}

@warn strip-unit(16px); // 16
Author: cimmanon, 2012-09-08

2 answers

--

UPDATE: nigdy nie powinieneś używać tej funkcji. Sass math jest bardzo inteligentny w odniesieniu do jednostek i nigdy nie widziałem przypadku użycia, w którym usuwanie jednostek było lepszą opcją niż po prostu użycie poprawnej matematyki, aby uzyskać to, czego potrzebujesz. Zobacz wątek Sass issue thread gdzie zostało to omówione na dłuższą metę.

To sprytna funkcja, ale jeśli kiedykolwiek będziesz miał ochotę jej użyć, prawdopodobnie masz problem z matematyką. Nie wycofuj się z tej funkcji. Napraw swój zamiast tego matematyka.

--

Musisz podzielić przez 1 tej samej jednostki. Jeśli użyjesz unit(), Otrzymasz ciąg znaków zamiast liczby, ale jeśli pomnożysz przez zero i dodasz 1, Masz to, czego potrzebujesz:

@function strip-units($number) {
  @return $number / ($number * 0 + 1);
}
To działa. strip-units(13.48cm) zwróci 13.48.
 102
Author: Miriam Suzanne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-09 16:37:36

Myślę, że musisz dodać niestandardową funkcję Ruby, aby usunąć jednostki (zobacz dokumentację na dodawanie niestandardowych funkcji ). Wygląda to tak, myślę (Ostrzeżenie, nieprzetestowane):

module Sass::Script::Functions
  def strip_units(num)
    assert_type num, :Number
    Sass::Script::Number.new(num.value)
  end
end
 0
Author: hopper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-08 22:32:29