Подтвердить что ты не робот

Как вы удаляете устройство из любого числа в SASS?

Я знаю, что вы можете отделять единицы от чисел в SASS, когда вы знаете устройство раньше, чем это:

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

Но можно ли вырезать блок из числа, не зная, что устройство первым?

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

@warn strip-unit(16px); // 16
4b9b3361

Ответ 1

-

UPDATE: Вам никогда не понадобится использовать эту функцию. Сасс-математика очень умна в отношении единиц, и я никогда не видел прецедента, в котором блокирующие устройства были лучшим вариантом, чем просто используя правильную математику, чтобы получить то, что вам нужно. См. поток Sass issue, где это было подробно обсуждено.

Это умная функция, но если вы когда-нибудь захотите ее использовать, вероятно, проблема с вашей математикой. Не возвращайтесь к этой функции. Исправьте свою математику.

-

Вам нужно разделить на 1 единицы. Если вы используете unit(), вы получаете строку вместо числа, но если вы умножаетесь на ноль и добавляете 1, у вас есть то, что вам нужно:

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

Это работает. strip-units(13.48cm) вернет 13.48.

Ответ 2

Я думаю, вам нужно добавить пользовательскую функцию Ruby для разделения блоков (см. документацию на добавление пользовательских функций). Это будет выглядеть примерно так, я думаю (предупреждение, непроверено):

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