web-dev-qa-db-ja.com

SASSで任意の数からユニットをどのように削除しますか?

次のように事前にユニットがわかっている場合は、SASSの数値からユニットを削除できることを知っています。

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

しかし、ユニットが最初に何であるかを知らずに、ユニットを番号から取り除くことは可能ですか?

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

@warn strip-unit(16px); // 16
43
jordanbtucker

-

UPDATE:実際にこの関数を使用する必要はありません。 Sassの数学は単位について非常に賢く、必要なものを取得するために単に正しい数学を使用するよりも単位を取り除くほうが良い選択肢であるユースケースを見たことがありません。これについて詳しく議論された Sass issue thread を参照してください。

これは賢い関数ですが、使用したい場合は、おそらく数学に問題があります。この関数に頼らないでください。代わりに数学を修正してください。

-

同じ単位の1で割る必要があります。 unit()を使用すると、数値ではなく文字列が取得されますが、ゼロを乗算して1を追加すると、必要なものが得られます。

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

うまくいきます。 strip-units(13.48cm)は_13.48_を返します。

111
Miriam Suzanne

ユニットを取り除くには、カスタムRuby関数を追加する必要があると思います( カスタム関数の追加 のドキュメントを参照してください)。これは、次のようになります。考える(警告、テストされていない):

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