ウェブサイトの作り方を学ぶには、やはり、一からどう作っるか説明するのが一番学べると思います。
ということで、今回はクオリティの高いフォトショップのウェブデザインのコーディングを4回に分けて説明したいと思います。

これが今回のチュートリアルで作って出来上がったウェブサイトです。

今回は第2回、メニューとロゴの部分をコーディングしたいと思います。

1.メニューの画像を用意する

今回は、普通のテキストでもメニューを作ることができますが、ウェブの標準フォントでないフォントを使いたい人の為に、画像を使ってコーディングを行いたいと思います。

それでは、以下の様に2個の画像を用意してください。一個目は、メニューの背景となる画像、2個目はメニューの文字とマウスがメニューの上に来た時とそのページが選択されているときの状態(HoverとActive 状態)の画像を用意します。
ちょっと前までは、各メニューの項目を一個ずつのイメージで作ってましたが、ほんの一年程前から、すべてを一つにまとめた方が、ホームページが早く表示されることが分かり、今ではすっかり定番となっている。

bg header menu ウェブサイトをHTML&CSSに基礎から構築 〜 第 2 回 〜

icon menu sprite ウェブサイトをHTML&CSSに基礎から構築 〜 第 2 回 〜


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%;
}