Webデザイナーを目指す人のブログ

Webサイト作成時に勉強したことの備忘録

CSS サイト構築

CSSレイアウト vol.02

投稿日:

                                                                                                                                 

2カラムレイアウトをつくる

2カラム・3カラムのレイアウトを作る場合によくfloatが使われます。
今回はmainのcontainerの中にleftとright2つの領域を作っていきます。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<header>
			<div class="container">header</div>
		</header>
		<main>
			<div class="container">
				<div class="left">
					left
				</div>
				<div class="right">
					right
				</div>
			</div>
		</main>
		<footer>
			<div class="container">footer</div>
		</footer>
	</body>
</html>
	.container {
		width: 300px;
		margin: 0 auto;
	}
	.left {
		float:left;
		width:100px;
	}
	.right {
		float:left;
		width:200px;
	}

このようにすることで2カラムのレイアウトができます。
floatするときには必ずwidthが必要なのでそれぞれwidthを指定します。
また、この状態だとclearされていないのでfooter部分が上に回り込んでしまいます。
それを回避するための方法を紹介していきます。

footerにclear:both;をつける

	.container {
		width: 300px;
		margin: 0 auto;
	}
	.left {
		float:left;
		width:100px;
	}
	.right {
		float:left;
		width:200px;
	}
	footer {
		clear:borth;
	}

とすることで回り込みを解除することができます。

htmlにstyle=”clear:both;”となるdivを新しくつくる

上のfooterにclear:both;を指定した場合、一見問題なく表示されているように見えますが、
floatすることでleftとrightが通常の配置から外れてしまっているのでmainの高さがなくっています。
そこで、htmlに新しいdivを作ことによってmainの高さを保ったままfloatをclearすることができます。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<header>
			<div class="container">header</div>
		</header>
		<main>
			<div class="container">
				<div class="left">
					left
				</div>
				<div class="right">
					right
				</div>
				<div style="clear:both;"></div>
			</div>
		</main>
		<footer>
			<div class="container">footer</div>
		</footer>
	</body>
</html>

これでmainのcontainerの高さをだすことが出来るようになります。

:afterでclear:both;を指定する

上の方法だと空のdivを作る必要があります。clearするために空のdivを作るのは嫌だという場合は、
mainのcontainerに新しいclassをつけ、そのクラスに疑似要素である:afterをつけてスタイルを指定することで上と同じ動きをすることができます。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<header>
			<div class="container">header</div>
		</header>
		<main>
			<div class="container clearfix">
				<div class="left">
					left
				</div>
				<div class="right">
					right
				</div>
			</div>
		</main>
		<footer>
			<div class="container">footer</div>
		</footer>
	</body>
</html>
	.container {
		width: 300px;
		margin: 0 auto;
	}
	.left {
		float:left;
		width:100px;
	}
	.right {
		float:left;
		width:200px;
	}
	.clearfix:after {
		content="";
		display:block;
		clear:borth;
	}

overflow:hidden;、overflow:auto;を使う

clear:both;を使わずに次の要素を回り込みさせない方法もあります。
overflow:hidden;もしくはoverflow:auto;を使うことでclearと同じような動きになります。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<header>
			<div class="container">header</div>
		</header>
		<main>
			<div class="container clearfix">
				<div class="left">
					left
				</div>
				<div class="right">
					right
				</div>
			</div>
		</main>
		<footer>
			<div class="container">footer</div>
		</footer>
	</body>
</html>
	.container {
		width: 300px;
		margin: 0 auto;
	}
	.left {
		float:left;
		width:100px;
	}
	.right {
		float:left;
		width:200px;
	}
	.clearfix {
		overflow:hidden;
	}

3カラムレイアウトを作る

3カラムのレイアウトを作るときも2カラムのときと方法は同じです。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<header>
			<div class="container">header</div>
		</header>
		<main>
			<div class="container clearfix">
				<div class="left">
					left
				</div>
				<div class="center">
					center
				</div>
				<div class="right">
					right
				</div>
			</div>
		</main>
		<footer>
			<div class="container">footer</div>
		</footer>
	</body>
</html>
	.container {
		width: 300px;
		margin: 0 auto;
	}
	.left {
		float:left;
		width:50px;
	}
	.right {
		float:left;
		width:50px;
	}
	.center {
		float:left;
		width:200px
	}
	.clearfix {
		overflow:hidden;
	}

とすることで3カラムのレイアウトが可能です。

