2010-07-29 8 views
16

Próbuję zrobić przycisk wstawek tak:Sass Mixin Błąd na konkretne filtry IE jak -ms filtrem

=default_button(!lighter, !darker) 
    :border= 1px !lighter solid 
    :background-color #e3e3e3 
    :background= -webkit-gradient(linear, 0 0, 0 100%, from(!lighter), to(!darker)) repeat-x, #d0581e 
    :background= -moz-linear-gradient(90deg, !darker, !lighter) repeat-x scroll 0 0 #d0581e 
    :filter= progid:DXImageTransform.Microsoft.gradient(startColorstr='!lighter', endColorstr='!darker') 
    :-ms-filter= "progid:DXImageTransform.Microsoft.gradient(startColorstr='!lighter', endColorstr='!darker')" 
    :zoom 1 
    :margin 0 0 0 0 
    :width auto 
    :padding 2px 14px 2px 14px 
    :border-radius 10px 
    :-webkit-border-radius 10px 
    :-moz-border-radius 10px 
    :color #FFF 

Kiedy skompilować Sass, otrzymuję ten błąd na linii począwszy - filtr i -ms filtr:

SASS::SyntaxError: Expected rparen token, was single_eq token

Jestem pewien, że moja rozmieszczenie = 's, ale nie jestem do końca pewien, jak napisać go poprawnie. To działa, gdy mijam wartości hex zamiast lżejsze, ciemniejszy, bo wtedy mogę usunąć znak = tak:!

:filter progid:DXImageTransform.Microsoft.gradient(startColorstr='#F89F16', endColorstr='#d0581e') 
:-ms-filter "progid:DXImageTransform.Microsoft.gradient(startColorstr='#F89F16', endColorstr='#d0581e')" 

Odpowiedz

36

rozwiązany w ten sposób, ale wciąż szuka alternatywnych propozycji na najlepszej drodze. ..

=default_button(!lighter, !darker) 
    text-shadow= 1px 1px 3px darken(!darker, 8) 
    border= 1px !darker solid 
    background-color= !lighter 
    background= -webkit-gradient(linear, 0 0, 0 100%, from(!lighter), to(!darker)) repeat-x, !darker 
    background= -moz-linear-gradient(90deg, !darker, !lighter) repeat-x scroll 0 0 !darker 
    -ms-filter = "progid:DXImageTransform.Microsoft.gradient(startColorstr='#{!lighter}', endColorstr='#{!darker}')" 
    :zoom 1 
    :margin 0 0 0 0 
    :width auto 

Składnia Sassa uległa zmianie od czasu pierwotnej publikacji tej odpowiedzi. The (wcięcie) składnia nowoczesny Sass wygląda następująco:

=default_button($lighter, $darker) 
    text-shadow: 1px 1px 3px darken($darker, 8) 
    border: 1px $darker solid 
    background-color: $lighter 
    background: -webkit-gradient(linear, 0 0, 0 100%, from($lighter), to($darker)) repeat-x, $darker 
    background: -moz-linear-gradient(90deg, $darker, $lighter) repeat-x scroll 0 0 $darker 
    -ms-filter: unquote("progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$lighter}', endColorstr='#{$darker}')") 
    zoom: 1 
    margin: 0 0 0 0 
    width: auto 
+6

upvote dla składni # {...}. Potrzebny do tego, aby SASS zastąpił zmienne dla argumentów startColorstr/endColorstr filtru gradientowego MS w SASS 3.1.10. Oznacza to, że startColorstr = $ foo nie zadziała (jak w nim nie zastąpi $ foo), ale startColorstr = # {$ foo}. – voetsjoeba

+1

dzięki .. mój gradient był niebieski do czarnego (tj. Domyślny) przed tym haha ​​.. dzięki znowu – Orlando

+0

Jeśli twoje kolory mają przezroczystość alfa (rgba), to ta metoda nie będzie działać. Będziesz musiał użyć [odpowiedź Matthiasa Daileya] (http://stackoverflow.com/a/11941400/1652962) poniżej. – cimmanon

11

Interpolacja #{} nie działa czasami, ponieważ skraca wartości kolorów szesnastkowych. Na przykład skróci to #334455 do #345, co spowoduje przerwanie składni filtru.

SASS ma nową funkcję w wersji 3.2: ie-hex-str().

Oto jak mam go do pracy:

filter: unquote("progid:DXImageTransform.Microsoft.gradient(startColorstr='") 
+ ie-hex-str($start) 
+ unquote("', endColorstr='") 
+ ie-hex-str($stop) 
+ unquote("',GradientType=0)"); /* IE6-9 */ 
+1

Czy to nadal prawda? Właśnie przetestowałem interpolację na moim mixinie i nie wydawało mi się, żebym skracał moją wartość koloru szesnastkowego. –

+0

Kyle, idk, w której wersji SASS jesteś? –

+0

Mam na 3.3.7 (bieżący) –