Я хочу иметь возможность сделать следующее:
height: 25% - 5px;
Очевидно, когда я это делаю, я получаю ошибку:
Incompatible units: 'px' and '%'.
Я хочу иметь возможность сделать следующее:
height: 25% - 5px;
Очевидно, когда я это делаю, я получаю ошибку:
Incompatible units: 'px' and '%'.
Sass не может выполнять арифметику по значениям, которые не могут быть преобразованы из одного устройства в другое. Сасс не знает точно, насколько широкие "100%" - это пиксели или любая другая единица. Это то, что знает только браузер.
Вместо этого вам нужно использовать calc()
. Проверьте совместимость браузера. Могу ли я использовать...
.foo {
height: -webkit-calc(25% - 5px);
height: -moz-calc(25% - 5px);
height: calc(25% - 5px);
}
Если ваши значения находятся в переменных, вам может потребоваться использовать интерполяцию, чтобы превратить их в строки (иначе Sass просто пытается выполнить арифметику):
$a: 25%;
$b: 5px;
.foo {
width: -webkit-calc(#{$a} - #{$b});
width: -moz-calc(#{$a} - #{$b});
width: calc(#{$a} - #{$b});
}
В SCSS [время компиляции] и CSS [время выполнения] существует функция calc
. Вероятно, вы ссылаетесь на первую, а не на последнюю.
По понятным причинам устройства смешения не будут работать во время компиляции, но будут работать во время выполнения.
Вы можете принудительно использовать последнее, используя unquote
, функцию SCSS.
.selector { height: unquote("-webkit-calc(100% - 40px)"); }
$var:25%;
$foo:5px;
.selector {
height:unquote("calc( #{$var} - #{$foo} )");
}
IF, вы знаете ширину контейнера, вы можете сделать следующее:
#container
width: #{200}px
#element
width: #{(0.25 * 200) - 5}px
Я знаю, что во многих случаях #container может иметь относительную ширину. Тогда это не сработает.
Извините за восстановление старого потока - растяжка компаса с: после того, как псевдоселектор может соответствовать вашей цели - например. если вы хотите, чтобы div заполнил ширину слева на (50% + 10 пикселей) экрана, которую вы могли бы использовать (в синтаксисе с отступом SASS):
.example
background: red
+stretch(0, -10px, 0, 0)
&:after
+stretch(0, 0, 0, 50%)
content: ' '
background: blue
Элемент: after заполняет 50% справа от .example(оставляя 50% доступным для ширины .example), затем .example растягивается до этой ширины плюс 10 пикселей.
Просто добавьте процентное значение в переменную и используйте, например, #{$variable}
$twentyFivePercent:25%;
.selector {
height: calc(#{$twentyFivePercent} - 5px);
}