Отключить LESS-CSS Overwriting calc () [дубликаты]

380

Сейчас я пытаюсь сделать это в CSS3 в моем коде LESS:

width: calc(100% - 200px);

Однако, когда компиляция LESS выводит это:

width: calc(-100%);

Есть ли способ сообщить LESS не компилировать его таким образом и нормально выводить его?

  • 0
    Я думал, что мое решение уже было довольно уродливым взломом, но самый недооцененный обман использует практически тот же взлом, что и мой, так что я думаю, что не так много других (более чистых) способов. :P
  • 0
    Спасибо за ваш ответ. Из-за того, что у меня Less производства, я потерял много времени на эту проблему, но ваш ответ решил мою проблему.
Показать ещё 1 комментарий
Теги:
less
css-calc

5 ответов

739
Лучший ответ

С помощью экранированная строка (значение экранированного a.k.a.):

width: ~"calc(100% - 200px)";

Кроме того, если вам нужно смешать Less math с экранированными строками:

width: calc(~"100% - 15rem +" (10px+5px) ~"+ 2em");

Скомпилируется:

width: calc(100% - 15rem + 15px + 2em);

Это работает как меньше объединяет значения (экранированные строки и результат математики) с пробелом по умолчанию.

  • 9
    Спасибо за отличный ответ! Работает как шарм!
  • 0
    Спасибо :) больше персонажей
Показать ещё 13 комментариев
63

Помимо использования escape-значения, описанного в моем другом ответе, также можно исправить эту проблему, включив Strict Math.

При строгой математике будут обработаны только математические данные, которые находятся внутри ненужных круглых скобок, поэтому ваш код:

width: calc(100% - 200px);

Работает так, как ожидалось, при включенной строгой математике.

Однако, обратите внимание, что Strict Math применяется глобально, а не только внутри calc(). Это означает, что если у вас есть:

font-size: 12px + 2px;

Математика больше не будет обрабатываться Less - она ​​выведет font-size: 12px + 2px, что, очевидно, недействительно CSS. Вам придется обернуть все математические данные, которые должны обрабатываться с помощью скобок "Меньше" (ранее ненужных):

font-size: (12px + 2px);

Strict Math - отличный вариант для рассмотрения при запуске нового проекта, иначе вам, возможно, придется переписать хорошую часть базы кода. Для наиболее распространенных случаев использования подход с экранированной строкой, описанный в другом ответе, более подходит.

  • 7
    Это заслуживает большего внимания ..
  • 5
    Чтобы включить строгую математику, например, в gulp, передайте следующую опцию: less({strictMath: true})
23

Здесь кросс-браузер меньше mixin для использования CSS calc с любым свойством:

.calc(@prop; @val) {
  @{prop}: calc(~'@{val}');
  @{prop}: -moz-calc(~'@{val}');
  @{prop}: -webkit-calc(~'@{val}');
  @{prop}: -o-calc(~'@{val}');
}

Пример использования:

.calc(width; "100% - 200px");

И CSS, которые выводят:

width: calc(100% - 200px);
width: -moz-calc(100% - 200px);
width: -webkit-calc(100% - 200px);
width: -o-calc(100% - 200px);

Кодек в этом примере: http://codepen.io/patrickberkeley/pen/zobdp

  • 0
    выдает ParseError: Syntax Error on line 2
  • 0
    @ TomRoggero, какую версию меньше вы используете? Какова остальная часть вашего окружения? Я обновил исходный ответ, чтобы включить рабочий пример.
Показать ещё 2 комментария
11

Пример для экранированной строки с переменной:

@some-variable-height: 10px;

...

div {
    height: ~"calc(100vh - "@some-variable-height~")";
}

компилируется в

div {
    height: calc(100vh - 10px );
}
  • 0
    Именно то, что я искал, ты для размещения вашего ответа
  • 0
    ... в то время как синтаксис SCSS будет что-то вроде высоты: calc (100vh - # {$ some-variable-height})
6

Решения Fabricio прекрасно работают.

Очень распространенная функция вычисления calc добавляет 100% ширину и добавляет некоторый запас вокруг элемента.

Можно сделать это с помощью

@someMarginVariable: 15px;

margin: @someMarginVariable;
width: calc(~"100% - "@someMarginVariable*2);
width: -moz-calc(~"100% - "@someMarginVariable*2);
width: -webkit-calc(~"100% - "@someMarginVariable*2);
width: -o-calc(~"100% - "@someMarginVariable*2);

Или можно использовать mixin как:

.fullWidthMinusMarginPaddingMixin(@marginSize,@paddingSize) {
  @minusValue: (@marginSize+@paddingSize)*2;
  padding: @paddingSize;
  margin: @marginSize;
  width: calc(~"100% - "@minusValue);
  width: -moz-calc(~"100% - "@minusValue);
  width: -webkit-calc(~"100% - "@minusValue);
  width: -o-calc(~"100% - "@minusValue);
}
  • 0
    нп впрочем я думаю пример патрикберкелей лучше моего;)
  • 0
    Какой смысл смешивать calc с margin?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню