Почему функция CSS calc() не работает?

Почему этот calc(100vw/4) работает, но ни один из следующих не работает?

  1. calc(100vw/4-(10-4))
  2. calc(100vw/4-(10px-4))
  3. calc(100vw/4-(10px-4px))
  4. calc(100vw/4-calc(10px-4px))

Как мне управлять выражением calc(100vw/x-(10px-x)), где x заменяется в цикле SASS для работы?


person super.t    schedule 25.10.2017    source источник
comment
CSS — это не язык программирования, поэтому на нем невозможно делать сложные вычисления, да и не должно быть.   -  person Matthias Seifert    schedule 25.10.2017
comment
Но вы можете увидеть упоминания о вложенных вычислениях здесь и там в Интернете. То есть только один оператор и никакой вложенности?   -  person super.t    schedule 25.10.2017
comment
@MatthiasS. я не согласен с тобой. Даже если CSS не является языком программирования, мы иногда можем рассмотреть возможность выполнения некоторых сложных вычислений, чтобы получить какие-то результаты. Конечно, сначала нам нужно искать простое решение, но иногда нам нужно сложное.   -  person Temani Afif    schedule 25.10.2017
comment
@TemaniAfif Если вам действительно нужно выполнять такие сложные вычисления, вам следует использовать Javascript или препроцессор, который поддерживает это и генерирует чистый CSS. CSS должен оставаться максимально простым   -  person Matthias Seifert    schedule 25.10.2017
comment
@MatthiasS. в этом случае, почему в CSS есть calc? и почему мы можем вложить calc операцию? есть причина: например, дизайнер без знаний программирования, таких как JS, сможет использовать такие вещи, чтобы делать то, что он хочет.   -  person Temani Afif    schedule 25.10.2017
comment
@MatthiasS, ребята, причина, по которой я использую calc в этом случае, заключается в том, чтобы определить некоторые значения по умолчанию, пока JS еще не запущен. Далее эти расчеты будут обрабатываться JS, когда он запустится.   -  person super.t    schedule 25.10.2017
comment
@TemaniAfif Для меня это просто разделение задач, CSS не должен производить расчеты. Но я знаю, что это может быть полезно, и это всего лишь мнение, с которым можно не согласиться.   -  person Matthias Seifert    schedule 25.10.2017


Ответы (1)


Вам нужно добавить пробелы между операторами, часто забывают их. Мы также можем вкладывать операции, используя calc столько, сколько захотим, но они эквивалентны простым скобкам.

Из документации:

Примечание. Операторы + и - должны быть окружены пробелами. Например, calc(50% -8px) будет проанализировано как процент, за которым следует отрицательная длина — недопустимое выражение, а calc(50% - 8px) — это процент, за которым следует оператор вычитания и длина. Аналогично, calc(8px + -50%) рассматривается как длина, за которой следует оператор сложения и отрицательный процент.

Операторы * и / не требуют пробелов, но их добавление для согласованности разрешено и рекомендуется.

Примечание. Разрешается вкладывать calc() функций, и в этом случае внутренние функции обрабатываются как простые круглые скобки.

.one {
  background: red;
  width: calc(100% - 150px);
  margin-top: calc(20px + calc(40px * 2)); /*Same as calc(20px + (40px * 2))*/
  height: calc(100px - 10px);
  padding: calc(5% + 10px) calc(5% - 5px);
}
<div class="one">

</div>

введите описание изображения здесь

person Temani Afif    schedule 25.10.2017
comment
Знаете ли вы, все ли браузеры поддерживают вложение calc()? - person Nicolas Hoizey; 23.07.2018
comment
@NicolasHoizey Я бы сказал да, но вы можете найти некоторые конкретные случаи ... вы можете обратиться к этой ссылке caniuse.com/ #search=calc .. раздел известных проблем - person Temani Afif; 23.07.2018
comment
Я не нашел упоминания о вложенности в CanIUse, поэтому и спросил там… ;-) - person Nicolas Hoizey; 23.07.2018
comment
@NicolasHoizey, поэтому это да, если вы не обнаружите что-то, что не работает, или вы не столкнетесь с конкретным случаем;) - person Temani Afif; 23.07.2018
comment
@NicolasHoizey Я обнаружил неработающий случай вложенного calc . (вложенный расчет внутри макс.) - person Shahryar Saljoughi; 05.08.2021