Функция Calc () внутри другого calc () в CSS

Как использовать функцию CSS calc внутри другой функции CSS calc? согласно этому сообщению ("https://developer.mozilla.org/en-US/docs/Web/CSS/calc") это возможно, но нет примера этого.

3 ответов


можно использовать calc () внутри другого calc ().

пример:

div{
  width: calc(100% - (1% + 30px));/* calc(1% + 30px) is nested inside calc()*/
}
div p{
  width: calc(100% - 30px);/*100% is total width of the div*/
}

обновление вложенный calc с переменными css:

.foo {
  --widthA: 100px;
  --widthB: calc(var(--widthA) / 2);
  --widthC: calc(var(--widthB) / 2);
  width: var(--widthC);
}

после того, как все переменные будут расширены, значение widthC будет calc( calc( 100px / 2) / 2), а затем, когда оно назначено .свойство ширины foo, все внутренние calc () s (независимо от того, насколько глубоко вложены)будет сглажен до круглых скобок, поэтому ширина значение свойства будет в конечном итоге calc ((100px / 2) / 2), т. е. 25px. Короче говоря: calc () внутри calc () идентичен только скобкам.

таким образом, текущая спецификация также доказывает это, используя круглые скобки внутри calc (), является вложенным calc.

Узнайте больше о переменных css здесь.


Я один из редакторов спецификации Values & Units, которая определяет calc().

calc ()должны быть гнездящимся внутри calc (). Некоторое время в грамматике/определениях была оплошность, что технически не разрешил, но я недавно исправил это. Реализации еще не догнали, насколько мне известно (tho похоже, что Chrome 51 и Firefox 48 будут иметь это исправлено, Ву!).

Это ноль причина в выражения nest calc () обычно - они в точности просто используя круглые скобки. Единственная причина делать это вообще при использовании пользовательских свойств/переменных.


ссылка, которую вы процитировали, по общему признанию, немного запутана.

это не можно использовать внутри calc.

из спецификаций здесь:http://dev.w3.org/csswg/css-values/#calc-notation

...Компонентами выражения calc() могут быть литеральные значения, attr () или выражения calc() или значения..

вы можете calc выражение внутри выражения, но не calc() сама функция.

и пример приведен в этом ref для вложенных выражений:

width: calc(100%/3 - 2*1em - 2*1px);

и несколько calc для нескольких свойств:

margin: calc(1rem - 2px) calc(1rem - 1px);

синтаксис из спецификации выше:

синтаксис функции calc ():

<calc()> = calc( <calc-sum> ) 
<calc-sum> = <calc-product> [ [ '+' | '-' ] <calc-product> ]* 
<calc-product> = <calc-value> [ '*' <calc-value> | '/' <number> ]* 
<calc-value> = <number> | <dimension> | <percentage> | ( <calc-sum> ) 

где - это измерение.

кроме того, пробелы требуются с обеих сторон + и - операторы. (*И / operaters можно использовать без пробелов вокруг них.)

UAs должен поддерживать выражения calc() не менее 20 терминов, где каждый Число, измерение или процент-это термин. Если выражение calc() содержит больше, чем поддерживаемое количество терминов, его необходимо обработать как будто он был недействителен.

.