768px以下で動きを変更しています。PCの場合はこのページで動きをご確認ください
HTMLの書き方
head終了タグ直前に自作のCSSを読み込みます。
<link rel="stylesheet" type="text/css" href="css/5-1-11.css">
body内にボタンとナビゲーションのHTMLを記載します。
<link rel="stylesheet" type="text/css" href="css/5-1-11.css"><div class="openbtn"><span></span><span></span><span></span></div>
<nav id="g-nav">
<div id="g-nav-list"><!--ナビの数が増えた場合縦スクロールするためのdiv※不要なら削除-->
<ul>
<li><a href="#">Top</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Service</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</nav>
body 終了タグ直前に jQuery、動きを制御する自作のJS の2 つを読み込みます。
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<!--自作のJS-->
<script src="js/5-1-11.js"></script>
CSSの書き方
/*========= ナビゲーションのためのCSS ===============*/
#g-nav{
/*position:fixed;にし、z-indexの数値を大きくして前面へ*/
position:fixed;
z-index: 999;
/*ナビのスタート位置と形状*/
top:-120%;
left:0;
width:100%;
height: 100vh;/*ナビの高さ*/
background:#999;
/*動き*/
transition: all 0.6s;
}
/*アクティブクラスがついたら位置を0に*/
#g-nav.panelactive{
top: 0;
}
/*ナビゲーションの縦スクロール*/
#g-nav.panelactive #g-nav-list{
/*ナビの数が増えた場合縦スクロール*/
position: fixed;
z-index: 999;
width: 100%;
height: 100vh;/*表示する高さ*/
overflow: auto;
-webkit-overflow-scrolling: touch;
}
/*ナビゲーション*/
#g-nav ul {
/*ナビゲーション天地中央揃え*/
position: absolute;
z-index: 999;
top:50%;
left:50%;
transform: translate(-50%,-50%);
}
/*リストのレイアウト設定*/
#g-nav li{
list-style: none;
text-align: center;
}
#g-nav li a{
color: #333;
text-decoration: none;
padding:10px;
display: block;
text-transform: uppercase;
letter-spacing: 0.1em;
font-weight: bold;
}
/*========= ボタンのためのCSS ===============*/
.openbtn{
position:fixed;
z-index: 9999;/*ボタンを最前面に*/
top:10px;
right: 10px;
cursor: pointer;
width: 50px;
height:50px;
}
/*×に変化*/
.openbtn span{
display: inline-block;
transition: all .4s;
position: absolute;
left: 14px;
height: 3px;
border-radius: 2px;
background-color: #666;
width: 45%;
}
.openbtn span:nth-of-type(1) {
top:15px;
}
.openbtn span:nth-of-type(2) {
top:23px;
}
.openbtn span:nth-of-type(3) {
top:31px;
}
.openbtn.active span:nth-of-type(1) {
top: 18px;
left: 18px;
transform: translateY(6px) rotate(-45deg);
width: 30%;
}
.openbtn.active span:nth-of-type(2) {
opacity: 0;
}
.openbtn.active span:nth-of-type(3){
top: 30px;
left: 18px;
transform: translateY(-6px) rotate(45deg);
width: 30%;
}
JSの書き方
$(".openbtn").click(function () {//ボタンがクリックされたら
$(this).toggleClass('active');//ボタン自身に activeクラスを付与し
$("#g-nav").toggleClass('panelactive');//ナビゲーションにpanelactiveクラスを付与
});
$("#g-nav a").click(function () {//ナビゲーションのリンクがクリックされたら
$(".openbtn").removeClass('active');//ボタンの activeクラスを除去し
$("#g-nav").removeClass('panelactive');//ナビゲーションのpanelactiveクラスも除去
});
768px以下で動きを変更しています。PCの場合はこのページで動きをご確認ください
HTMLの書き方
head終了タグ直前に自作のCSSを読み込みます。
<link rel="stylesheet" type="text/css" href="css/5-1-10.css">
body内に追従するナビゲーションとコンテンツのHTMLを記載します。
<header id="header">
<h1>Logo</h1>
</header>
<div id="container">
<main id="main-area">
<section id="area-1">
<h2>Area 1</h2>
<p>内容が入ります。</p>
<!--/area1--></section>
<section id="area-2">
<h2>Area 2</h2>
<p>内容が入ります。</p>
<!--/area2--></section>
<section id="area-3">
<h2>Area 3</h2>
<p>内容が入ります。</p>
<!--/area3--></section>
<!--/main--></main>
<aside id="sub-area">
<nav>
<ul id="g-navi">
<li><a href="#area-1">Area1</a></li>
<li><a href="#area-2">Area2</a></li>
<li><a href="#area-3">Area3</a></li>
</ul>
</nav>
</aside>
<!--/container--></div>
<footer id="footer">
<small>© copyright.</small>
</footer>
body 終了タグ直前に jQuery、動きを制御する自作のJS の2 つを読み込みます。
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<!--自作のJS-->
<script src="js/5-1-10.js"></script>
CSSの書き方
/*ナビゲーションの固定*/
nav{
/*stickyで固定*/
position: -webkit-sticky;/*Safari*/
position: sticky;
/*固定したい位置*/
top: 100px;
/*ナビゲーションの形状*/
background:#fff;
border: 1px solid #eee;
box-shadow:0 0 5px #ddd;
padding: 20px;
}
/*レイアウトのためのCSS*/
#container{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
#main-area{
width:70%;
}
#sub-area{
width:25%;
padding: 0px 20px 0 0;
}
/*768px以下の見え方*/
@media screen and (max-width:768px){
#main-area{
width:100%;
}
#sub-area{
width:100%;
padding: 20px;
}
nav{
position:relative;/*stickyからrelativeに戻す*/
top:0;
}
}
/* 以下は検証用のレイアウトのための CSS*/
nav ul{
list-style: none;
}
nav ul li a{
text-decoration: none;
color: #666;
padding:10px;
}
section{
padding:300px 0;
}
JSの書き方
//画面が読み込まれたら&リサイズされたら
$(window).on('load resize', function() {
var windowWidth = window.innerWidth;
var elements = $('nav');//position: sticky;を指定している要素
if (windowWidth >= 768) {/*768px以上にIE用のJSをきかせる*/
Stickyfill.add(elements);
} else {
Stickyfill.remove(elements);
}
});
//リンク先のidまでスムーススクロール
//※ページ内リンクを行わない場合は不必要なので削除してください
$('#g-navi li a').click(function () {
var elmHash = $(this).attr('href');
var pos = $(elmHash).offset().top-0;
$('body,html').animate({scrollTop: pos}, 1000);
return false;
});
768px以下で動きを変更しています。PCの場合はこのページで動きをご確認ください
HTMLの書き方
head終了タグ直前に自作のCSSを読み込みます。
<link rel="stylesheet" type="text/css" href="css/5-1-9.css">
body内にヘッダーのナビゲーションとコンテンツのHTMLを記載します。
<header id="header" class="DownMove">
<h1>Logo</h1>
<nav>
<ul id="g-navi">
<li><a href="#area-1">Area1</a></li>
<li><a href="#area-2">Area2</a></li>
<li><a href="#area-3">Area3</a></li>
<li><a href="#area-4">Area4</a></li>
</ul>
</nav>
</header>
<main>
<section id="area-1">
<h2>Area 1</h2>
<p>内容が入ります。</p>
<!--/area1--></section>
<section id="area-2"><!--Area2まできたらheaderが消え、上にスクロールすると復活します。-->
<h2>Area 2</h2>
<p>内容が入ります。</p>
<!--/area2--></section>
<section id="area-3">
<h2>Area 3</h2>
<p>内容が入ります。</p>
<!--/area3--></section>
<section id="area-4">
<h2>Area 4</h2>
<p>内容が入ります。</p>
<!--/area4--></section>
<!--/main--></main>
<footer id="footer">
<small>© copyright.</small>
</footer>
body 終了タグ直前に jQuery、動きを制御する自作のJS の2 つを読み込みます。
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<!--自作のJS-->
<script src="js/5-1-9.js"></script>
CSSの書き方
/*========= スクロール途中でヘッダーが表示&非表示するためのCSS ===============*/
#header{
/*fixedで上部固定*/
position: fixed;
height: 70px;
width:100%;
z-index: 999;/*最前面へ*/
/*以下はレイアウトのためのCSS*/
display: flex;
justify-content: space-between;
align-items: center;
background:#333;
color:#fff;
text-align: center;
padding: 20px;
}
/* 上に上がる動き */
#header.UpMove{
animation: UpAnime 0.5s forwards;
}
@keyframes UpAnime{
from {
opacity: 1;
transform: translateY(0);
}
to {
opacity: 0;
transform: translateY(-100px);
}
}
/* 下に下がる動き */
#header.DownMove{
animation: DownAnime 0.5s forwards;
}
@keyframes DownAnime{
from {
opacity: 0;
transform: translateY(-100px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* 以下は検証用のレイアウトのための CSS*/
nav ul{
list-style: none;
display: flex;
justify-content: center;
}
nav ul li a{
text-decoration: none;
color: #666;
padding:10px;
}
section{
padding:300px 0;
}
JSの書き方
var beforePos = 0;//スクロールの値の比較用の設定
//スクロール途中でヘッダーが消え、上にスクロールすると復活する設定を関数にまとめる
function ScrollAnime() {
var elemTop = $('#area-2').offset().top;//#area-2の位置まできたら
var scroll = $(window).scrollTop();
//ヘッダーの出し入れをする
if(scroll == beforePos) {
//IE11対策で処理を入れない
}else if(elemTop > scroll || 0 > scroll - beforePos){
//ヘッダーが上から出現する
$('#header').removeClass('UpMove'); //#headerにUpMoveというクラス名を除き
$('#header').addClass('DownMove');//#headerにDownMoveのクラス名を追加
}else {
//ヘッダーが上に消える
$('#header').removeClass('DownMove');//#headerにDownMoveというクラス名を除き
$('#header').addClass('UpMove');//#headerにUpMoveのクラス名を追加
}
beforePos = scroll;//現在のスクロール値を比較用のbeforePosに格納
}
// 画面をスクロールをしたら動かしたい場合の記述
$(window).scroll(function () {
ScrollAnime();//スクロール途中でヘッダーが消え、上にスクロールすると復活する関数を呼ぶ
});
// ページが読み込まれたらすぐに動かしたい場合の記述
$(window).on('load', function () {
ScrollAnime();//スクロール途中でヘッダーが消え、上にスクロールすると復活する関数を呼ぶ
});
//リンク先のidまでスムーススクロール
//※ページ内リンクを行わない場合は不必要なので削除してください
var headerH = $("#header").outerHeight(true);//headerの高さを取得
$('#g-navi li a').click(function () {
var elmHash = $(this).attr('href');
var pos = $(elmHash).offset().top-headerH;//header分の高さを引いた高さまでスクロール
$('body,html').animate({scrollTop: pos}, 1000);
return false;
});
768px以下で動きを変更しています。PCの場合はこのページで動きをご確認ください
HTMLの書き方
head終了タグ直前に自作のCSSを読み込みます。
<link rel="stylesheet" type="text/css" href="css/5-1-8.css">
body内にヘッダーのナビゲーションとコンテンツのHTMLを記載します。
<header id="header">
<h1>Logo</h1>
<nav>
<ul id="g-navi">
<li><a href="#area-1">Area1</a></li>
<li><a href="#area-2">Area2</a></li>
<li><a href="#area-3">Area3</a></li>
</ul>
</nav>
</header>
<main>
<section id="area-1">
<h2>Area 1</h2>
<p>内容が入ります。</p>
<!--/area1--></section>
<section id="area-2">
<h2>Area 2</h2>
<p>内容が入ります。</p>
<!--/area2--></section>
<section id="area-3">
<h2>Area 3</h2>
<p>内容が入ります。</p>
<!--/area3--></section>
<section id="area-4">
<h2>Area 4</h2>
<p>内容が入ります。</p>
<!--/area4--></section>
<!--/main--></main>
<footer id="footer">
<small>© copyright.</small>
</footer>
body 終了タグ直前に jQuery、動きを制御する自作のJS の2 つを読み込みます。
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<!--自作のJS-->
<script src="js/5-1-8.js"></script>
CSSの書き方
/*========= スクロール途中からヘッダーの高さが小さくなるためのCSS ===============*/
#header{
/*はじめの高さを設定*/
height: 170px;
width:100%;
/*以下はレイアウトのためのCSS*/
display: flex;
justify-content: space-between;
align-items: center;
background:#333;
color:#fff;
text-align: center;
padding: 20px;
}
/*HeightMinというクラス名がついたら高さを小さく、上部固定に*/
#header.HeightMin{
position: fixed;
z-index: 999;/*最前面へ*/
height:70px;
animation: DownAnime 0.5s forwards;
}
@keyframes DownAnime{
from {
opacity: 0;
transform: translateY(-170px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* 以下は検証用のレイアウトのための CSS*/
nav ul{
list-style: none;
display: flex;
justify-content: center;
}
nav ul li a{
text-decoration: none;
color: #666;
padding:10px;
}
section{
padding:300px 0;
}
JSの書き方
var headerH = $("#header").outerHeight(true);//headerの高さを取得
//スクロール途中からヘッダーの高さを変化させるための設定を関数でまとめる
function FixedAnime() {
//ヘッダーの高さを取得
var scroll = $(window).scrollTop();
if (scroll >= headerH){//ヘッダーの高さを超えたら
$('#header').addClass('HeightMin');//#headerについているHeightMinというクラス名を付与
}else{
$('#header').removeClass('HeightMin');//HeightMinというクラス名を除去
}
}
// 画面をスクロールをしたら動かしたい場合の記述
$(window).scroll(function () {
FixedAnime();//スクロール途中からヘッダーの高さを変化させる関数を呼ぶ
});
// ページが読み込まれたらすぐに動かしたい場合の記述
$(window).on('load', function () {
FixedAnime();//スクロール途中からヘッダーの高さを変化させる関数を呼ぶ
});
//リンク先のidまでスムーススクロール
//※ページ内リンクを行わない場合は不必要なので削除してください
$('#g-navi li a').click(function () {
var headerVal = $("#header").outerHeight(true); //現在のheaderの高さを取得
//ヘッダーが高さの状態を取得してスクロールする範囲を調整する
var scroll = $(window).scrollTop(); //スクロール
var adjust = 0 //調整の変数
if(scroll <= headerVal ){ //スクロールとヘッダーの高さを取得
adjust = 70; //スクロール値がヘッダーの高さ以内であれば調整変数に70を入れる
}
var elmHash = $(this).attr('href'); //hrefを取得
var pos = $(elmHash).offset().top-headerVal-adjust; //クリックしたheader分の高さと調整分を引いた高さまでスクロール
$('body,html').animate({scrollTop: pos}, 1000);
return false;
});
768px以下で動きを変更しています。PCの場合はこのページで動きをご確認ください
HTMLの書き方
head終了タグ直前に自作のCSSを読み込みます。
<link rel="stylesheet" type="text/css" href="css/5-1-7.css">
body内にヘッダーのナビゲーションとハンバーガーメニュー、コンテンツのHTMLを記載します。
<header id="header">
<h1>Logo</h1>
<nav id="g-navi">
<ul>
<li><a href="#area-1">Area1</a></li>
<li><a href="#area-2">Area2</a></li>
<li><a href="#area-3">Area3</a></li>
</ul>
</nav>
</header>
<div class="openbtn"><span></span><span></span><span></span></div>
<main>
<section id="area-1">
<h2>Area 1</h2>
<p>内容が入ります。</p>
<!--/area1--></section>
<section id="area-2">
<h2>Area 2</h2>
<p>内容が入ります。</p>
<!--/area2--></section>
<section id="area-3">
<h2>Area 3</h2>
<p>内容が入ります。</p>
<!--/area3--></section>
<!--/main--></main>
<footer id="footer">
<small>© copyright.</small>
</footer>
body終了タグ直前にjQuery、動きを制御する自作のJSの2つを読み込みます。
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<!--自作のJS-->
<script src="js/5-1-7.js"></script>
CSSの書き方
/*========= 途中からハンバーガーメニューに変化するのためのCSS ===============*/
/*========= ボタンのためのCSS ===============*/
/*ボタン全体の形状*/
.openbtn{
/*はじめは非表示に*/
display: none;
/*ボタンの位置*/
position:fixed;
top:10px;
right: 10px;
z-index: 999;
/*ボタンの形状*/
background:#666;
cursor: pointer;
width: 50px;
height:50px;
border-radius: 5px;
}
/*ボタンのアイコン設定*/
.openbtn span{
display: inline-block;
transition: all .4s;
position: absolute;
left: 14px;
height: 3px;
border-radius: 2px;
background-color: #fff;
width: 45%;
}
.openbtn span:nth-of-type(1) {
top:15px;
}
.openbtn span:nth-of-type(2) {
top:23px;
}
.openbtn span:nth-of-type(3) {
top:31px;
}
/*activeクラスが付与された後のボタンのアイコン設定*/
.openbtn.active span:nth-of-type(1) {
top: 18px;
left: 18px;
transform: translateY(6px) rotate(-45deg);
width: 30%;
}
.openbtn.active span:nth-of-type(2) {
opacity: 0;
}
.openbtn.active span:nth-of-type(3){
top: 30px;
left: 18px;
transform: translateY(-6px) rotate(45deg);
width: 30%;
}
/*fadeDownクラスが付与された後のボタンの出現アニメーション設定*/
.fadeDown {
animation-name: fadeDownAnime;
animation-duration: 0.5s;
animation-fill-mode: forwards;
opacity: 0;
display: block;
}
@keyframes fadeDownAnime{
from {
opacity: 0;
transform: translateY(-100px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/*========= ヘッダーナビゲーションのためのCSS ===============*/
/*==ヘッダーの形状*/
#header{
height: 70px;
width:100%;
display: flex;
justify-content: space-between;
align-items: center;
background:#333;
color:#fff;
text-align: center;
padding: 20px;
}
/*.doneクラスがついたヘッダー*/
#header.dnone {
opacity: 0;/*透過0にして非表示に*/
}
/*メニューボタンをクリックした際に付与されるpanelactiveクラスがついたら*/
#header.dnone.panelactive {
opacity: 1;/*不透明にして出現*/
}
/*==ヘッダーのテキストナビゲーションの形状*/
#g-navi ul{
list-style: none;
display: flex;
justify-content: center;
}
#g-navi ul li a{
display: block;
text-decoration: none;
color: #666;
padding:10px;
}
#g-navi ul li.current a,
#g-navi ul li a:hover{
color:#fff;
}
/*.doneクラスがついたヘッダーのテキストナビゲーションの形状*/
#header.dnone #g-navi{
/*固定位置にして最背面に*/
position:fixed;
top: 0;
left: 0;
z-index: -1;
/*高さと幅*/
width:100%;
height: 100vh;
/*天地中央&テキスト中央揃え*/
display: flex;
justify-content: center;
align-items: center;
text-align: center;
/*はじめは透過0に*/
opacity: 0;
transition: all 0.4s;
}
/*メニューボタンをクリックした際に付与されるpanelactiveクラスがついたナビゲーションの形状*/
#header.dnone.panelactive #g-navi{
opacity: 1;/*不透明に*/
z-index:3;/*最前面に*/
background:#eee;
}
#header.dnone.panelactive #g-navi ul{
display:block;/*flexの横並びをblockにして縦並びに*/
}
/*リストの形状*/
#header.dnone.panelactive #g-navi li a{
color: #333;
text-decoration: none;
padding:10px;
display: block;
text-transform: uppercase;
letter-spacing: 0.1em;
font-weight: bold;
transition:all 0.3s;
}
/* 以下は検証用のレイアウトのための CSS*/
section{
padding:300px 0;
}
JSの書き方
//スクロールをするとハンバーガーメニューに変化するための設定を関数でまとめる
function FixedAnime() {
//ヘッダーの高さを取得
var headerH = $('#header').outerHeight(true);
var scroll = $(window).scrollTop();
if (scroll >= headerH){//ヘッダーの高さ以上までスクロールしたら
$('.openbtn').addClass('fadeDown');//.openbtnにfadeDownというクラス名を付与して
$('#header').addClass('dnone');//#headerにdnoneというクラス名を付与
}else{//それ以外は
$('.openbtn').removeClass('fadeDown');//fadeDownというクラス名を除き
$('#header').removeClass('dnone');//dnoneというクラス名を除く
}
}
// 画面をスクロールをしたら動かしたい場合の記述
$(window).scroll(function () {
FixedAnime();//スクロールをするとハンバーガーメニューに変化するための関数を呼ぶ
});
// ページが読み込まれたらすぐに動かしたい場合の記述
$(window).on('load', function () {
FixedAnime();//スクロールをするとハンバーガーメニューに変化するための関数を呼ぶ
});
//ボタンをクリックした際のアニメーションの設定
$(".openbtn").click(function () {//ボタンがクリックされたら
$(this).toggleClass('active');//ボタン自身に activeクラスを付与し
$("#header").toggleClass('panelactive');//ヘッダーにpanelactiveクラスを付与
});
$("#g-navi li a").click(function () {//ナビゲーションのリンクがクリックされたら
$(".openbtn").removeClass('active');//ボタンの activeクラスを除去し
$("#header").removeClass('panelactive');//ヘッダーのpanelactiveクラスも除去
});
//リンク先のidまでスムーススクロール
//※ページ内リンクを行わない場合は不必要なので削除してください
$('#g-navi li a').click(function () {
var elmHash = $(this).attr('href');
var pos = $(elmHash).offset().top-0;
$('body,html').animate({scrollTop: pos}, 1000);
return false;
});