静的HTMLよく使われるjQueryでのHTMLパーツの共通化。インラインフレームよりも便利なのでよく利用します。
インラインフレームはボーダーやスクロール、高さなどいろいろ面倒なので好きではありません。
今回はBootstrapでこのパーツの共有化が必要になり、いろいろ試したんですがBootstrap4で上手く動かない、あれこれ試してみました。
1 2 3 4 5 6 7 |
<script> $(function() { $("#header").load("header.html #header-content"); $("#side").load("side.html #side-content"); $("#footer").load("footer.html #footer-content"); }); </script> |
原因はjQueryの読み込み場所とバージョン
Bootstrap4のCDNでは</body>の直前に「最初にjQuery、次にPopper.js、次にBootstrap JS」と読み込みます。
1 2 3 4 |
<!-- 最初にjQuery、次にPopper.js、次にBootstrap JS --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> |
このjQueryを</body>の直前ではなく</head>の前に持って行きます。そしてjQueryのバージョンはBootstrap3のCDNに置き換えます。
1 2 |
<!-- jquery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> |
Bootstrap4のjQueryバージョンは「v4.1.0時点でjQuery1.9.1以上に対応」ですので「1.11.3」でも大丈夫。
</head>の前に
1 2 3 4 5 6 7 8 |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $("#header").load("header.html"); $("#side").load("side.html"); $("#footer").load("footer.html"); }); </script> |
これでBootstrap4でも問題無くHTMLパーツの共有化ができました。
HTMLサンプル
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Font Awesome CSS --> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" > <title>Bootstrap4/共通パーツの読み込み【トップページ】</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script> $(function() { $("#header-outer").load("header.html #header-inner"); $("#side-outer").load("side.html #side-inner"); $("#footer-outer").load("footer.html #footer-inner"); }); </script> </head> <body> <!-- header-innerの読み込み --> <div id="header-outer"></div> <!-- /header-innerの読み込み --> <!-- Page Content --> <div class="container my-5"> <!-- .row --> <div class="row"> <!-- col-md-9---> <div class="col-md-9"> <img src="http://placehold.it/900x450" class="img-fluid mb-4" alt=""/> <img src="http://placehold.it/900x450" class="img-fluid mb-4" alt=""/> <img src="http://placehold.it/900x450" class="img-fluid" alt=""/> </div> <!-- /col-md-9---> <div class="col-md-3"> <!-- side-nnerの読み込み --> <div id="side-outer"></div> <!-- side-nnerの読み込み --> </div> </div> <!-- /.row --> </div> <!-- /Page Content --> <!-- footer-innerの読み込み --> <div id="footer-outer"></div> <!-- /footer-innerの読み込み --> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> </body> </html> |
header.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Font Awesome CSS --> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" > <title>Bootstrap4/共通パーツの読み込み【ヘッダー】</title> </head> <body> <!-- header-inner --> <div id="header-inner"> <img src="http://placehold.it/1500x200" class="img-fluid" alt=""/> </div> <!-- /header-inner --> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> </body> </html> |
side.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Font Awesome CSS --> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" > <title>Bootstrap4/共通パーツの読み込み【サイド】</title> </head> <body> <!-- Page Content --> <div class="container"> <!-- .col-md-3 --> <div class="col-md-3"> <!-- side-inner --> <div id="side-inner"> <img src="http://placehold.it/400x400" class="img-fluid mb-4" alt=""/> <img src="http://placehold.it/400x200" class="img-fluid mb-4" alt=""/> <img src="http://placehold.it/400x200" class="img-fluid mb-4" alt=""/> <img src="http://placehold.it/400x200" class="img-fluid mb-4" alt=""/> <img src="http://placehold.it/400x200" class="img-fluid" alt=""/> </div> <!-- /side-inner --> </div> <!-- /.col-md-3 --> </div> <!-- /Page Content --> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> </body> </html> |
footer.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Font Awesome CSS --> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" > <title>Bootstrap4/共通パーツの読み込み【フッター】</title> </head> <body> <!-- footer-inner --> <div id="footer-inner"> <img src="http://placehold.it/1500x200" class="img-fluid" alt=""/> </div> <!-- /footer-inner --> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> </body> </html> |
※読み込みを $("#header-outer").load("header.html");
としてページ全体を読み込む設定でもいいんですがBootstrapの場合 $("#header-outer").load("header.html #header-inner");
としたほうが共通パーツのイメージが編集しやすい、特にサイドは。
HTMLサンプル
ローカルでの確認はChromeやIEでは上手くいきません、Firefoxならそのままで可能です。
コメント