ウェブサイトの作り方を学ぶには、やはり、一からどう作っるか説明するのが一番学べると思います。
ということで、今回はクオリティの高いフォトショップのウェブデザインのコーディングを4回に分けて説明したいと思います。
これが今回のチュートリアルで作って出来上がったウェブサイトです。
今回は第2回、メニューとロゴの部分をコーディングしたいと思います。
-
第1回:
ウェブサイト作成の準備&ボディーのバックグラウンドイメージの設定 -
第2回:
メニュー&ロゴ、ソーシャルリンクのCSS&HTML -
第3回:
jQueryを使ってイメージスライダーの設置 -
第4回:
最新のプロジェクトのCSS ビデオ講座
1.メニューの画像を用意する
今回は、普通のテキストでもメニューを作ることができますが、ウェブの標準フォントでないフォントを使いたい人の為に、画像を使ってコーディングを行いたいと思います。
それでは、以下の様に2個の画像を用意してください。一個目は、メニューの背景となる画像、2個目はメニューの文字とマウスがメニューの上に来た時とそのページが選択されているときの状態(HoverとActive 状態)の画像を用意します。
ちょっと前までは、各メニューの項目を一個ずつのイメージで作ってましたが、ほんの一年程前から、すべてを一つにまとめた方が、ホームページが早く表示されることが分かり、今ではすっかり定番となっている。
2.メニューのコーディング
まずは、今回のコンテンツのサイズは、フォトショップから見ると950pxぐらいですので、まず、ヘッダー用にDIV(今回HTML5のHEADERを使いますが)を作って、その中にメニュー用のDIVの器を作ります。メニュー用のDIVは、950pxで指定して、いつでも中央に来る様に左右のマージンをAutoにします。この950pxと中央に来る様にしてするCSSは何度も使う予定なので、classを作っておきましょう。
<header> <div class="content_size"> </div> </header>
div.content_size { width: 950px; margin: 0 auto; text-align: left; }
次に実際のメニューのコーディングを行っていきます。htmlの方は、ul でリストを以下の様に作ります。
<ul id="header_menu"> <li><a href="index.html">ホーム</a></li> <li><a href="#">ポートフォリオ</a></li> <li><a href="#">経歴</a></li> <li><a href="#">ブログ</a></li> <li><a href="#">問い合わせ</a></li> </ul>
ulにさっき程一個目の画像を背景に指定します。ulのサイズは画像と同じサイズに指定して、上下のスペースをmarginで指定して, float:rightでul全体を右によせます。
ul#header_menu { width: 500px; height: 45px; background: url(../images/bg_header_menu.jpg) repeat-x center center; margin: 30px 0; float: right; }
ul をfloatしたけど、下のコンテンツを上に来てほしくないので、clearfixのcssをul の一個上のdiv に指定します。
<div class="clearfix content_size"> <ul id="header_menu"> <li><a href="index.html">ホーム</a></li> <li><a href="#">ポートフォリオ</a></li> <li><a href="#">経歴</a></li> <li><a href="#">ブログ</a></li> <li><a href="#">問い合わせ</a></li> </ul> </div>
3.フロート クリア フィックス (Float Clear Fix)
Floatを指定してコンテンツの位置を調整することは、日常茶飯事です。それによって、したのコンテンツがあがってくることを防ぐ為の、以下のコードは色んなブログで紹介されていますので、スニペット(よく使うコード)として保存しておいてください。
.clearfix:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } .clearfix { display: inline-block; } html[xmlns] .clearfix { display: block; } * html .clearfix { height: 1%; }
4.メニューの項目をコーディング
まず、a は、インラインタグなので、display blockを指定して、height と width を指定できる様にします。float leftを指定して、 a をすべて横に並べて、text-indent を -9999px に指定することで、テキストを見えなくします。次にすべての a に2個目のメニューの画像を指定して、そのあとに一個ずつBackground positionを利用して、位置を調整します。
li:nth-child はCSS3ですので、すべてのブラウザーに対応していません。とは言っても、今現在で対応してないメジャーブラザーはIEだけすけど。。(IE消えてくれないかな。。)
IEに対応させる場合は、各 li にIDでも指定してください。
ul#header_menu li a { text-align: left; line-height: 45px; float: left; width: 80px; display: block; text-indent: -9999px; background: url(../images/icon_menu_sprite.png) no-repeat left bottom; } ul#header_menu li:nth-child(2) a{ width: 140px; background-position: -80px bottom; } ul#header_menu li:nth-child(3) a { width: 68px; background-position: -220px bottom; } ul#header_menu li:nth-child(4) a { width: 80px; background-position: -288px bottom; } ul#header_menu li:nth-child(5) a { width: 130px; background-position: -368px bottom; }
5.Logoの部分のコーディング
これは、メニューの部分の繰り返しなので、特に説明する必要ないかと思いますが、何か分からないことがあればコメントを残してください。今回は、CSS3を使わずにやったので、メニューをIEに対応させたい人は、参考にしてください。
<div id="header"> <div class="content_size"> <a href="http://d3mstudio.com" id="logo"></a> <div id="social_link"> <a id="rss" href="#rss"></a> <a id="facebook" href="#facebook"></a> <a id="twitter" href="#twitter"></a> <a id="flicker" href="#flicker"></a> </div> </div> </div>
div#header { height: 126px; background: url(../images/bg_header.jpg) no-repeat center center; } div#header a#logo { display: block; float: left; width: 360px; height: 125px; background: url(../images/logo.png) no-repeat center center; text-indent: -9999px; } div#social_link { height: 55px; width: 244px; margin-top: 40px; float: right; } div#social_link a { height: 55px; float: left; width: 55px; display: block; background: url(../images/icon_social_media.png) no-repeat 3px center; } div#social_link a#facebook { width: 55px; background-position: -61px center; } div#social_link a#twitter { width: 55px; background-position: -125px center; } div#social_link a#flicker { width: 55px; background-position: -188px center; }
6.最終的なコード
最終的なコード以下とデモへのリンクです。
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="css/reset.css" media="all" /> <link rel="stylesheet" type="text/css" href="css/style.css" media="all" /> </head> <body id="main_page"> <header> <div class="clearfix content_size"> <ul id="header_menu"> <li><a href="index.html">ホーム</a></li> <li><a href="#">ポートフォリオ</a></li> <li><a href="#">経歴</a></li> <li><a href="#">ブログ</a></li> <li><a href="#">問い合わせ</a></li> </ul> </div> <div id="header"> <div class="content_size"> <a href="http://d3mstudio.com" id="logo"></a> <div id="social_link"> <a id="rss" href="#rss"></a> <a id="facebook" href="#facebook"></a> <a id="twitter" href="#twitter"></a> <a id="flicker" href="#flicker"></a> </div> </div> </div> </header> </body> </html>
style.css
body { background: url(../images/bg_body.jpg) no-repeat center top #1d1a18; text-align: center; } div.content_size { width: 950px; margin: 0 auto; text-align: left; } /*------------------------------------------- Header Menu -------------------------------------------*/ div#header_top { } ul#header_menu { width: 500px; height: 45px; background: url(../images/bg_header_menu.jpg) repeat-x center center; margin: 30px 0; float: right; } ul#header_menu li { } ul#header_menu li a { text-align: left; line-height: 45px; float: left; width: 80px; display: block; text-indent: -9999px; background: url(../images/icon_menu_sprite.png) no-repeat left bottom; } ul#header_menu li a:hover, body#main_page ul#header_menu li:first-child a { background-position: left top; } ul#header_menu li:nth-child(2) a{ width: 140px; background-position: -80px bottom; } ul#header_menu li:nth-child(2) a:hover { background-position: -80px top; } ul#header_menu li:nth-child(3) a { width: 68px; background-position: -220px bottom; } ul#header_menu li:nth-child(3) a:hover { background-position: -220px top; } ul#header_menu li:nth-child(4) a { width: 80px; background-position: -288px bottom; } ul#header_menu li:nth-child(4) a:hover { background-position: -288px top; } ul#header_menu li:nth-child(5) a { width: 130px; background-position: -368px bottom; } ul#header_menu li:nth-child(5) a:hover { background-position: -368px top; } /*------------------------------------------- Header / Logo / Social Link -------------------------------------------*/ div#header { height: 126px; background: url(../images/bg_header.jpg) no-repeat center center; } div#header a#logo { display: block; float: left; width: 360px; height: 125px; background: url(../images/logo.png) no-repeat center center; text-indent: -9999px; } div#social_link { height: 55px; width: 244px; margin-top: 40px; float: right; } div#social_link a { height: 55px; float: left; width: 55px; display: block; background: url(../images/icon_social_media.png) no-repeat 3px center; } div#social_link a#facebook { width: 55px; background-position: -61px center; } div#social_link a#twitter { width: 55px; background-position: -125px center; } div#social_link a#flicker { width: 55px; background-position: -188px center; }
reset.css
/* v1.0 | 20080212 */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } /* remember to define focus styles! */ :focus { outline: 0; } /* remember to highlight inserts somehow! */ ins { text-decoration: none; } del { text-decoration: line-through; } /* tables still need 'cellspacing="0"' in the markup */ table { border-collapse: collapse; border-spacing: 0; } .clearfix:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } .clearfix { display: inline-block; } html[xmlns] .clearfix { display: block; } * html .clearfix { height: 1%; }