Hatena::ブログ(Diary)

Cyokodog :: Diary

June 23, 2008

画像ファイルなしでグラデーションを可能にするCSS生成ツール公開しました

画像ファイルを使用しないでグラデーションをかける方法を調べてみました。まずIE専用な書き方になりますが、

filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#5588ff,EndColorStr=#ffffff);

のような記述でグラデーションがかけられます。確かExt.jsのWindowのドロップシャドウにも使用されてたと思います。次にIE以外のモダンブラウザですが、

background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAAP0lEQVQYlWMI7fj/n4mRkYGBiQlOIHGZULkIJUwk6ECTRRfDYh6SEiJ1oDsSpzNIdzhei0gKCCJ0YLWDukEHAGMABL+MSJMfAAAAAElFTkSuQmCC");

っていう記述でグラデーションをかけられるようです。こんな感じになります。

f:id:cyokodog:20080623235106p:image

↑こちらは画像ファイルを使用してます。画像ファイルを使用してないサンプルページはこちらです。

IEの方は、StartColorStrとEndColorStrに任意の色を設定すれば良さそうですが、モダンブラウザの方は、iVBORw0K...の部分がどう書いていいかわかりません。

調べてみたところFirefoxなどで実装されているCanvasオブジェクトのメソッドであるtoDataURLを使用すると取得できるようです。(ちなみSafariの場合、CanvasオブジェクトはあるのですがtoDataURLメソッドが無いのでこの値が取得できません。)

これを応用して、画像ファイルを使用せずグラデーションをかけるCSSを生成するオンラインツールを作ってみました。

f:id:cyokodog:20080623123222p:image

Gradient CSS Generator(こちらからどうぞ)

ただ上記のような理由で、クロスブラウザCSS定義を出力するにはFirefoxOperaでこのツールを使用する必要があります(IE専用なCSS定義で良いなら他のブラウザでも問題ありません)。Firefox等が使用できない環境でクロスブラウザCSSを取得したい場合は、事前にサイトのHTML/CSS/Javascriptダウンロードしておいて、それをAptanaFirefoxのPreview機能を経由して実行するという手もあります...オンラインツールと言ってもJavascriptしか使ってませんので...

私のようにペイントしか使用が許されてない環境の方には便利かなと思い公開してみました。...と言っても、そういう環境で仕事されてる方にはあまり需要はなさそうですけど。

もしよかったら使ってやってください。

かつみかつみ 2008/11/02 20:48 Gradient CSS Generator使わせていただきました。
すごく簡単で、感動しました!

縦方向ではなく、横方向のグラデーションも
作りたいのですが、その場合はどうすれば
よろしいでしょうか?

cyokodogcyokodog 2008/11/03 17:31 IEの場合でしたら、Microsoft.Gradient(GradientType=0 の0の部分を1とすれば横になります。
他のブラウザの場合は、グラデーションを生成してる側のロジックに手を加える必要があります。ちなみにソースはこちら↓でみれます。
http://okyuu.com/ja/tips/3406
このソースの中でcreateLinearGradient(0,0,0,len)としてる箇所があるのですが、これをcreateLinearGradient(0,0,len,0)とすると横方向のグラデーションになるようです。
サイトの方は放置状態ですが、微妙にアクセスがあるみたなので、時間のある時に機能追加してみたいと思います。

manman 2009/10/16 16:21 とても便利でいつも使わせてもらっています。
ありがとうございます。

あと、横方向のグラデーションですが、createLinearGradient(0,0,len,0)と指定しても
横方向へグラデーションしません。

大変あつかましい願いなのですが、
よろしければ、教えていただけますか?

cyokodogcyokodog 2009/10/16 21:08 すいません。ローカル環境で確認したところ
createLinearGradient(0,0,len,len)
の誤りでした
あと
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,
となってるところを
progid:DXImageTransform.Microsoft.Gradient(GradientType=1,
としてください。

manman 2009/10/18 12:37 ご返答、ありがとうございます。とても感謝しております。

すみません。
こちらでcreateLinearGradient(0,0,len,len)にしてローカル環境で試してみたのですが、Firefox3.5.3では縦方向のグラデーションになってしまいます。
何か別に変更しなければいけない箇所があるのでしょうか?

IE7では横グラデーションになりました。
ありがとうございます。

cyokodogcyokodog 2009/10/20 00:07 よく確認したらもろもろ修正が必要でした。
とりあえず以下 URL に(即席ですが)水平方向グラデーションを生成する機能を作りましたので、こちらをご利用ください。
http://cyokodog.web.fc2.com/cyokolab/html/gradient_css_generator_w.html

manman 2009/10/20 16:27 お世話になっております。
すいません、わざわざ作っていただいたみたいで。
お手数をお掛けして申し訳ありません。

さっそく、水平方向グラデーションを試してみました。
Firefox3.5.3でうまく表示されました。

本当にありがとうございます。言葉では感謝しきれません。
これからも使わせていただきますね。

charucharu 2009/11/21 16:16 困っています。ご教授下さい!

以下がCSSの一部で、HP左にメニューボタンがあり、その背景を水色から白の横のグラデーションをかけたいと思っています。

いろいろ検索し、コピペするのですが、真っ白になってしまい、進ません。

たぶん、コピペする場所が悪いのだと思うのですが・・・

以下のようにあり、b01の部分の背景を変えたいので、

2行目 background-color: #45B5E9;の部分を

.background_B9E6FB_ffffff_h300{
filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#B9E6FB,EndColorStr=#ffffff);
;
background-repeat:repeat-x;
background-color:#ffffff;
}

こちらで作らせて頂いた内容をコピペしてみたのですが、真っ白になります。前後の関係で変えないといけないとかでしょうか?CSSを全く理解しておらず、こんな質問で申し訳ございません。よろしくお願いします。


.b01 {
background-color: #45B5E9;
}

.b02 {
background-color: #45B5E9;
}

cyokodogcyokodog 2009/11/22 00:39 横方向のグラデーションは対応してなかったのですが、他の方からも要望があったので即席ですが以下URLより横方向グラデーションを生成できるようにしました。

http://cyokodog.web.fc2.com/cyokolab/html/gradient_css_generator_w.html

IE 以外のブラウザにもグラデーションを適用したい場合は、Firefox でコードの生成を行ってください。
以下に縦/横方向にグラデーションをかけたサンプルを用意したのでソースを参考にしてみてください。

http://cyokodog.appspot.com/lab/QA/gradient_css_generator/gradient01a.html

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証