можно считать выражением, так как это как сказать

ько что прочитал о функции CSScalc() в сети разработчиков Mozilla.

Первый пример вэта статья использует следующий код CSS:

.banner {
  position: absolute;
  left: calc(40px);
  width: calc(100% - 80px);
  border: solid black 1px;
  box-shadow: 1px 2px;
  background-color: yellow;
  padding: 6px;
  text-align: center;
  box-sizing: border-box;
}

И эта разметка HTML:

<div class="banner">This is a banner!</div>

Простите, если это чересчур тривиальный вопрос, но есть ли причина использоватьleft: calc(40px) или это просто ошибка? Поскольку вычислять нечего, я бы просто поставилleft: 40px;.

 Li35719 дек. 2017 г., 14:47
Да, это не нужно.
 Lucas19 дек. 2017 г., 14:50
Если честно, весь этот пример немного странный. Я бы просто использовалleft: 40px; а такжеright: 40px; за тот же результат.
 Joe Clay19 дек. 2017 г., 14:48
MDN - это вики - возможно, вы могли бы это исправить :)
 James Thorpe19 дек. 2017 г., 14:48
Оглядываясь назад в историю,изначально не-calc на основе резервных свойств тоже. Похоже, он датируется с тех пор, поэтому фиксированный40px будет соответствовать фактическомуcalc свойство, то есть оно основано либо на процентах, либо на пикселях в зависимости от того, что поддерживает браузер
 domsson19 дек. 2017 г., 14:51
Я мог только представить, что это на месте, чтобы показать, чтоcalc() может - теоретически - использоваться таким образом, даже если это не имеет большого значения на практике.

Ответы на вопрос(2)

calc() предназначен для использования с выражениями, и40px это значение, а не выражение. С помощьюcalc() с ценностью бессмысленно и расточительно ресурсов. Я понятия не имею, почему это есть в примере, но, скорее всего, это ошибка.

Примечание: использованиеcalc() с единичными значениями, как описаноBoltClock ответ это взломать Это может быть полезно в некоторых случаях, но это не первоначальное намерениеcalc().

 domsson19 дек. 2017 г., 14:54
Хм, я всегда думалзначение было выражением, слишком?
 Racil Hilan19 дек. 2017 г., 15:22
Я думаю, что вы неправильно истолковали документы. Одно только значение не является выражением, но есть выражения, которые имеют только одно значение. Пример: в этом выраженииvar x = 5;, Значение5 само по себе это не выражение, ноx = 5 является. Точно так же, если мы возьмем пример в этом вопросе, значение40px это не выражение, ноcalc(40px) является. Такжеleft: 40px можно считать выражением, так как это как сказатьleft = 40px.
 domsson19 дек. 2017 г., 15:14
Читая Википедию и документы Microsoft, у меня складывается другое впечатление. Это сделало меня достаточно любопытным на самом делезадать это как вопрос здесь, на SO.
Решение Вопроса

calc(40px) эквивалентно40px, Не ясно, действительно ли этот пример должен был продемонстрировать именно это, и если да, то почему он чувствовал необходимость сделать это, поскольку это явно не такcalc() был предназначен для использования.

Возможно, это способ скрытьleft объявление от старых браузеров, которые не понимаютcalc(), так как браузеры, которые не понимают это, будут игнорироватьwidth декларация, но по-прежнему применяетсяleft: 40px (безcalc()) декларация, с неблагоприятными последствиями. Но это только обоснованное предположение с моей стороны. Это именно та ситуация@supports был создан для; однако, так какcalc() предварительные даты@supports на несколько лет, @supports не может быть использован здесь, и поэтому единственный другой вариант - воспользоваться CSSвполне определенный правила обработки ошибок.

(На самом деле, я недавно создал хак CSS, который использует одинокийcalc(0s) выражение дляскрыть правила от старых версий Firefox, Как ни странно, это выражение находится в@supports функциональный запрос, так как Firefox представил поддержкуcalc() со значениями <time> несколько летпосле @supports.)

 Federico klez Culloca19 дек. 2017 г., 14:51
Глядя на комментарии в ревизии, связанные @JamesThorpe, я думаю, что вы правы насчет негативных последствий неинтерпретацииcalc

Ваш ответ на вопрос