サンプルレイアウト
目次
概要
- ヘッダ、左メニュー、メインパネル、サイドバー、フッターから構成される画面のサンプルを示します。
- JavaScript は使用していません。CSS のみで実装しています。
- ヘッダは上部に、フッターは下部に固定化されます。
- 左メニューはハンバーガーアイコンで開閉できます。
- 画面の横幅が狭い場合、サイドバーは非表示となります。
≡ Header |
Menu |
Main |
Side |
Footer |
実例
ソースコード
index.html
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>サンプルレイアウト</title>
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<!-- ヘッダー -->
<div class="header">
<!-- ハンバーガーメニュー -->
<div class="hamburger-menu">
<input type="checkbox" id="hamburger-checkbox" checked>
<label for="hamburger-checkbox" class="hamburger-lines arrow">
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
</label>
</div>
<!-- ヘッダーロゴ -->
<div class="header-logo">
🏐
</div>
<!-- ヘッダータイトル -->
<div class="header-title">
Header
</div>
<!-- ユーザ名 -->
<div class="header-user">
山田太郎
</div>
<!-- ログアウト -->
<div class="header-menu">
ログアウト
</div>
</div>
<!-- ボディ(左メニュー+メインパネル+サイドバー) -->
<div class="body">
<!-- 左メニュー -->
<div class="menu">
<ul>
<li><div class="menu-item">Menu#1</div>
<ul>
<li><div class="menu-item">Menu#1-1</div>
<ul>
<li><div class="menu-item">Menu#1-1-1</div></li>
<li><div class="menu-item">Menu#1-1-2</div></li>
<li><div class="menu-item">Menu#1-1-3</div></li>
</ul>
</li>
<li><div class="menu-item">Menu#1-2</div></li>
<li><div class="menu-item">Menu#1-3</div></li>
</ul>
</li>
<li><div class="menu-item">Menu#2</div></li>
<li><div class="menu-item">Menu#3</div></li>
</ul>
</div>
<!-- メインパネル -->
<div class="main">
<div class="main-title">
Main
</div>
<div>Main...</div>
<div>Main...</div>
<div>Main...</div>
</div>
<!-- サイドバー -->
<div class="side">
<div>Side</div>
<div>Side</div>
<div>Side</div>
</div>
</div>
<!-- フッター -->
<div class="footer">
Footer
</div>
</div>
</body>
</html>
style.css
/* 変数定義 */
:root {
--default-padding: .5rem;
--default-font-family: "メイリオ";
--default-font-size: 14px;
--default-font-color: #444;
--default-border-color: #ccc;
--default-transition-duration: .2s;
--header-height: 3rem;
--header-background-color: #000;
--header-title-font-size: 18px;
--header-title-font-weight: bold;
--header-font-color: #fff;
--menu-width: 10rem;
--menu-background-color: #ddd;
--menu-hover-background-color: #ccc;
--main-background-color: #eee;
--main-title-font-size: 180%;
--main-title-font-weight: bold;
--side-background-color: #ddd;
--side-width: 10rem;
--footer-height: 2rem;
--footer-background-color: #000;
--footer-font-color: #fff;
}
/* 全体設定 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* コンテナ */
.container {
/* 文字のデフォルト設定 */
font-family: var(--default-font-family);
font-size: var(--default-font-size);
color: var(--default-font-color);
/* ヘッダー */
.header {
/* ヘッダーを画面上部固定位置に張り付ける */
position: sticky;
top: 0;
/* 構成要素を横方向に並べる */
display: flex;
/* 高さ・背景色・文字色 */
height: var(--header-height);
background-color: var(--header-background-color);
color: var(--header-font-color);
/* ハンバーガーメニュー */
.hamburger-menu {
display: flex;
/* トランジション制御のためのチェックボックスは表示しない */
#hamburger-checkbox {
display: none;
}
/* ハンバーガーアイコン(三本線) */
.hamburger-lines {
/* 縦方向に中央寄せ */
align-self: center;
/* 横方向パディング */
padding: 0 1rem;
/* マウスを乗せた時にマウスカーソルをポインタ型にする */
cursor: pointer;
.hamburger-line {
display: block;
width: 25px;
height: 3px;
margin: 5px 0;
background-color: #fff;
border-radius: 1.5px;
/* 開閉時にトランジションをかける */
transition: var(--default-transition-duration);
}
}
/* メニューを閉じた時のハンバーガーアイコン(×タイプ) */
#hamburger-checkbox:checked ~ .hamburger-lines.cross {
.hamburger-line {
&:nth-child(1) { transform: rotate(45deg) translate(6px, 5px); }
&:nth-child(2) { opacity: 0; }
&:nth-child(3) { transform: rotate(-45deg) translate(6px, -5px); }
}
}
/* メニューを閉じた時のハンバーガーアイコン(←タイプ) */
#hamburger-checkbox:checked ~ .hamburger-lines.arrow {
.hamburger-line {
&:nth-child(1) { transform: rotate(-45deg) translate(-5px, 0px); width: 15px; }
&:nth-child(2) { opacity: 1; }
&:nth-child(3) { transform: rotate(45deg) translate(-4px, 0px); width: 15px; }
}
}
}
/* ヘッダーロゴ */
.header-logo {
/* 縦横方向に中央寄せ */
display: grid;
justify-items: center;
align-content: center;
/* フォント */
font-size: 170%;
}
/* ヘッダータイトル */
.header-title {
/* 横幅最大 */
flex: 1;
/* 縦方向に中央寄せ */
display: grid;
align-content: center;
/* パディング */
padding: 0 var(--default-padding);
/* フォント */
font-weight: var(--header-title-font-weight);
font-size: var(--header-title-font-size);
}
/* ユーザ名 */
.header-user {
/* 縦横方向に中央寄せ */
display: grid;
justify-items: center;
align-content: center;
/* パディング */
padding: 0 var(--default-padding);
}
/* ログアウトメニュー */
.header-menu {
/* 縦横方向に中央寄せ */
display: grid;
justify-items: center;
align-content: center;
/* パディング */
padding: 0 var(--default-padding);
}
}
/* ボディ(左メニュー+メインパネル+サイドメニュー) */
.body {
/* 子要素を横方向に並べる */
display: flex;
/* 左メニュー */
.menu {
/* 閉じてる時の横幅は0 */
width: 0;
/* 高さは画面の高さからヘッダーとフッターを差し引いた高さ */
height: calc(100vh - var(--header-height) - var(--footer-height));
/* 表示しきれない領域はスクロールバー表示 */
overflow-y: auto;
/* 背景色 */
background-color: var(--menu-background-color);
/* メニュー開閉時のトランジション */
transition: var(--default-transition-duration);
ul {
/* リストの・は表示しない */
list-style: none;
li {
/* ボーダー線 */
border-top: 1px solid var(--default-border-color);
border-bottom: 1px solid var(--default-border-color);
border-left: 1px solid var(--default-border-color);
/* 上下のボーダーが重なると線が太くなってしまう問題の対処 */
margin-bottom: -1px;
/* マウスを乗せるとマウスカーソルをポインタ型にする */
cursor: pointer;
/* メニューアイテム */
.menu-item {
/* パディング */
padding: .2rem;
/* マウスを乗せた時 */
&:hover {
/* 背景色を変える */
background-color: var(--menu-hover-background-color);
}
}
}
}
/* 最上位以外のメニューに左インデントをつける */
& > ul ul {
margin-left: .7rem;
}
}
/* メインパネル */
.main {
/* 左右に最大表示する */
flex: 1;
/* 高さは画面の高さからヘッダーとフッターを差し引いた高さ */
height: calc(100vh - var(--header-height) - var(--footer-height));
/* 表示しきれない領域はスクロールバー表示 */
overflow: auto;
/* 背景色 */
background-color: var(--main-background-color);
/* パディング */
padding: var(--default-padding);
/* メインパネルタイトル */
.main-title {
font-size: var(--main-title-font-size);
font-weight: var(--main-title-font-weight);
}
}
/* サイドバー */
.side {
/* 横幅 */
width: var(--side-width);
/* 高さは画面の高さからヘッダーとフッターを差し引いた高さ */
height: calc(100vh - var(--header-height) - var(--footer-height));
/* 表示しきれない領域はスクロールバー表示 */
overflow: auto;
/* 背景色 */
background-color: var(--side-background-color);
/* パディング */
padding: var(--default-padding);
}
}
/* フッター */
.footer {
/* フッターを画面上部固定位置に張り付ける */
position: sticky;
bottom: 0;
/* 高さ固定 */
height: var(--footer-height);
/* 縦方向に中央寄せ */
display: grid;
align-content: center;
/* 背景色 */
background-color: var(--footer-background-color);
/* パディング */
padding: var(--default-padding);
/* 文字色 */
color: var(--footer-font-color);
}
}
/* 開いたときの左メニュー */
.header:has(#hamburger-checkbox:checked) ~ .body .menu {
/* 横幅をトランジションして開く */
width: var(--menu-width);
}
/* 画面の横幅が狭いときはサイドバーを非表示にする */
@media (width < 768px) {
.side {
display: none;
}
}
Copyright (C) 2025 杜甫々
初版: 2025年2月16日、最終更新:2025年2月16日
https://www.tohoho-web.com/how2/sample-layout.html