MORE CREATIVE!

HTML5のcanvasを使って醤油ラーメンを描いてみた!!

html5-canvas-ramen

ホップスの辻です。
今なにかと話題のHTML5。先日はcache manifest(キャッシュマニフェスト)のお話をしましたね。

HTML5の中でも今もっとも注目度の高い機能に「canvas(キャンバス)」というものがある。このタグを使うと、javascriptと組み合わせて簡単に図形を書いたり、アニメーションをしたりできます。Flashではプラグインという形でFlash Playerを入れなければいけませんが、canvasはブラウザ側が既に実装しているので何も必要ありません。

今回は今もっとも熱いcanvas(キャンバス)タグを使って、醤油ラーメンを描きたいと思います。

canvas使ってモテたい!でもその前に・・・

ようしcanvas使っちゃぞ!その前にcanvasが動くブラウザの準備です。
2010年7月9日現在以下のブラウザでcanvasが使えます。

  1. 1)Firefox 3.6.6 [ダウンロード先]
  2. 2)Safari 5.0 [ダウンロード先]
  3. 3)Opera 10.60 [ダウンロード先]
  4. 4)Google Chrome 5 [ダウンロード先]

IEが見当たりませんね。
実はIEはそのままではcanvasが動作しないんです。不便ですね。
そこで「ExplorerCanvas」や「uuCanvas.js」というjavascriptを読み込む事でようやく動きます。
必要に応じてダウンロードしましょう。

canvasタグを定義しよう

canvasでラーメンを作ろう。
まずはベースとなる、canvasをhtml内に定義します。

<canvas id="ramen" width="560" height="450"></canvas>

これで準備はできました。
この段階で実際にhtmlをブラウザで見ても、横560px 縦450pxの真っ白な物しかありません。
では、実際に中身を描いていきましょう。

canvasでラーメンどんぶりを描こう!

まずラーメンを入れる器を描かないといけません。
そこで以下のように「ページを読み込んだら、ramenとmenを読み込むよ」っていうjavascriptを書きます。

onload = function() {
ramen(); //ラーメンどんぶりを読み込む
men(); //麺や具を読み込む
};

続けて実際にramenの中身を書きます。

//ラーメンどんぶりここから
function ramen() {
var canvas = document.getElementById('ramen');
if ( ! canvas || ! canvas.getContext ) {return false;}
var rmn = canvas.getContext('2d');
rmn.save();

//どんぶりの土台(陰付き)
rmn.scale(1, 0.60);
rmn.beginPath();
rmn.shadowOffsetX = -15;
rmn.shadowOffsetY = 30;
rmn.shadowColor = 'rgb(230, 230, 230)';
rmn.shadowBlur = 70;
rmn.fillStyle = 'rgb(210, 210, 210)';
rmn.arc(270, 560, 120, 0, Math.PI*2, false);
rmn.fill();
rmn.closePath();

rmn.restore();
rmn.save();

//どんぶりの外側(赤い部分ね)
rmn.beginPath();
rmn.fillStyle = 'rgb(167, 78, 70)';
rmn.moveTo(75,270);
rmn.quadraticCurveTo(270,490,470,270);
rmn.fill();

rmn.restore();
rmn.save();

//どんぶりの中身(具とか入る所ね)
rmn.beginPath();
rmn.scale(1, 0.60);
rmn.fillStyle = 'rgb(230, 230, 230)';
rmn.arc(270, 320, 240, 0, Math.PI*2, false);
rmn.fill();
rmn.closePath();

rmn.restore();
rmn.save();

//醤油スープ(下の層)
rmn.beginPath();
rmn.scale(1, 0.55);
rmn.fillStyle = 'rgb(143, 37, 26)';
rmn.globalAlpha = 0.6;
rmn.arc(270,375, 200, 0, Math.PI*2, false);
rmn.fill();
rmn.closePath();

rmn.restore();
rmn.save();

//醤油スープ(上の層)
rmn.beginPath();
rmn.scale(1, 0.55);
rmn.fillStyle = 'rgb(191, 91, 11)';
rmn.globalAlpha = 0.2;
rmn.arc(270,380, 210, 0, Math.PI*2, false);
rmn.fill();
rmn.closePath();

rmn.restore();
}

photo1
さあ、これでラーメンどんぶりが完成しました。
続いて中身です。

canvasのdrawImage()メソッドを使って麺と具の画像を描画しよう!

canvasはラーメンどんぶりの様に単純な図形を描けるだけではありません。
jpgやpngなどの画像を読み込んでcanvasに描画できるのです。
実際にやってみましょう。

//麺と具ここから
function men() {
var canvas = document.getElementById('ramen');
if ( ! canvas || ! canvas.getContext ) {return false;}
var m = canvas.getContext('2d');

//麺(ハイパー手抜きタイム)
var men2 = new Image();
men2.onload = function() {
m.drawImage(men2, 65, 90);
}
men2.src = "men.png"; //麺と具を読み込みます!
}

photo2
できました。
これで醤油ラーメンの完成ですね。

醤油ラーメンのデモ

jsdo.itに乗せてみました

canvasの解説

canvasで楕円を描く方法

ちょっと苦労したのがcanvasで楕円を描く方法。
どうやればいいのだろう?と思ったらできましたね、コレです。

rmn.scale(1, 0.60); //横の比率1,縦の比率0.6
rmn.arc(270, 320, 240, 0, Math.PI*2, false); //円を描きます。

ポイントはscale(スケール)です。scaleを設定することで、横と縦の比率を指定できます。今回は上から押されて潰れているような楕円にしたかったので横は1、縦は0.6と指定しました。
※MAXは1です。

canvasでベジェ曲線を描く方法

