Chcę móc wykonać następujące czynności:
height: 25% - 5px;
Oczywiście, gdy to robię, pojawia się błąd:
Incompatible units: 'px' and '%'.
Chcę móc wykonać następujące czynności:
height: 25% - 5px;
Oczywiście, gdy to robię, pojawia się błąd:
Incompatible units: 'px' and '%'.
calc
...
calc
kiedy poszedłem pierwszy i nie zadziałało. Wygląda na to, że calc
nie działa w żadnej z moich przeglądarek, więc domyślam się, że najlepsza byłaby implementacja Sass.
Odpowiedzi:
Sass nie może wykonywać arytmetyki na wartościach, których nie można przekształcić z jednej jednostki na drugą. Sass nie ma sposobu, aby dowiedzieć się dokładnie, jak szerokie jest „100%” pod względem pikseli lub jakiejkolwiek innej jednostki. Wie o tym tylko przeglądarka.
Zamiast tego musisz użyć calc()
. Sprawdź zgodność przeglądarki w Czy mogę używać ...
.foo {
height: calc(25% - 5px);
}
Jeśli twoje wartości są w zmiennych, być może będziesz musiał użyć interpolacji, aby zamienić je na ciągi (w przeciwnym razie Sass spróbuje po prostu wykonać arytmetykę):
$a: 25%;
$b: 5px;
.foo {
width: calc(#{$a} - #{$b});
}
calc(25% - #{$var})
.
width: 22%
przede wszystkim width
s zcalc
Tam jest calc
funkcja zarówno w SCSS [czas kompilacji], jak i CSS [czas wykonywania]. Prawdopodobnie odwołujesz się do tego pierwszego zamiast drugiego.
Z oczywistych powodów jednostki miksujące nie będą działać w czasie kompilacji, ale będą działać w czasie wykonywania.
Możesz wymusić to drugie używając unquote
funkcji SCSS.
.selector { height: unquote("-webkit-calc(100% - 40px)"); }
$var:25%;
$foo:5px;
.selector {
height:unquote("calc( #{$var} - #{$foo} )");
}
JEŚLI znasz szerokość pojemnika, możesz zrobić tak:
#container
width: #{200}px
#element
width: #{(0.25 * 200) - 5}px
Zdaję sobie sprawę, że w wielu przypadkach #container może mieć względną szerokość. Wtedy to nie zadziała.
Przepraszamy za ożywienie starego wątku - rozciągnięcie Compassa z pseudo-selektorem: after może pasować do twojego celu - np. jeśli chcesz, aby div wypełniał szerokość od lewej do (50% + 10px) ekranu, możesz użyć (w składni z wcięciem SASS):
.example
background: red
+stretch(0, -10px, 0, 0)
&:after
+stretch(0, 0, 0, 50%)
content: ' '
background: blue
Element: after wypełnia 50% na prawo od .example (pozostawiając 50% dostępnego dla szerokości .example), a następnie .example jest rozciągane do tej szerokości plus 10 pikseli.
Po prostu dodaj wartość procentową do zmiennej i użyj #{$variable}
na przykład
$twentyFivePercent:25%;
.selector {
height: calc(#{$twentyFivePercent} - 5px);
}
Invalid property value
błąd. W każdej przeglądarce, w tym w wersji Canary Chrome.