Является ли calc(--x - y)
действительным синтаксисом CSS?
Префикс --
используется для определения пользовательских свойств:
A пользовательское свойство - это любое свойство, имя которого начинается с двух черточек (U + 002D HYPHEN-MINUS), например --foo
.Продукция <custom-property-name>
соответствует этому: она определяется как любой действительный идентификатор, начинающийся с двух черточек, кроме самого --
, который зарезервирован для будущего использования CSS.Пользовательские свойства предназначены исключительно для использования авторами и пользователями;CSS никогда не даст им значения, превышающего то, что представлено здесь.
Пример использования пользовательских свойств:
:root {
--back-color: red;
}
p {
background: var(--back-color);
}
<p>Hello StackOverflow</p>
Так что в вашем случае (расчет -1 * -1 = 1
) --
недействителен.
Почему они (Semantic UI) используют его?
Файл semantic.css является результатом сценария LESS ( semantic.less ).На следующем скриншоте вы видите источник --
.Таким образом, это выглядит как ошибка или неожиданное поведение:
Давайте попробуем воспроизвести это, используя LESS.
Следующеекод создается как код semantic.less:
@test: -0.05em;
.test {
margin-left: calc(-@test);
}
, который компилируется в следующий CSS (снова с --
):
.test {
margin-left: calc(--0.05em);
}
Тот же код, но без использования calc
функция:
@test: -0.05em;
.test {
margin-left: -@test;
}
, которая компилируется в следующий CSS:
.test {
margin-left: 0.05em;
}
Как это исправить (возможное исправление)?
@test: -0.05em;
.test {
margin-left: calc(@test * -1);
}
, который компилируется в следующий CSS:
.test {
margin-left: calc(-0.05em * -1);
}
На LESS более ранней версии 3.0 математика выполняется в функции calc
.Так calc(-@test)
компилируется в calc(0.05em)
.Но поскольку LESS 3.0 в calc
математика не выполняется, поэтому calc(-@test)
компилируется в calc(--0.05em)
:
По сути, ошибка calc () была недавно исправлена, и математика не былавыполняется в пределах calc ().Но функции в calc () по-прежнему будут выполнять математические операции над своими аргументами (если только внутренняя функция также не является calc).
source: https://github.com/less/less.js/issues/3221#issuecomment-398610371