Memo
Memo
【HTML】共通部分を抜き出す(header footer)
質問
HTMLでホームページを制作すると下層ページなどの全てのページに<head>タグやヘッダー、フッターを挿入しなければいけないため、仮にヘッダーを修正したいとなると他のページ全て修正しなければならない。
工数が多く発生する、かつ修正も抜け漏れが発生する可能性があるため、<head>タグ、ヘッダー、フッターを別のファイルにし、トップページや下層ページでは、そのファイルを読み出す形にしたい。
回答
<head>タグ、ヘッダー、フッターをそれぞれPHPファイルにする。
/
index.html
CSS style.css
img
JS /script.js
/
index.php
head.php
header.php
footer.php
CSS style.css
img
JS /script.js
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- Google アナリティクス -->
<!-- 文字化け回避 -->
<meta charset="UTF-8">
<!-- タブレットの表示設定 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.jsdelivr.net/npm/viewport-extra@1.0.4/dist/viewport-extra.min.js"></script> <!-- タブレット端末でのみ、PC向けデザインの最小幅をviewportの最小幅に設定 -->
<script>
(function(){ var ua = navigator.userAgent var sp = ua.indexOf('iPhone') > -1 || (ua.indexOf('Android') > -1 && ua.indexOf('Mobile') > -1) var tab = !sp && ( ua.indexOf('iPad') > -1 || (ua.indexOf('Macintosh') > -1 && 'ontouchend' in document) || ua.indexOf('Android') > -1 ) if (tab) new ViewportExtra(1000) })()
</script>
<meta name="robots" content="index, follow">
<!-- ページのタイトル -->
<title></title>
<!-- ページの説明分 -->
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge"><!--IE対策-->
<!-- スタイルシートをリンク -->
<link rel="stylesheet" href="css/style.css">
<!-- フォント設定 -->
<link href="https://fonts.googleapis.com/css2?family=Grenze+Gotisch:wght@100&display=swap" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<!-- JQueryを使えるようにするためのコード -->
<script src="https://code.jquery.com/jquery-3.6.4.min.js" integrity="sha256-oP6HI9z1XaZNBrJURtCoUT5SUnxFr8s3BzRl+cbzUq8=" crossorigin="anonymous"></script>
<!-- スクリプトファイルをリンク -->
<script src="js/script.js"></script>
<!-- ▼OGPの設定 -->
<meta property="og:type" content="article">
<meta property="og:title" content=""><!-- ページのタイトル-->
<meta property="og:description" content=""><!--ページの説明分-->
<meta property="og:url" content=""><!--ページURL 絶対パス-->
<meta property="og:image" content="img/ogp.jpg"><!--ページURL 相対パス-->
<meta property="og:site_name" content=""><!--サイト名-->
<meta property="og:locale" content="ja_JP"><!-- -->
<meta property="fb:app_id" content=""><!--facebookのapp id-->
<!-- ▼Twitter Cardsの設定-->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content=""><!--サイト名-->
<!-- ▼ファビコンの設定-->
<link rel="shortcut icon" href="img/favicon.ico"><!--ファビコン-->
<link rel="apple-touch-icon" href="img/Fabcon.png"><!--スマホ用-->
</head>
<body>
<!-- container -->
<div class="container index">
<!-- site header -->
<header id="site-header">
<div class="brand">
<a href="/">
<div class="img">
<img src="img/logo.png" alt="logo">
</div>
</a>
</div>
<nav>
<ul class="">
<li>
<a href="about.html">About</a>
</li>
<li>
<a href="Bicycle.html">Bicycle</a>
</li>
</ul>
</nav>
</header>
<!-- content -->
<div class="content">
<div class="kv">
<div class="img">
<img src="img/mainvisual.png" alt="メインビジュアル画像" class="">
</div>
</div>
<main>
<section id="section_1">
</section>
</main>
<footer id="footer">
<p class="copyright">© 2020 Profile</p>
</footer>
</div>
</div>
<!-- /container -->
</body>
</html>
head.php
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- Google アナリティクス -->
<!-- 文字化け回避 -->
<meta charset="UTF-8">
<!-- タブレットの表示設定 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.jsdelivr.net/npm/viewport-extra@1.0.4/dist/viewport-extra.min.js"></script> <!-- タブレット端末でのみ、PC向けデザインの最小幅をviewportの最小幅に設定 -->
<script>
(function(){ var ua = navigator.userAgent var sp = ua.indexOf('iPhone') > -1 || (ua.indexOf('Android') > -1 && ua.indexOf('Mobile') > -1) var tab = !sp && ( ua.indexOf('iPad') > -1 || (ua.indexOf('Macintosh') > -1 && 'ontouchend' in document) || ua.indexOf('Android') > -1 ) if (tab) new ViewportExtra(1000) })()
</script>
<meta name="robots" content="index, follow">
<!-- ページのタイトル -->
<title><?php echo $title; ?></title>
<!-- ページの説明分 -->
<meta name="description" content="<?php echo $description; ?>">
<meta name="keywords" content="">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge"><!--IE対策-->
<!-- スタイルシートをリンク -->
<link rel="stylesheet" href="css/style.css">
<!-- フォント設定 -->
<link href="https://fonts.googleapis.com/css2?family=Grenze+Gotisch:wght@100&display=swap" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<!-- JQueryを使えるようにするためのコード -->
<script src="https://code.jquery.com/jquery-3.6.4.min.js" integrity="sha256-oP6HI9z1XaZNBrJURtCoUT5SUnxFr8s3BzRl+cbzUq8=" crossorigin="anonymous"></script>
<!-- スクリプトファイルをリンク -->
<script src="js/script.js"></script>
<!-- ▼OGPの設定 -->
<meta property="og:type" content="article">
<meta property="og:title" content="<?php echo $title; ?>"><!-- ページのタイトル-->
<meta property="og:description" content="<?php echo $description; ?>"><!--ページの説明分-->
<meta property="og:url" content=""><!--ページURL 絶対パス-->
<meta property="og:image" content="img/ogp.jpg"><!--ページURL 相対パス-->
<meta property="og:site_name" content="<?php echo $title; ?>"><!--サイト名-->
<meta property="og:locale" content="ja_JP"><!-- -->
<meta property="fb:app_id" content=""><!--facebookのapp id-->
<!-- ▼Twitter Cardsの設定-->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content=""><!--サイト名-->
<!-- ▼ファビコンの設定-->
<link rel="shortcut icon" href="img/favicon.ico"><!--ファビコン-->
<link rel="apple-touch-icon" href="img/Fabcon.png"><!--スマホ用-->
header.php
<!-- site header -->
<header id="site-header">
<div class="brand">
<a href="/">
<div class="img">
<img src="img/logo.png" alt="logo">
</div>
</a>
</div>
<nav>
<ul class="">
<li>
<a href="about.html">About</a>
</li>
<li>
<a href="Bicycle.html">Bicycle</a>
</li>
</ul>
</nav>
</header>
footer.php
<footer id="footer">
<p class="copyright">© 2020 Profile</p>
</footer>
index.php
<?php
$title = '';
$description = '';
$is_home = true; //トップページの判定用の変数
include 'head.php'; // head.php の読み込み
?>
</head>
<!-- container -->
<div class="container index fadeIn">
<?php include 'header.php'; ?>
<div class="content">
<div class="kv">
<div class="img">
<img src="img/mainvisual.png" alt="メインビジュアル画像" class="">
</div>
</div>
<main>
<section id="section_1">
</section>
</main>
<?php include("footer.php"); ?>
</div>
</div>
<!-- /container -->
</body>
</html>