2012-11-07 15 views
69

Chcę być w stanie wykonać następujące czynności:Sass obliczyć procent minus px

height: 25% - 5px; 

Oczywiście, gdy to zrobić pojawia się błąd:

Incompatible units: 'px' and '%'. 
+0

Co zrobić wyjście * * dostać? – cimmanon

+0

Otrzymuję błąd "Nieprawidłowy wartość właściwości". W każdej przeglądarce zawierającej kompilację Canary w Chrome. –

+0

Jeśli istnieje funkcja Sass thatd get to, co chcę to jest cool, po prostu grałem z 'calc' ... –

Odpowiedz

144

Sass nie może wykonywać działania arytmetyczne na wartościach, które nie mogą zostać przekształcone z jednej jednostki na drugą. Sass nie ma możliwości dowiedzenia się, jak szeroki jest "100%" pod względem pikseli lub jakiejkolwiek innej jednostki. To jest coś, o czym wie tylko przeglądarka. W tym celu należy użyć calc(). Check browser compatibility on Can I use...

.foo { 
    height: -webkit-calc(25% - 5px); 
    height: -moz-calc(25% - 5px); 
    height:   calc(25% - 5px); 
} 

Jeśli wartości są zmienne, może trzeba użyć interpolacji przekształcić je w ciągi (inaczej Sass tylko próbuje wykonywać działania arytmetyczne):

$a: 25%; 
$b: 5px; 

.foo { 
    width: -webkit-calc(#{$a} - #{$b}); 
    width: -moz-calc(#{$a} - #{$b}); 
    width:   calc(#{$a} - #{$b}); 
} 
+5

Powiedziałbym, że calc () w ogóle nie działa w większości przeglądarek. Platformy mobilne są tak samo ważne jak komputery stacjonarne. – dalgard

+2

Nie ma tam argumentu, ale licz przeglądarki! Więcej wsparcia dla calc() niż nie, a jeszcze więcej go wesprze w najbliższej przyszłości! – chrisgonzalez

+3

Miałem szerokość problemów przy użyciu zmiennej wewnątrz funkcji calc, ale znaleziono tutaj: http: // stackoverflow.com/questions/13542164/using-variables-in-sass-percentage-function, z której mógłbym odwołać się do zmiennej takiej jak ta: 'calc (25% - # {$ var})'. – mlunoe

2

IF Znasz szerokość pojemnik, możesz zrobić tak:

#container 
    width: #{200}px 
    #element 
    width: #{(0.25 * 200) - 5}px 

Mam świadomość, że w wielu przypadkach #container może mieć relat ive szerokość. Wtedy to by nie działało.

2

Przepraszamy za odświeżenie starego wątku - odcinek Kompasu z: pseudo-selektorem może odpowiadać twoim celom - np. jeśli chcesz div aby wypełnić szerokość od lewej do (50% + 10px) z ekranu można użyć (w składni wcięte Sass):

.example 
    background: red 
    +stretch(0, -10px, 0, 0) 
    &:after 
     +stretch(0, 0, 0, 50%) 
     content: ' ' 
     background: blue 

: po elementem wypełnienia 50% po prawej .example (pozostawiając 50% dostępnych dla .przykładowej szerokości), wtedy. Przykład jest rozciągnięty do tej szerokości plus 10 pikseli.

+1

Czy jest gdzieś mniej miejsca na miksowanie? calc w ogóle nie działa dobrze. – v3nt

11

Istnieje funkcja calc w obu SCSS [czas kompilacji] i CSS [run-time]. Najprawdopodobniej powołujesz się na te pierwsze zamiast na drugie.

Z oczywistych względów jednostki miksujące nie będą działać podczas kompilacji, ale w czasie wykonywania.

Można wymusić drugi z nich za pomocą funkcji unquote, SCSS.

.selector { height: unquote("-webkit-calc(100% - 40px)"); } 
5
$var:25%; 
$foo:5px; 
.selector { 
    height:unquote("calc(#{$var} - #{$foo})"); 
} 
+1

Dziękujemy za zamieszczenie odpowiedzi na to pytanie! Odpowiedzi tylko na kod są zniechęcane do przepełnienia stosu, ponieważ zrzut kodu bez kontekstu nie wyjaśnia, jak i dlaczego rozwiązanie będzie działać, utrudniając oryginalnemu plakatowi (lub przyszłym czytelnikom) zrozumienie logiki stojącej za nim. Edytuj swoje pytanie i dołącz objaśnienie kodu, aby inni mogli skorzystać z Twojej odpowiedzi. Dzięki! –

+0

To mnie uratowało. width: unquote ("calc (100% - # {$ leftnav-width})"); – httpete

Powiązane problemy