仕入れたデザイン画像を稼働中のウェブページに適用するのに苦労することはありませんか?ウェブ開発のすべり出しが順調であるにも関わらず、デザイン設計のある部分でつまづくことは? wireframes はあなたにとってコーディングによる設計よりも簡単?ローディング速度が遅くメンテの難しいwebの開発に満足できますか?
多くのデザイナーたちが自分のデザイン画像を稼働中のHTML/CSS web ページに上手く変換できません( 中にはコーディングすら全くしない人もいます)。大抵の場合、その理由はデザイン設計のアプローチと、1つの命令行を書き込む前のプロセスに対する考え方に問題があるからです。
噂とは裏腹にCSSは難しい言語ではありませんし、web ページやweb サイトの開発も難しくある必要はありません。多くの場合、問題は基礎構造の開発前に細かい部分を気にして混乱してしまうところにあります。またデザインのうち、コードを複雑化するような軽微で些細な部分の処理に捕われてしまうことも問題要因の一つです。
この投稿では、皆様に自由にダウンロードできる試供デザインを閲覧し、そのデザインを稼働中のweb ページに組み入れる方法を見ていただきます。この投稿では私は簡潔なコードを用いますが、デザイン・テンプレートに付いたオリジナルコード同様、ページを立ち上げるために私が使用したコードをダウンロードしていただけます。この投稿自体は、主にデザイン設計のための思考過程に重点をおいて進めていきます。
ダウンロード
The Artificial Casting テンプレート
下のデザインをご覧ください。これらはSmashing Magazinesから無料でダウンロードできます(当ページの3つ目のテンプレート)。 テンプレートクリエーターによる設計デモをご覧になり、上にある私のデモと比較していただくことも出来ます。
デザインから開発までの過程に対する一般的考え
Artificial Casting テンプレートの説明に入る前に、開発にあたってwebサイト全てに共通する2つ3つの事柄を考えてみましょう。
好むと好まざるとに関わらず、web ページは全てボックスを使って開発されます。HTMLの全要素はボックスを持ち、ボックスは CSSボックス・モデルをもとに形づけられます。隣同士や上下に並ぶボックスもあれば、他のボックスに包含されているものもあります。デザインが箱形でなければならないということではなく、開発時に作られるボックスについて考える必要があるということです。
最も上級なレベルでは、2つ3つの大ボックスで大枠のレイアウトが構成されて、デザインの詳細はその大ボックス中の小ボックスに入ります。これらの長方形ボックスを頭で思い描くことは、デザインのどの部分がボックスに上手くフィットして、どの部分をボックスから外すべきかを見定めるのに役立ちます。まずは、これらの大レイアウト・ボックスについて考えましょう。細かい部分を見て内側から外側へコーディングせず、外側からのコーディングを行います。
画像とHTTPリクエストは、webページのローディングを遅くする大きな要因の一つです。デザインを考えるにあたって本当に画像化するべきもの、またコードを用いて簡単に再現できるものは何かについて思案することは賢明です。一つ画像を少なくすることで、ファイルサイズもサーバー上のリクエスト数も縮小するため、 画像を最適化することができます。
私はただの大きな色の集合体に過ぎない、webページ上の画像を見かけることがよくあります。そもそも色の集合体が画像化されなければならない理由はないのです。私たちは画像を眺めて、どうやって必要とする画像全体のファイルサイズを縮めるかについて考えながら、使用する画像の数を減らしています。
レイアウト
テンプレートに関してまず考えたいことは、レイアウト全体の概観についてです。デザインを大ブロックに分けようとしていますが、この場合、まず上下方向に行うのが最も簡単でしょう。デザインを見ると3つの帯がページを横切っているのが分かります。この帯がヘッダーやコンテンツ、そしてフッターに当たるものです。
フッター
最下部に3つの情報ボックスとテキストを含んだ分かりやすいフッターがあります。とりあえずフッターの中味は気にせず、先ず上部からフッターを切り離すためにどこで線引きするかを決めます。
この端の部分を画像化しますが、それをフッターもしくは上のボックスのどちらに入れるかを選択できます。どちらでもOKですが、私はイメージをフッターに入れることにしました。
この記事で触れませんが、最終的にはサイトにわたって繰り返されるページのある部分を別のファイルで管理するために、PHPを含有したファイルの類いを使用するのが妥当でしょう。この画像は当サイトの全ページ上に登場するため、私にとっては最終的にfooter.php
ファイルになるフッターに置くほうが合理的なのです。
フッター内にある他すべての詳細については、基礎レイアウトの作成中はそれについて考える必要はありません。
コンテンツ
本文を3つのカラムと2つのサイドバー、そしてその間にあるメイン・セクションに分けてフッターの真上に置きます。3つのカラムについては後ほどもう少し詳しく触れます。今は内側を3つのカラムまたは3つの小ボックスに分割される、一つの大コンテンツ・ボックスについて考えるだけで十分です。
フッターの場合と同じく、コンテンツ・ボックスの初めと終わりをどこにするかを決めなければなりません。ここに開発上の問題のタネとなる2つの要素があります。複数のカラムおよびコンテンツ全体をそれぞれまたいでいるログイン・ボックスとチェスの駒の画像はヘッダーに属します。
オリジナルのテンプレート開発にあたって、両者はヘッダーの一部として設定されましたが、私はそれらをコンテンツエリアに置くことにしました。フッターの場合と同じく、この2つがサイトの全ページに登場させるべきかを考えました。確かにテンプレートのデザイン時に設定すればそうなっていたでしょう。しかし、2つがページ毎に変わるような柔軟性を持たせるのも良いだろうと考えました。
おそらく、サイト内の別のセクションでは別のチェス駒画像が登場し、ログイン・ボックスは一部のページあるいはセクションにのみ登場するでしょう。
コンテンツエリアにインクルード・ファイルは使いません。ページ毎に変わるセクションはここだけなので、サイトにわたって変化させたいデザイン素材は、このボックスに入れるのが妥当なのです。しかしここからチェス駒の画像をコンテンツとヘッダーの両方に置くため、どのようにコーディングするかを把握しておく必要があります。
ヘッダー
ここではヘッダーについて紹介します。消去法からするとヘッダーにはロゴやナビゲーション・バー、そしてその背後に勾配の背景が入ります。ヘッダーとコンテンツエリアの間を、ページを横切る細いラインで仕切ります。このラインもページ毎に変化しないため私はヘッダーに入れています。ヘッダーは最終的にサイトの全ページに入る header.php
ファイルになります。
レイアウトの作成
HTMLを以下のように組み立てることができます。
<div id="header"></div> <div id="content"> <div id="primary"></div> <div id="main-content"></div> <div id="secondary"></div> </div> <div id="footer"> </div>
先述したメインボックスやビルディング・ボックスは、それぞれ セマンティック id
を適用した div
になります。
コンテンツエリアの中に3つのカラムが入っているのが分かるとおり、コンテンツ div
は3つの追加 divs
を持っています。一方がより重要であることを反映させるためによくされることですが、2つのサイドバーをそれぞれ「プライマリー」「セカンダリー」と名付けました。
チェス駒とログイン・ボックスの画像をコンテンツ div
の中に追加しますが、 ログイン・ボックスをカラム構造の枠から独立させるために、 3つのカラムdivs
の外に置くことにします。
ここからはCSSについて。
#primary {float: left;} #main-content {float: left;} #secondary {float: left;} #footer {clear: both}
CSSでサイトのレイアウトを作る際の鍵は、CSSの不要な場合を見定めること、そしてフロートを要する場所がわずかであるという理解です。HTMLでは、コンテンツ div
はそのままヘッダー div
の真下に置き、 フッター div
はそのままコンテンツdiv
の下に置きます。これは div
のデフォルト動作で、それが起こるために何もする必要はありません。
このデフォルト動作を変えたいので、コンテンツdiv
内の各 divs
をフロートします。これら3つのdivs
がお互いの下に来ないように、お互いを隣り合わせにして配置し各々左方向にフロートするようにします。
デフォルト動作を変更させたら次はフッター div
の調整を行います。 コンテンツ div
内の内容全てがフロートした状態にあるので、 フッター div
は自動的にその下に来ることはありません。 clear: both
を追加することで(ここでは clear: left
を使っていますが)フッター div
を強制的にコンテンツ div
下に持っていきます。
必然的により多くのCSSが最終的には必要となります。上記のコードを試すと、どの divs
にも幅や高さ指定、またそれらを設定するコンテンツがないため内容が乏しいのが分かります。そこにはこれから中味を埋めていく空っぽの構造体があるだけです。
フロートされた3つの divs の合計幅がページ全体の幅を越えないようにしなければいけないため、それら3つの幅設定には特に注意する必要があります。レイアウトに際してのもう一つの決定事項である全体の幅について、まだ詳しく述べていないことにお気づきでしょう。
固定もしくはリキッドのレイアウト
デザイン・イメージを一見しただけでは、デザインが 固定されているのか流動的なのかが分かりません。事実どちらも可能なのです。テンプレートに付いているコードを見ると、3つの水平の帯(ヘッダー、コンテンツ。フッター)がウィンドウの端まで伸びながら、帯内のコンテンツ全部がページの中央に来るように設計されています。同じように私たちもしてみましょう。 全てを固定して中央に持っていきたい時は、div
でその周辺を包んで幅を確保し、その div
で包んだ部分を中央に据えます。おそらくCSSでページを中央に置く方法が皆さんには馴染み深いでしょう。 ページ全体を中央に置く方が簡単と言えば簡単なのですが、ここではそれを行いません。3つの水平帯の背景をブラウザの端まで伸ばしながら、帯内の内容全てをウィンドウの中央に置きます。私たちが目指すのは リキッドな背景と固定したコンテンツですが、幸いにもSoh Tanaka氏がすばらしいとても簡単な解決方法を提供してくれました。 ただCSSで一つのクラスを作り、それをHTML構造内にある選択可能なdivs
に適用するだけでよいのです。
.container {width: 960px; margin: 0 auto;}
センタリングに精通している人なら、上のコードが通常 wrapper div
に加えるものであることにお気付きになるでしょう。クラスとしてCSSを設定すれば、それが適用される箇所での柔軟さとコントロールが確実になります。新しいHTMLはこのようになります。
<div id="header"> <div class="container"></div> </div> <div id="content class="container""> <div id="primary"></div> <div id="main-content"></div> <div id="secondary"></div> </div> <div id="footer"> <div class="container"></div> </div>
ヘッダーやフッターで使われるクラスに新しいdiv
を追加しました。これで全てを新しい960pxの container div
内に入れてかつその div
をブラウザの中央に表示させる一方、ヘッダーとフッターの背景をリキッドに伸びるスタイルにすることができます。
コンテンツ div
とそのまま同じことができるかも知れませんが、ここでは全てを覆っているボディタグを利用できます。端まで伸びつつ、 1つの div をHTML構造の中で保管するボディの背景色を設定します。 containing クラス divs
の設定でレイアウト設定はほぼ完了です。
ヘッダー、フッター、そしてコンテンツエリアは 960pxで固定されています (各div
の実際のコンテンツ部分です)。まだコンテンツ div
内にある3つのdivs
それぞれの幅を設定する必要があります。
#primary {float: left; width: 245px} #main-content {float: left; width: 505px} #secondary {float: left; width: 210px} #footer {clear: both}
上記の幅は960pxまで上げるほうがよろしいでしょう。最終的なコードでは実際に指定した幅は見られないことに注意してください。最後のHTMLページでは左右のパディングまたは境界線の中に、各divの幅が含まれている場合があります。各カラム(幅+パディング+余白)は上記にある数値まで上げます。
まとめと第2弾の予告
続けて第2弾では、大きいレイアウト・ブロックについて詳しく見ながら、もう2、3個のデザイン決定を行います。 それによってページ全体のコーディングやローディングにかかる時間を節約できます。 それより先ず、ここで紹介したハイレベルなレイアウトについておさらいしましょう。CSSレイアウトでつまずく人が多いようですが、詳しいことを無視して大枠にだけ焦点を合わせれば、実はみなさんが思っている以上にはるかに簡単なのです。まずどうやって自分のデザインを大きいビルディング・ブロックにまとめるかを考えます。デザインの詳細を気にせずにレイアウトを見てみます。全てが適所に置かれている大きいボックスを思い描きます。 必要なボックスを決めたら、HTMLのコーディングを始めます。この時点で大切なことは、適用されるIDの付いた数個の divs
です。ブロックを位置を決めるために必要とするごく基本的なCSSを所定のHTMLを用いてセットし、ここで行ったように必要に応じてクラスを1つもしくは2つ製作または追加します。 基本的構造が整えば、これらのボックスの中味を埋め始めることができます。それについてはこの投稿の第2弾で見ることにしましょう。乞うご期待!