ラーメンどんぶりの赤い部分、実は無駄にベジェ曲線をつかって描画しています。こうすることで、よりリアルな形にしあがりました。

rmn.moveTo(75,270); //左上からの座標を指定(左から75px、上から270pxに移動)
rmn.quadraticCurveTo(270,490,470,270); //これベジェ曲線です

ベジェ曲線は、単純な四角形や円よりも難しいですが慣れると簡単に扱う事ができます。もしかするとillustratorなどを扱っている人なら慣れるのが簡単かもしれませんね。
ボクは慣れませんでした。

canvasで透明なスープを描く方法

今回は醤油ラーメンなので、赤茶っぽい色の透明なスープを表現しました。
実際には透明度を設定しただけなので楽チンでした。

rmn.fillStyle = 'rgb(143, 37, 26)'; //色は赤茶
rmn.globalAlpha = 0.6; //透明度は0.6(MAXは1)

サンプルのダウンロード

今回は醤油味のラーメンでしたが、みなさんもサンプルをダウンロードして色んなラーメンを楽しんでくださいね!

  • カテゴリー:Twitter
  • カテゴリー:デザイン
  • カテゴリー:jQuery
  • カテゴリー:iPhone
  • カテゴリー:モリオカート

ホップスでは「HTML5のcanvasを使って醤油ラーメンを描いてみた!!」が得意です!ぜひお気軽にお問い合わせください!

3キャリア対応! 携帯サイトでfloatを使ってかっこいい見出しを作ろう!

mobile-site-css-float-technique

ホップスの辻です。
久々に3キャリア対応の携帯サイトを構築したのですが、その時にCSSのfloatでかなりハマったので私なりの解決方法をまとめたいと思います。

今回実現したかったfloatでの見せ方

mobile-site-css-float-technique1
こんな風に、左にテキスト、右に画像の様な見せ方にしたかったのですが、何故か上手くいきませんでした。

3キャリア、基本の仕様はバラバラ

世の中そんなにあまくなかった・・・。
ちょっとPCサイトと同じ感覚でfloatを適用したのですが、案の定3キャリアとも見え方がバラバラになってしまいました。
原因は適切な位置でフロートのクリア(解除)をしていなかった為でした。
その時のコードがこれです。

<div style="clear: both;"><span style="float: left;">タイトル</span><span style="float: right;"><img src="#" /></span></div>

このコードでは一部のキャリアで画像が下に落ちてしまい、旨く行きませんでした。

たとえばこんな感じ1

mobile-site-css-float-technique2

たとえばこんな感じ2

mobile-site-css-float-technique3

熱い思いが3キャリア対応を実現させた

それでも諦めませんでした。
どうすれば良いのか、何度もトライしました。

「できました」まるでどっかの社長さんの様な言葉が、心の中で響きました。
試行錯誤の末、実際にうまくいったコードがこれです。

<div style="background-color: #DDDDDD; color: #ffffff; margin: 0 0 3px;"><span><img src="#" style="float: right; vertical-align: top;" align="right" /></span><span style="float: left; padding: 2px 0 0;">テキスト</span><div style="clear:both;"></div></div>

上のコードを書くと、私がやりたかった”floatを使ったかっこいい見出し”が出来るわけです。
mobile-site-css-float-technique1

携帯サイトでfloatを使う時のまとめ

まずは、3キャリアの実機でちゃんと確認しないとえらい目にあいます。
携帯サイトのデザイン、コーディングは色々な角度からアプローチする事により比較的簡単に、しかも早く解決できる。
そして、あきらめない<これ重要>
ちょっとでも諦めると、とたん残念なデザインになりかねないですからね。

  • カテゴリー:Twitter
  • カテゴリー:デザイン
  • カテゴリー:jQuery
  • カテゴリー:iPhone
  • カテゴリー:モリオカート

ホップスでは「3キャリア対応! 携帯サイトでfloatを使ってかっこいい見出しを作ろう!」が得意です!ぜひお気軽にお問い合わせください!

何かと忘れがちなCSSの書き方のまとめ(たとえばmin-height)

css-matome-2010

ホップスの辻です。
よし!サイトをコーディングするぞ!あれ?あのCSSなんて書くんだ?
あるある!!よくある! そんな時ようのCSSの書き方のまとめです。

min-height:指定した高さ以下には小さくならないようにする方法

//ID="demo"は100px以下にはなりません。
#demo {
	min-height: 100px;
	height: auto!important;
	height: 100px;
}

cursor:マウスのカーソルのアイコンを変更する方法

これが一番利用するかもね。

#demo {
	cursor: pointer; //指のアイコンになる
}

border-radius:ボックスを角丸にする方法

たとえば背景色を指定して、ボックスを角丸にしたい時に便利だね。
ただしIEは対応してないけど。

#demo {
	border-radius: 3px; //その他
	-webkit-border-radius: 3px; //Safari、Google Chrome
	-moz-border-radius: 3px; //Firefox
}

rgba:背景を透明にする簡単な方法

このブログみたいに背景を透明にする方法。
しかもクロスブラウザ対応だから、IE、Firefox、Safari、Opera、Google ChromeでもOK!!!
filterはIE対応のための物です。
rgbaは通常のrgbにa(アルファ)を追加したものです。

#demo {
	background: rgba(0, 0, 0, 0.4);
	filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#B4000000, endcolorstr=#B4000000, gradienttype=0);
}
  • カテゴリー:Twitter
  • カテゴリー:デザイン
  • カテゴリー:jQuery
  • カテゴリー:iPhone
  • カテゴリー:モリオカート

ホップスでは「何かと忘れがちなCSSの書き方のまとめ(たとえばmin-height)」が得意です!ぜひお気軽にお問い合わせください!