Come si spoglia l’unità da qualsiasi numero in SASS?

So che puoi spogliare le unità dai numeri in SASS quando conosci l’unità prima della mano in questo modo:

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

Ma è ansible rimuovere l’unità da un numero senza sapere quale sia l’unità per prima?

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

AGGIORNAMENTO: non è mai necessario utilizzare questa funzione. La matematica di Sass è molto intelligente riguardo alle unità e non ho mai visto un caso d’uso in cui le unità di stripping fossero un’opzione migliore del semplice uso della matematica corretta per ottenere ciò di cui hai bisogno. Vedi il thread del problema di Sass in cui è stato discusso a lungo.

È una funzione intelligente, ma se hai voglia di usarla, probabilmente c’è un problema con la matematica. Non ricorrere a questa funzione. Risolvi i tuoi calcoli invece.

Devi dividere per 1 della stessa unità. Se si usa unit() , si ottiene una stringa anziché un numero, ma se si moltiplica per zero e si aggiunge 1, si ottiene ciò di cui si ha bisogno:

 @function strip-units($number) { @return $number / ($number * 0 + 1); } 

Che funzioni. strip-units(13.48cm) restituirà 13.48 .

Penso che dovresti aggiungere una funzione Ruby personalizzata per rimuovere le unità (consulta la documentazione sull’aggiunta di funzioni personalizzate ). Sembrerebbe qualcosa del genere, penso (avvertenza, non testata):

 module Sass::Script::Functions def strip_units(num) assert_type num, :Number Sass::Script::Number.new(num.value) end end