ie7以上から使える。横にスクロールして開くナビゲーションのデモサイトとサンプルコード
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ie7以上から使える。横にスクロールして開くナビゲーションのデモサイトとサンプルコードをメモしました。
横スクロールからナビゲーションを表示するサイトを
最近よくスマートフォンサイトなんかでよく見かけます。
そして見よう見まねで
このサイトのタブレットやスマホの表示にも
取り入れてみました。
今回は、「スマホ」や古めの「ie」でも動くように作りました。
スマホでは「jQuery」のアニメーションでは少々重かったので
CSS3
のtransition
と切り替えて動かしています。
サンプルコード
HTML
今回は#moveElm
を動かしています。
#header
は動かさないため#moveElm
の外に出しています。
HTML <div id="header">
<div class="inner">
<h1>スクロールナビゲーションサンプルサイト</h1>
<div id="nav-btn">
<a href="#nav"><img src="/img/nav-btn.png" alt="ナビゲーション"></a>
</div>
</div>
</div>
<div id="moveElm">
<div id="nav">
<ul>
<li><a href="#">ページ1</a></li>
<li><a href="#">ページ2</a></li>
<li><a href="#">ページ3</a></li>
<li><a href="#">ページ4</a></li>
<li><a href="#">ページ5</a></li>
</ul>
</div>
<div id="main">
<div class="inner">
<h2>スクロールナビゲーションサンプル</h2>
</div>
</div>
<div class="contents">
<div class="inner">
<h2>サンプルサイトの新着情報</h2>
<ul>
<li><a href="#">新着情報1</a></li>
<li><a href="#">新着情報2</a></li>
<li><a href="#">新着情報3</a></li>
<li><a href="#">新着情報4</a></li>
</ul>
</div>
</div>
<div class="contents">
<div class="inner">
<h2>サンプルサイトのコンテンツ</h2>
<p>サンプルサイトのコンテンツです。</p>
</div>
</div>
<div class="contents">
<div class="inner">
<h2>サンプルサイトのコンテンツ2</h2>
<p>サンプルサイトのコンテンツ2です。</p>
</div>
</div>
<div class="contents">
<div class="inner">
<h2>サンプルサイトのコンテンツ3</h2>
<p>サンプルサイトのコンテンツ3です。</p>
</div>
</div>
<div id="footer">
<small>&copy; T-CREATOR</small>
</div>
</div>
CSS
「headタグ内」に書いています。また、適当に装飾しているので、冗長的になっていますが、
ポイントは「#moveElm」に「position
CSS <style>
body{
background: #F4F7F9;
font: 13px Raleway,'Helvetica','Hiragino Kaku Gothic ProN',
Meiryo, sans-serif;
color: #526483;
margin: 0;
overflow-x :hidden;
}
img{
border:none;
outline: none;
}
a{
color:#7D4255;
text-decoration: none;
}
ul{
list-style: none;
padding-left: 0;
margin:0;
}
.inner{
max-width: 1080px;
width: 94%;
margin:0 auto;
position: relative;
}
#header{
height:50px;
box-shadow: 0 2px 5px 0 rgba(0,0,0,0.1);
background: #fff;
position:relative;
z-index: 1;
}
h1{
font-size: 14px;
line-height: 50px;
margin: 0;
font-weight: normal;
margin-left: 80px;
}
#nav-btn a{
position: absolute;
display: block;
left:0;
top:0;
width: 50px;
text-align: center;
}
#nav-btn a:hover{
background: #F8F9FC;
}
#nav-btn a img{
height:30px;
padding:10px 0;
vertical-align: bottom;
}
#nav{
width: 30%;
position: absolute;
background: #ECDFE4;
box-shadow: 2px 0 2px 0 rgba(0,0,0,0.1);
height:100%;
left:-30%;
}
#nav a{
display: block;
padding:10px 0;
text-align: center;
border-top:1px solid #fff;
box-shadow: 0 -1px 0 0 #E0CBD3;
}
#main{
height:250px;
background: #B7C4DB;
}
#main .inner{
background: #C8D1E3;
text-align: center;
padding-top:100px;
height:150px;
}
h2{
margin:0;
}
.contents{
padding:10px 0;
margin-bottom: 20px
}
.contents h2{
border-bottom: 1px solid #B7C4DB;
box-shadow: 0 1px 0 0 #fff;
padding: 10px 0;
}
.contents li a{
display: block;
padding:10px;
border-bottom:dashed 1px #B7C4DB;
color:#45546D;
}
.contents li a:hover{
background: #EDEFF5;
}
#moveElm{
position: relative;
}
#footer{
border-top : 1px solid #B7C4DB;
padding:10px 0;
text-align: center;
}
</style>
JavaScript
「body」タグの閉じタグの下で読み込んでいます。
JavaScript
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function (){
var moveSpeed = 800;//アニメーションするスピード
var moveWidth = '30%';//アニメーションする横幅
var btn = $('#nav-btn');
var moveElm = $('#moveElm');
var useTransForm = typeof $("body").css("transform");
if(useTransForm === "string"){
moveElm.css({
'transition' :'all '+moveSpeed+'ms ease'
});
}
btn.click(function (e) {
e.preventDefault();
if(!btn.hasClass('active')){
btn.addClass('active');
if(useTransForm === "string"){
moveElm.css({
'transform' : 'translateX('+moveWidth+')'
});
}else{
moveElm.animate({'left':moveWidth},moveSpeed);
}
}else{
btn.removeClass('active');
if(useTransForm === "string"){
moveElm.css({
'transform' : 'translateX(0)'
});
}else{
moveElm.animate({'left':'0'},moveSpeed);
}
}
});
});
</script>
ちょっとコードばかりになってしまいましたが
このままコピペいただければ動くと思います。
記事Article
もっと見る- article
Dockerの利用していないゴミを掃除しディスクスペースを解放するいくつかのやり方を紹介
- article
Next.js のバンドルサイズを可視化する@next/bundle-analyzer の紹介
- article
VSCodeでTypescriptファイルのimport補完で相対パスではなくエイリアスするための設定
- article
UUIDより短いユニークなIDを生成できるnpmライブラリnanoidの使い方
- article
【解決方法】TypeScript発生したTS2564 エラーの対処
- article
express で IP を取得する際などに利用する req.connection 非推奨(deprecated)の対処