ちいつる
B-03気づき

デザインのCSS/JS/Three.js/Canvas組み合わせの気づき

何が使われているかを見分けられて初めて、指示の解像度が上がるという発想。

触ってみる3つのボタンをタップして、指を離したあとの戻り方を比べてください
transition
elastic ease
再描画ループ

3つのボタンを順にタップして、指を離したあとの戻り方を比べてみてください

タップするたび往きと戻りが自動で再生される。伸びるところはどれも似ているのに、指を離したあと――素っ気なくスッと戻るか、バネのように揺れて収まるか――が実装ごとにこれだけ違う。この戻りの手触りを覚えておくと、AIへの注文が「なんとなくかっこよく」から一歩具体的になる。

静的デザイン(CSS)と動的表現(JS)の境界線

色・余白・タイポグラフィのような「見た目そのもの」はCSSの領分。「時間の経過とともに変化する」「ユーザーの操作に反応する」ものはJavaScriptの領分になる。ホバーで色が変わるだけならCSSで足りるが、スクロール量に応じて複数要素が連動して動くような演出はJSが要る、という境界線を持っておくと依頼の粒度が変わる。

触ってみるスクラブを動かす/「自動再生」でポスターが組み上がる様子を見てください
Issue 07 — Sunset

夕暮れを、設計する。

0%

1本のスクラブが持つ連続した数値が、閾値の違う要素へ配り分けられ、ポスターが順に立ち上がる。「どこまで進んだか」を読んで複数要素をまとめて動かす——これは2状態しか持たないCSSの :hover には荷が重く、JavaScriptの出番になる。

1本のスクラブが持つ連続した数値が、閾値の違う要素へ配り分けられ、キッカー→大見出し→本文→画像→CTAの順にポスターが立ち上がる。「どこまで進んだか」を読んで複数要素をまとめて動かす――これは2状態しか持たないCSSの :hover には荷が重く、JavaScriptの出番になる。

触ってみるプロパティを選んで「レースする」を押し、2レーンの着き方を比べてください
transform(合成のみ)
ref
width(3段)
widt
レイアウト走る
ペイント走る
合成走る
コマ落ち: 多い

transformopacity は合成だけで済むのでカクつきにくい。widthleft はレイアウトからやり直すため、同じ「右へ動く」でも下のレーンだけ飛び飛びに遅れて着く。

上のレーンは常に transform(合成のみ)で滑らかに進み、下のレーンは選んだプロパティで進む。width や left を選ぶと、同じ「右へ動く」でも下だけ飛び飛びに遅れて着く。レイアウトからやり直す段を踏むほど、コマ落ちして重くなる。

Canvas・Three.jsが使われる場面の見分け方

画面に「板」や「線」を描いてアニメーションさせる程度ならCanvas(2D)で十分。奥行き・回転・立体的な光の当たり方が必要になった瞬間にThree.js(WebGL)の領分になる。「平面上で動くか」「立体として回り込めるか」が見分けの基準になる。

触ってみる左右の図形をドラッグして回し、指を離すと慣性で回ります

左の正方形はどれだけ回しても表を向いたまま。右の立方体だけが側面へと回り込む。裏側があるかないか――この差が、Canvas 2Dで間に合うか、それともThree.jsを持ち出すことになるかを分けている。

触ってみる点の数を変え、方式を切り替えて、動きと要素数の差を見てください
点の数120
ブラウザが管理する点の要素数0枚のcanvas

方式を切り替えても画面の動きは同じ。でもDOM方式は点の数だけ本物の要素が生まれ、Canvas方式は何点でも1枚のまま。数が増えるほど、この管理コストの差がものを言う。

方式を切り替えても、画面の中の漂い方はまったく同じ。違うのは裏側だ。DOM方式は点の数だけ本物の要素が生まれ、数が増えるほどブラウザの抱える荷物が増える。Canvasは何点でも1枚に描くだけ。たくさんの小さなものが動く演出でCanvasが選ばれるのは、この身軽さのためだ。

組み合わせることで生まれる表現の幅

CSSだけのサイトは軽快だが平坦になりがちで、JS・Canvas・Three.jsを重ねるほど表現の幅は広がるが実装・保守のコストも増える。「このセクションだけWebGLの背景を敷き、他はCSSのみ」のように、演出の濃淡を意図的に作ることが、コストと表現力のバランスを取る鍵になる。

触ってみる3つのレイヤーをON/OFFして重ねてみてください
hero section

重ねて、魅せる。

架空サイトのヒーロー部分

実装・保守コスト
軽い

