これまでに HTML の要素は、
<html>
<head>
<body>
<h1>
<p>
<a>
<img>
今回は、ヘッダーやフッターなど Web ページの構造を詳しく示す要素について紹介していきます。多くの Web サイトの構造は以下のような領域に分かれており、それぞれの領域を表す HTML 要素があります。
<header>
<nav>
<main>
<article>
<section>
<aside>
<footer>
以下のような HTML と CSS がある状態から始めます。
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>タイトル</title>
<link href="style.css" rel="stylesheet" />
</head>
<body>
<!-- ここにページの内容を書く -->
</body>
</html>
style.css
@charset "utf-8";
/* ここにページのスタイルを書く */
デフォルトでは
width
height
padding
border
*
style.css
* {
/* 全称セレクタで全ての要素に適用する */
/* width, height の大きさに border まで含める */
box-sizing: border-box;
}
info
大きさと余白の関係
デフォルトの状態では、大きさと余白は以下のような関係になっています。実際の要素の横幅は
+width
+padding
となってしまい、少々扱いづらいです。border
プロパティをbox-sizing
に設定すると、border-box
やpadding
を指定していても、要素の横幅はborder
で指定した数値になるので扱いやすくなります。width
とwidth
やpadding
を一緒に指定するときは、この設定も追加しておきましょう。border
セレクタ { box-sizing: border-box; }
デフォルトでは
body
style.css
body {
/* デフォルトの余白を消す */
margin: 0;
}
この時点で はまだ白紙のページです。
body
display: flex;
index.html
<body>
<header class="header">ヘッダー</header>
<main class="main">メイン</main>
<footer class="footer">フッター</footer>
</body>
style.css
body {
/* デフォルトの余白を消す */
margin: 0;
/* 最小でもウィンドウの高さになるように */
min-height: 100vh;
/* Flexコンテナ(縦) */
display: flex;
flex-direction: column;
}
.header {
background-color: #ffeeee;
}
.main {
background-color: #eeffee;
/* Flexコンテナに余白があれば伸ばす */
flex-grow: 1;
}
.footer {
background-color: #eeeeff;
}
ボックスの幅を
100%
margin
auto
index.html
<body>
<header class="header">
<div class="header-container">
ヘッダー
</div>
</header>
<main class="main">
<div class="main-container">
メイン
</div>
</main>
<footer class="footer">
<div class="footer-container">
フッター
</div>
</footer>
</body>
style.css
.header-container {
/* 中央寄せ */
width: 100%;
max-width: 60rem;
margin: 0 auto;
padding: 1rem;
}
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>タイトル</title>
<link href="style.css" rel="stylesheet" />
</head>
<body>
<header class="header">
<div class="header-container">
ヘッダー
</div>
</header>
<main class="main">
<div class="main-container">
メイン
</div>
</main>
<footer class="footer">
<div class="footer-container">
フッター
</div>
</footer>
</body>
</html>
style.css
<!-- コメント -->
/* コメント */
.クラス名
@charset "utf-8";
* {
/* 全称セレクタで全ての要素に適用する */
/* width, height の大きさに border まで含める */
box-sizing: border-box;
}
body {
/* デフォルトの余白を消す */
margin: 0;
/* 最小でもウィンドウの高さになるように */
min-height: 100vh;
/* Flexコンテナ(縦) */
display: flex;
flex-direction: column;
}
/* ヘッダー ------------------------------ */
.header {
background-color: #eeeeee;
}
.header-container {
/* 中央寄せ */
width: 100%;
max-width: 60rem;
margin: 0 auto;
padding: 1rem;
}
/* メイン ------------------------------ */
.main {
background-color: #ffffff;
/* Flexコンテナに余白があれば伸ばす */
flex-grow: 1;
}
.main-container {
/* 中央寄せ */
width: 100%;
max-width: 60rem;
margin: 0 auto;
padding: 1rem;
}
/* フッター ------------------------------ */
.footer {
background-color: #eeeeee;
}
.footer-container {
/* 中央寄せ */
width: 100%;
max-width: 60rem;
margin: 0 auto;
padding: 1rem;
}
HTML の要素は、基本的に2種類の並び方のどちらかになっています。
縦に積み重なっていく要素はブロック、文章のように横に並んでいく要素はインラインと呼ばれます。初期設定では、見出しの
h1
p
a
img
CSS で
display
ブロック
セレクタ {
/* 縦に積み重なる */
display: block;
}
インライン
セレクタ {
/* 文章のように横並びになる */
display: inline;
}
ブロックとインラインを切り替えることで、並ぶ方向を設定できますが、柔軟にレイアウトするのはなかなか難しいです。自由にレイアウトできるようにフレックスボックス(Flexbox)という機能を紹介します。
フレックスボックス(Flexbox)とは、レイアウトを設定するための CSS の機能です。要素を横方向または縦方向に並べるレイアウト方法です。
以下の記事によくまとまっているので、まずはできることを見てみましょう。
日本語対応!CSS Flexbox のチートシートを作ったので配布します | Web クリエイターボックス
Flexbox は 外側の Flexコンテナ と その中身の Flexアイテム でできています。
HTML の要素は基本的に縦に積み重なっていきますが、
display
flex
index.html
<div class="container">
<div class="item">One</div>
<div class="item">Two</div>
<div class="item">Three</div>
<div class="item">Four</div>
<div class="item">Five</div>
<div class="item">Six</div>
</div>
style.css
.container {
background-color: #eeeeff;
padding: 1rem;
margin-top: 2rem;
/* Flexコンテナにする */
display: flex;
}
.item {
background-color: #0066cc;
color: #ffffff;
padding: 1rem;
}
flex-direction
row
column
.container {
display: flex;
/* Flexアイテムが並ぶ方向 */
flex-direction: column;
}
参考)https://developer.mozilla.org/ja/docs/Web/CSS/flex-direction
flex-direction
flex-direction
justify-content
flex-start
flex-end
center
space-between
.container {
display: flex;
/* 主軸方向の揃え方 */
justify-content: space-between;
}
参考)https://developer.mozilla.org/ja/docs/Web/CSS/justify-content
align-items
stretch
flex-start
flex-end
center
.container {
display: flex;
/* 交差軸方向の揃え方 */
align-items: center;
/* 高さ */
height: 20rem;
}
参考)https://developer.mozilla.org/ja/docs/Web/CSS/align-items
gap
.container {
display: flex;
/* Flexアイテムの間隔 */
gap: 2rem;
}
flex-wrap
flex-basis
no-wrap
wrap
.container {
display: flex;
/* 折り返しの設定 */
flex-wrap: wrap;
}
Flex アイテムは Flex コンテナの大きさによって伸び縮みさせることができますが、
flex-basis
デフォルトではコンテンツの大きさに合わせる
auto
px
rem
width
height
.item {
/* 基本となる大きさ */
flex-basis: 10rem;
}
参考)https://developer.mozilla.org/ja/docs/Web/CSS/flex-basis
flex-grow
0
1
2以上
.item {
/* 伸ばすかどうか */
flex-grow: 1;
}
参考)https://developer.mozilla.org/ja/docs/Web/CSS/flex-grow
flex-shrink
0
1
2以上
.item {
/* 縮めるかどうか */
flex-shrink: 0;
}
参考)https://developer.mozilla.org/ja/docs/Web/CSS/flex-shrink
参考
とflex-grow
、flex-shrink
をまとめて設定するflex-basis
というプロパティがあります。flex
.item { flex: 1 0 10rem; }
以下のようなタイル状のレイアウトも作ることができます。