余白をつける

カラムの間に余白をつける方法はmarginを指定する方法やpaddingとbox-sizingを指定する方法があります。

	.container {
		width: 300px;
		margin: 0 auto;
	}
	.left {
		float:left;
		width:50px;
	}
	.right {
		float:left;
		width:50px;
	}
	.center {
		float:left;
		width:180px
		margin-left:10px;
		margin-right:10px;
	}
	.clearfix {
		overflow:hidden;
	}

centerのwidthを短くし、その分左右に10pxずつmarginをとっています。

	.container {
		width: 300px;
		margin: 0 auto;
	}
	.left {
		float:left;
		width:50px;
	}
	.right {
		float:left;
		width:50px;
	}
	.center {
		float:left;
		width:180px
		padding:10px;
		box-sizing:border-box;
	}
	.clearfix {
		overflow:hidden;
	}

box-sizingをborder-boxにすることでcenterの左右のpadding10pxずつを含めた値になり、
余白がうまれます。

可変幅のレイアウトをつくる

可変幅の場合簡単な方法として単位をpxから%にかえる方法があります。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<header>
			<div class="container">header</div>
		</header>
		<main>
			<div class="clearfix">
				<div class="left">
					left
				</div>
				<div class="center">
					center
				</div>
				<div class="right">
					right
				</div>
			</div>
		</main>
		<footer>
			<div class="container">footer</div>
		</footer>
	</body>
</html>
	.left {
		float:left;
		width:20%;
	}
	.right {
		float:left;
		width:60%;
	}
	.center {
		float:left;
		width:20%;
	}
	.clearfix {
		overflow:hidden;
	}

可変幅にするためにmainのdivにつけていたcontainerクラスをとります。
そしてleft、right、centerのwidthの値をそれぞれ%で示すことでブラウザの幅に合わせてカラムの幅も変わります。

また、mainの幅は可変幅でleftとrightは固定幅にしたいという場合は次のようにします。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<header>
			<div class="container">header</div>
		</header>
		<main>
			<div class="clearfix">
				<div class="left">
					left
				</div>
				<div class="right">
					right
				</div>
				<div class="center">
					center
				</div>
			</div>
		</main>
		<footer>
			<div class="container">footer</div>
		</footer>
	</body>
</html>
	.left {
		float:left;
		width:100px;
	}
	.right {
		float:right;
		width:100px;
	}
	.center {
		margin:0 100px;
	}
	.clearfix {
		overflow:hidden;
	}

floatする要素はfloatしない要素より先に書かなくてはいけないというルールがあるので、
htmlの並びをleft、right、centerにします。
leftとrightをそれぞれ100pxの固定幅にする場合、
centerはfloatをつけずに左右に100pxのmarginを指定することで
ブラウザの幅を変えるとcenterの幅だけが変わるようになります。

今日はここまでです!
1つのレイアウトを作るのにも沢山の方法があるんですね。
真実はいつも1つじゃない。。。ということでまた来週更新します!

-CSS, サイト構築

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

メディアクエリ

レスポンシブデザイン スマートフォンやタブレットの普及に伴い、サイトを構築するときはデスクトップサイズだけでなく、 それぞれのデバイスにあったレスポンシブデザインの構築が必要になってきています。 今日 …

no image

WordPress classにカテゴリーのスラッグを指定する

お知らせ一覧などで、カテゴリー名を表示するときに、カテゴリーごとに背景色を変えたいときがあります。 そのときにclass名にカテゴリーのスラッグを指定する方法があればいいなと思い探してみたところ、 下 …

no image

【CSS】中央配置が効かない時に確認すること

久しぶりの更新になります。 今回は中央配置について書いていきたいと思います。 中央揃えで代表的なのはtext-align:centerとmargin:0 auto;ですね。 私もよくお世話になっていま …

no image

WordPress オリジナルテーマを作る〜テーマの分割〜

第6回目のWordPressのサイト作り 前回の記事までの記事はこちらから WordPress オリジナルテーマを作る〜ヘッダー〜 WordPress オリジナルテーマを作る〜ヘッダーその2〜 Wor …

no image

【Javascript】組み込みオブジェクト〜MathオブジェクトとDateオブジェクト〜

組み込みオブジェクト 本日は昨日に引き続き組み込みオブジェクトについて見ていきます。 すごく簡単に復習しますが、組み込みオブジェクトとはJavascriptで元々用意されているオブジェクトのことです。 …