レイヤーを足すほど画面は豊かになり、歩調を合わせてコストのバーも伸びる。どこまで重ねるかをページ一律で決めず、セクションごとに手加減する——それが濃淡をつけるということ。

レイヤーを足すほど画面は豊かになり、それと歩調を合わせてコストのバーも伸びていく。どこまで重ねるかをページ全体で一律に決めず、セクションごとに手加減する。それが濃淡をつけるということ。

触ってみるうねり・速さ・色を変えて、流れる質感を作ってみてください
Living Surface流れる、
生きた面。
うねりの細かさ
流れの速さ

「生きている質感」の正体は、時間で揺れる値を面いっぱいに敷き詰めること。実サイトではこれをGPUで走らせるWebGLシェーダーが担い、CSSだけでは出せない濃さを効かせたい所にだけ足す。ここではCanvas 2Dで粗く近似している。

時間とともに揺れる値を画面いっぱいに敷き詰めると、平らな面が「生きている」ように見えてくる。色(ムード)を変えれば雰囲気ごと切り替わる。実サイトではこれをGPUで走らせるWebGLシェーダーが担い、CSSだけでは出せない濃さを、効かせたい場所にだけ足していく。

AIに依頼する際の技術用語の使い分け

「かっこよくして」だけでは実装方針が定まらない。「スクロールで要素がふわっと出てくる(CSS/JSのreveal)」「背景がぬるぬる動く(WebGLのシェーダー)」「立体的なオブジェクトが回る(Three.js)」のように、見たい動きを技術用語に紐づけて伝えると、狙った実装に近づきやすい。

触ってみる動くプレビューを見て、近い技術用語を選んでください
ふわっ
Preview 1/4

スクロールで要素がふわっと浮かび上がる動き

この動き、AIに頼むならどの用語?

正解 0 / 4

見たい動きを技術用語に翻訳できると、AIへの依頼が「かっこよく」から一段具体的になる。ちなみにこのプレビューは全部CSSアニメーションで動いている。

動きと用語を一度結びつけておくと、次に頼むときは「かっこよく」ではなく「立体が回る=Three.js」と言える。当てるたびに小さく気持ちいいこの対応づけが、そのままAIに伝わる語彙として残る。

触ってみる「そのまま」と「仕上げ」を切り替え、ミニLPの変わり方を比べてください
Brand未来を、軽やかに。
+WebGL
特徴
+WebGL
実績
+WebGL
フッター
+WebGL
表現リッチ度
12
実装・コスト
24

2本とも同じ目盛り(最大 24

全部が光って主役が消える。コストは振り切れ

「そのまま」に切り替えると全セクションが光り、コストのバーだけが振り切れる。「仕上げ」はヒーロー一箇所だけを濃くして、軽いまま主役が立つ。濃淡をつけるとは、この一箇所を選ぶこと。

「そのまま」は全セクションを全部盛りにして、全部が光り主役が消え、コストのバーだけ振り切れる。「仕上げ」はヒーロー一箇所だけを濃くして、軽いまま主役が立つ。同じ目盛りで並べると、この非線形なふくらみが数値で見える。「ここはリッチに、他は軽く」とAIに伝える判断軸が、そのまま手に入る。

AIに投げるプロンプト例

Webサイトに動きをつけたいですが、技術的な知識があまりありません。 以下のイメージを伝えるので、適切な実装方法(CSS/JS/Canvas/Three.jsのどれが適切か)を提案してください。 - 画面をスクロールすると、要素がふわっと浮かび上がるように出てきてほしい - ヒーロー部分の背景に、何か「生きている」ような質感の動きが欲しい - ボタンにカーソルを乗せたときに気持ちよく反応してほしい 技術は問わないので、それぞれ何を使うのが適切か、なぜそれが適切かも教えてください。

触ってみる指やカーソルで自由に線を描いてください(色も選べます)
ここに指でなぞって描く

速く動かすと細く、ゆっくりだと太くなる——この曲がった一本を同じ形のDOM要素で組むのは至難。Canvasは1枚の面にピクセルを直接置くので、任意の軌跡・図形・可視化を自由に描ける。これがCanvasを選ぶもう一つの理由。

速く動かすと細く、ゆっくりだと太くなるネオンの一本。この曲がりくねった線を、同じ形のDOM要素で組み上げるのはほぼ不可能に近い。ピクセルを1枚の面へ直接置けるCanvasだからこそ、こういう自由が利く。可視化やお絵描きのような表現でCanvasが選ばれるのは、この描きやすさゆえだ。