2012/09/06追記: 現在 Windows版も対応されています。
fontのプロパティ各種にも対応されています。
詳しくは最新の記事にて確認して下さい。
最近はCSS3によってリッチなUIを作成できるようになりましたが、
Photoshopで作成されたデザインを元に
CSSを作成するのはなかなか手間で、
PhotoshopでCSSを書き出せたら楽なのに…
と思う方も多いのではないかと思います。
それを実現してくれたPhotoshopプラグインがあったので紹介します。
先日このページを見つけて、
サイト内に設置してあるフォームにメールを送って
そのまま何も無かったので忘れかけていたところ、
『CSS Hat is launching』
というメッセージが届いていて、
購入するためのリンクが届いていました。
30%オフの$19.90(通常は$29.99)で購入出来るとのことだったので
モノは試しという感じで購入してみました。
購入方法はGumroadです。
なのでクレジットカードが無いと決済ができません。
あと今のところAdobe Photoshop CS4以降のバージョン、
CS5からサポートされている(後々対応?)とのことなので、
注意してください。
Windowsにも今のところは対応していません。
インストール開始前はPhotoshopを終了させておきます。 決済完了後、dmgがダウンロード出来るページが送られてくるので、 インストール完了後、再びPhotoshopを立ち上げると、インストール
ダウンロード完了後dmgをダブルクリック、
表示されたウィンドウの真ん中にあるアイコンをダブルクリック。
インストールが開始されます。
ウィンドウ→エクステンションの中にCSS Hatが追加されています。
CSS Hatを選択するとウィンドウが立ちあがります。
ここにCSSが反映されます。
実際に使ってみました。
シェップツールを使ってボタンっぽいものを作っていきます。
CSS hatウィンドウに今の置いた長方形のCSSが反映されました。
一気にプロパティが増えました。 この記事の最後にも書きましたが、 なので、チームで利用することになった場合、実際にCSS3で作られたボタンを作ってみる
とりあえずどのように動作、利用するのかを説明していきます。
角丸長方形ツールで横長の長方形を置いてみます。
丸みで指定した3pxがウィンドウに反映されていますね。
次にレイヤースタイルを設定してみます。
出力はリアルタイムにcss hatのウィンドウに反映されます。
box-shadowやグラデーションのCSS調整は面倒なので
これは便利かもしれませんね。
ここで、CSS Hatのウィンドウに警告文が表示されたのなら
それは対応していない効果などがあるということです。
ブレンドモードには一切対応していません。
レイヤースタイル内で使用していても同様で、
対応していないとの警告がでます。
ブレンドモードを切って作成するというルールを作って
共有しておかないと、デザインとコーディング時で外見が変わって
問題になるかもしれないので注意が必要です。
CSS hatウィンドウの下の方にいくつか選択できる項目があります。 そのままです。これを押すことでクリップボードにコピーされますので、
そのまま貼りつけをすることで表示されているコードがコピーされます。 何に対してのスタイル文なのかをコメントで表記してくれます。その他のサポート機能
これらを簡単に説明していきます。
border-radius: 3px; / from vector shape /
background-clip: padding-box; / prevents bg color from leaking outside the border /
background-color: #dedede; / layer fill content /
box-shadow:
2px 2px 6px rgba(177,177,177,.75) / drop shadow /,
inset 1px 1px 9px rgba(48,48,48,.1) / inner shadow /,
inset 0 0 0 rgba(250,250,250,.75) / inner glow /;
border: 1px solid rgba(125,159,123,.65); / inner stroke /
background-image: linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%); / gradient fill /
出力されているCSSに対してベンダープレフィックスを付加するかどうかを選択できます。
グラデーションオーバーレイを利用している場合、
これをチェックすることにより、データスキームで書かれた
SVGのグラデーションコードも追加されます。
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-background-clip: padding;
-webkit-background-clip: padding-box;
background-clip: padding-box;
background-color: #dedede;
-moz-box-shadow:
2px 2px 6px rgba(177,177,177,.75),
inset 1px 1px 9px rgba(48,48,48,.1),
inset 0 0 0 rgba(250,250,250,.75);
-webkit-box-shadow:
2px 2px 6px rgba(177,177,177,.75),
inset 1px 1px 9px rgba(48,48,48,.1),
inset 0 0 0 rgba(250,250,250,.75);
box-shadow:
2px 2px 6px rgba(177,177,177,.75),
inset 1px 1px 9px rgba(48,48,48,.1),
inset 0 0 0 rgba(250,250,250,.75);
border: 1px solid rgba(125,159,123,.65);
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PGxpbmVhckdyYWRpZW50IGlkPSJoYXQwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjEwMCUiIHgyPSI1MCUiIHkyPSIwJSI+CjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM0OWE2NDkiIHN0b3Atb3BhY2l0eT0iMSIvPgo8c3RvcCBvZmZzZXQ9IjYwJSIgc3RvcC1jb2xvcj0iI2I1Y2IzZCIgc3RvcC1vcGFjaXR5PSIxIi8+CjxzdG9wIG9mZnNldD0iOTAlIiBzdG9wLWNvbG9yPSIjZWJmN2M3IiBzdG9wLW9wYWNpdHk9IjEiLz4KPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjYjljNjg1IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgPC9saW5lYXJHcmFkaWVudD4KCjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjaGF0MCkiIC8+Cjwvc3ZnPg==);
background-image: -moz-linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%);
background-image: -o-linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%);
background-image: -webkit-linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%);
background-image: linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%);
これをチェックすると選択しているレイヤーの大きさを、
widthとheightとしてCSSを出力する際に含めることができます。
つまり中括弧({})と仮のクラス名を付記して出力してくれます。 今までの機能を全部オンにして出力すると以下のような感じのコードが出力されます。
.layer {
width: 330px;
height: 88px;
-moz-border-radius: 3px; / from vector shape /
-webkit-border-radius: 3px; / from vector shape /
border-radius: 3px; / from vector shape /
-moz-background-clip: padding;
-webkit-background-clip: padding-box;
background-clip: padding-box; / prevents bg color from leaking outside the border /
background-color: #dedede; / layer fill content /
-moz-box-shadow:
2px 2px 6px rgba(177,177,177,.75) / drop shadow /,
inset 1px 1px 9px rgba(48,48,48,.1) / inner shadow /,
inset 0 0 0 rgba(250,250,250,.75) / inner glow /;
-webkit-box-shadow:
2px 2px 6px rgba(177,177,177,.75) / drop shadow /,
inset 1px 1px 9px rgba(48,48,48,.1) / inner shadow /,
inset 0 0 0 rgba(250,250,250,.75) / inner glow /;
box-shadow:
2px 2px 6px rgba(177,177,177,.75) / drop shadow /,
inset 1px 1px 9px rgba(48,48,48,.1) / inner shadow /,
inset 0 0 0 rgba(250,250,250,.75) / inner glow /;
border: 1px solid rgba(125,159,123,.65); / inner stroke /
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PGxpbmVhckdyYWRpZW50IGlkPSJoYXQwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjEwMCUiIHgyPSI1MCUiIHkyPSIwJSI+CjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM0OWE2NDkiIHN0b3Atb3BhY2l0eT0iMSIvPgo8c3RvcCBvZmZzZXQ9IjYwJSIgc3RvcC1jb2xvcj0iI2I1Y2IzZCIgc3RvcC1vcGFjaXR5PSIxIi8+CjxzdG9wIG9mZnNldD0iOTAlIiBzdG9wLWNvbG9yPSIjZWJmN2M3IiBzdG9wLW9wYWNpdHk9IjEiLz4KPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjYjljNjg1IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgPC9saW5lYXJHcmFkaWVudD4KCjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjaGF0MCkiIC8+Cjwvc3ZnPg==); / gradient fill /
background-image: -moz-linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%); / gradient fill /
background-image: -o-linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%); / gradient fill /
background-image: -webkit-linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%); / gradient fill /
background-image: linear-gradient(90deg, #49a649 0%, #b5cb3d 60.01%, #ebf7c7 89.99%, #b9c685 100%); / gradient fill /
}
これでCSSとして書きだすのがだいぶ楽になりましたね。
これまでに作成したCSSを実際に適応して再現度を比較してみましょう。 テキストのプロパティは現時点ではまだ対応していないようです。 HTMLに表示用のdivの追加と、フォントサイズの調整実際にCSSを書きだして比較してみる
先ほどの画像だけでは少し物足りないので、テキストものせてみました。
まずPhotoshopでの表示。
反映されたのはtext-shadowくらい。
下記がCSS Hatで書き出されたCSS版。
文字の位置調整まではおこなってくれないので、
それらは自分で行いましたが、
それ以外はそのままのコードです。
その他気づいたことなどまとめ
内側:borderで再現
外側:box-shadowで再現
中央を指定すると内側を指定したときと同じCSSが吐かれる。
フォントサイズ、フォントファミリー、
ストロークなどは反映されない。
text-shadowは反映された。
まだまだ物足りない感はありますが、
スマホ案件などで、画像の代わりにCSSを利用するとなった際に、
チームでルールを作って使うことでデザイナーがデザインしたものが、
コーディングの段階で大きく変わってしまう
といったリスクを減らせたり、
CSSを書く時間の短縮につなげることができるツールの一つになりそうな気がします。