SCSSのmixinで背景グラデーションを出力しようとしたときにうまくいかなかったのでメモ。
普通にmixinの変数を利用して、
ColorZillaのグラデーションジェネレータのCSSを参考にこんな感じで書いてたんだけど
@mixin bgGrad($gradColStr, $gradColEnd) { background: $gradColStr; background: -moz-linear-gradient(top, $gradColStr 0%, $gradColEnd 100%); background: -webkit-linear-gradient(top, $gradColStr 0%, $gradColEnd 100%); background: linear-gradient(to bottom, $gradColStr 0%, $gradColEnd 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$gradColStr',endColorstr='$gradColEnd',GradientType=0); } .heading { @include bgGrad( $gradColStr: #FF0000, $gradColEnd: #000000 ); }
これで出力されたCSSを見たら
.heading { background: #FF0000; background: -moz-linear-gradient(top, #FF0000 0%, #000000 100%); background: -webkit-linear-gradient(top, #FF0000 0%, #000000 100%); background: linear-gradient(to bottom, #FF0000 0%, #000000 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$gradColStr',endColorstr='$gradColEnd',GradientType=0); }
IE用のfilterに書いた変数がちゃんと出力されてなかった。
引用符で囲んでるから出てこないのかなーと思って、取ってみたけど変わらず。
いろいろSCSSの書き方ってのを見ているうちに、
「指定した色を、IE独自実装のfilterプロパティで利用できる形式に変換」するっていうのを見つけて、
あてはめてみたらうまくいった!
改訂版がこちら
@mixin bgGrad($gradColStr, $gradColEnd) { background: $gradColStr; background: -moz-linear-gradient(top, $gradColStr 0%, $gradColEnd 100%); background: -webkit-linear-gradient(top, $gradColStr 0%, $gradColEnd 100%); background: linear-gradient(to bottom, $gradColStr 0%, $gradColEnd 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($gradColStr)}',endColorstr='#{ie-hex-str($gradColEnd)}',GradientType=0); } ↓ .heading { background: #FF0000; background: -moz-linear-gradient(top, #FF0000 0%, #000000 100%); background: -webkit-linear-gradient(top, #FF0000 0%, #000000 100%); background: linear-gradient(to bottom, #FF0000 0%, #000000 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFF0000',endColorstr='#FF000000',GradientType=0); }
(filterはhexの頭に「FF」を付けないといけない模様。)
一応、compassのmixinではどう記述されているかも調べてみたら、
filter用にやっぱり「ie-hex-str()」は使っている模様。