常時少しずつスクロールするメニュー
画像と文字の項目が20個のサンプル
<nav class="scroll_horizontal_menu">
<ul>
<li><a href=""><img src="/img/svg/c_airplane.svg" style="height:1em;">メニュー1</a></li>
<li><a href=""><img src="/img/svg/c_apple.svg" style="height:1em;">メニュー2</a></li>
<li><a href=""><img src="/img/svg/c_arrowb.svg" style="height:1em;">メニュー3</a></li>
<li><a href=""><img src="/img/svg/c_arrowl.svg" style="height:1em;">メニュー4</a></li>
<li><a href=""><img src="/img/svg/c_arrowr.svg" style="height:1em;">メニュー5</a></li>
<li><a href=""><img src="/img/svg/c_arrowt.svg" style="height:1em;">メニュー6</a></li>
<li><a href=""><img src="/img/svg/c_bai.svg" style="height:1em;">メニュー7</a></li>
<li><a href=""><img src="/img/svg/c_battery.svg" style="height:1em;">メニュー8</a></li>
<li><a href=""><img src="/img/svg/c_book.svg" style="height:1em;">メニュー9</a></li>
<li><a href=""><img src="/img/svg/c_bottom.svg" style="height:1em;">メニュー10</a></li>
<li><a href=""><img src="/img/svg/c_bowl.svg" style="height:1em;">メニュー11</a></li>
<li><a href=""><img src="/img/svg/c_bowl2.svg" style="height:1em;">メニュー12</a></li>
<li><a href=""><img src="/img/svg/c_bullets.svg" style="height:1em;">メニュー13</a></li>
<li><a href=""><img src="/img/svg/c_burger.svg" style="height:1em;">メニュー14</a></li>
<li><a href=""><img src="/img/svg/c_camera.svg" style="height:1em;">メニュー15</a></li>
<li><a href=""><img src="/img/svg/c_car.svg" style="height:1em;">メニュー16</a></li>
<li><a href=""><img src="/img/svg/c_car2.svg" style="height:1em;">メニュー17</a></li>
<li><a href=""><img src="/img/svg/c_car3.svg" style="height:1em;">メニュー18</a></li>
<li><a href=""><img src="/img/svg/c_cart.svg" style="height:1em;">メニュー19</a></li>
<li><a href=""><img src="/img/svg/c_cellphone.svg" style="height:1em;">メニュー20</a></li>
</ul>
</nav>
画像と文字の項目が3個のサンプル
<nav class="scroll_horizontal_menu">
<ul>
<li><a href=""><img src="/img/svg/c_check.svg" style="height:1em;">メニュー21</a></li>
<li><a href=""><img src="/img/svg/c_clock.svg" style="height:1em;">メニュー22</a></li>
<li><a href=""><img src="/img/svg/c_clock2.svg" style="height:1em;">メニュー21</a></li>
</ul>
</nav>
画像の項目が3個のサンプル
<nav class="scroll_horizontal_menu">
<ul>
<li><a href=""><img src="/img/sample/car1.jpg" style="height:120px;"></a></li>
<li><a href=""><img src="/img/sample/car2.jpg" style="height:120px;"></a></li>
<li><a href=""><img src="/img/sample/car3.jpg" style="height:120px;"></a></li>
</ul>
</nav>
項目ごとに一気にスクロールするメニュー
画像と文字の項目が20個のサンプル
<nav class="scroll_horizontal_menu2">
<ul>
<li><a href=""><img src="/img/svg/c_airplane.svg" style="height:1em;">メニュー1</a></li>
<li><a href=""><img src="/img/svg/c_apple.svg" style="height:1em;">メニュー2</a></li>
<li><a href=""><img src="/img/svg/c_arrowb.svg" style="height:1em;">メニュー3</a></li>
<li><a href=""><img src="/img/svg/c_arrowl.svg" style="height:1em;">メニュー4</a></li>
<li><a href=""><img src="/img/svg/c_arrowr.svg" style="height:1em;">メニュー5</a></li>
<li><a href=""><img src="/img/svg/c_arrowt.svg" style="height:1em;">メニュー6</a></li>
<li><a href=""><img src="/img/svg/c_bai.svg" style="height:1em;">メニュー7</a></li>
<li><a href=""><img src="/img/svg/c_battery.svg" style="height:1em;">メニュー8</a></li>
<li><a href=""><img src="/img/svg/c_book.svg" style="height:1em;">メニュー9</a></li>
<li><a href=""><img src="/img/svg/c_bottom.svg" style="height:1em;">メニュー10</a></li>
<li><a href=""><img src="/img/svg/c_bowl.svg" style="height:1em;">メニュー11</a></li>
<li><a href=""><img src="/img/svg/c_bowl2.svg" style="height:1em;">メニュー12</a></li>
<li><a href=""><img src="/img/svg/c_bullets.svg" style="height:1em;">メニュー13</a></li>
<li><a href=""><img src="/img/svg/c_burger.svg" style="height:1em;">メニュー14</a></li>
<li><a href=""><img src="/img/svg/c_camera.svg" style="height:1em;">メニュー15</a></li>
<li><a href=""><img src="/img/svg/c_car.svg" style="height:1em;">メニュー16</a></li>
<li><a href=""><img src="/img/svg/c_car2.svg" style="height:1em;">メニュー17</a></li>
<li><a href=""><img src="/img/svg/c_car3.svg" style="height:1em;">メニュー18</a></li>
<li><a href=""><img src="/img/svg/c_cart.svg" style="height:1em;">メニュー19</a></li>
<li><a href=""><img src="/img/svg/c_cellphone.svg" style="height:1em;">メニュー20</a></li>
</ul>
</nav>
画像と文字の項目が3個のサンプル
<nav class="scroll_horizontal_menu2">
<ul>
<li><a href=""><img src="/img/svg/c_check.svg" style="height:1em;">メニュー21</a></li>
<li><a href=""><img src="/img/svg/c_clock.svg" style="height:1em;">メニュー22</a></li>
<li><a href=""><img src="/img/svg/c_clock2.svg" style="height:1em;">メニュー21</a></li>
</ul>
</nav>
画像の項目が7個のサンプル
<nav class="scroll_horizontal_menu2">
<ul>
<li><a href=""><img src="/img/sample/c001.jpg" style="height:120px;"></a></li>
<li><a href=""><img src="/img/sample/c002.jpg" style="height:120px;"></a></li>
<li><a href=""><img src="/img/sample/c003.jpg" style="height:120px;"></a></li>
<li><a href=""><img src="/img/sample/c004.jpg" style="height:120px;"></a></li>
<li><a href=""><img src="/img/sample/c005.jpg" style="height:120px;"></a></li>
<li><a href=""><img src="/img/sample/c006.jpg" style="height:120px;"></a></li>
<li><a href=""><img src="/img/sample/c007.jpg" style="height:120px;"></a></li>
</ul>
</nav>
ソースコード
<script>
function TMamScrollHorizontalMenu(){
this.scrollSpeed=2;//1回でスクロールするpx数
this.fontSize=20;//フォントサイズ(px)
this.nav=[];
this.ul=[];
this.x=[];
this.w=[];
this.flag=[];
//スタイルシートの登録
let style=document.createElement("style");
document.head.appendChild(style);
style.sheet.insertRule(
'nav.scroll_horizontal_menu{'+
'width:100%;max-width:100%;min-width:100%;font-size:'+this.fontSize+'px;'+
'overflow-x:scroll;border:1px solid #b76;padding:0;margin:0 6px 6px 0;'+
'border-radius:10px;box-shadow:4px 4px 4px rgba(0,0,0,0.4);'+
'-ms-overflow-style: none;'+
'scrollbar-width: none;'+
'line-height:1em;'+
'}'
,0
);
let agent=navigator.userAgent;
if(agent.indexOf('MSIE')==-1 && agent.indexOf('Trident')==-1 ){
style.sheet.insertRule(
'nav.scroll_horizontal_menu::-webkit-scrollbar{display: none;}' ,0
);
}
style.sheet.insertRule(
'nav.scroll_horizontal_menu ul{'+
'display:flex;list-style:none;justify-content:flex-start;margin:0;padding:0;'+
'border:none;border-radius:0px;'+
'background:#d87;width:auto;'+
'flex-wrap:nowrap;white-space: nowrap;'+
'position:relative;min-width:3000px;'+
'}'
,0
);
style.sheet.insertRule(
'nav.scroll_horizontal_menu ul li:hover{background:#955;}'
,0
);
//IEはCSSのanimationで一括指定が一部出来ないためバラバラに登録する
style.sheet.insertRule(
'nav.scroll_horizontal_menu ul li{'+
'border-radius:10px 10px 10px 10px;'+
'margin:auto 0;'+
'vertical-align:middle;'+
'animation-name:MamScrollHorizontalMenuAni;'+
'animation-duration:0.8s;'+
'animation-timing-function:ease;'+
'animation-delay:0.0s;'+
'animation-iteration-count:1;'+
'animation-direction:normal;'+
'animation-fill-mode:forwards;'+
'animation-play-state:running;'+
'}'
,0
);
style.sheet.insertRule(
'@keyframes MamScrollHorizontalMenuAni{'+
' 0%{opacity:0.0;} 100%{opacity:1.0;}'+
'}'
,0
);
style.sheet.insertRule(
'nav.scroll_horizontal_menu ul li a{'+
'margin:0;display:block;padding:12px 12px;'+
'text-decoration:none;color:#fff;text-shadow: 1px 2px 3px #333;'+
'border-radius:10px 10px 10px 10px;font-weight:bold;'+
'}'
,0
);
style.sheet.insertRule(
'nav.scroll_horizontal_menu ul li a:active{box-shadow:4px 4px 6px 2px rgba(0,0,0,0.4) inset;}'
,0
);
this.init=function(){
this.nav=document.querySelectorAll("nav.scroll_horizontal_menu");
this.ul=document.querySelectorAll("nav.scroll_horizontal_menu ul");
for(let i=0;i<this.ul.length;i++){
this.flag[i]=false;
this.x[i]=0;
this.w[i]=0;
let w=0;
for(let j=0;j<this.ul[i].children.length;j++){
w+=parseInt(window.getComputedStyle(this.ul[i].children[j]).width);
}
this.w[i]=parseInt(window.getComputedStyle(this.ul[i].children[0]).width)
this.ul[i].style.width=w+'px';
}
setTimeout(this.scroll.bind(this),1000);
}
this.scroll=function(){
for(let i=0;i<this.ul.length;i++){
let li=this.ul[i].children[0];
this.x[i]+=this.scrollSpeed;
if(this.x[i]>this.w[i]){
this.ul[i].appendChild(li);
this.x[i]=0;
this.w[i]=parseInt(window.getComputedStyle(this.ul[i].children[0]).width);
this.ul[i].style.left=this.x[i];
}else{
this.ul[i].style.left=-this.x[i]+'px';
}
}
setTimeout(this.scroll.bind(this),33);
}
window.addEventListener("DOMContentLoaded",function(){
this.init();
}.bind(this));
}
function TMamScrollHorizontalMenu2(){
this.scrollSpeed=8;//1回でスクロールするpx数
this.fontSize=20;//フォントサイズ(px)
this.nav=[];
this.ul=[];
this.x=[];
this.w=[];
this.flag=[];
//スタイルシートの登録
let style=document.createElement("style");
document.head.appendChild(style);
style.sheet.insertRule(
'nav.scroll_horizontal_menu2{'+
'width:100%;max-width:100%;min-width:100%;font-size:'+this.fontSize+'px;'+
'overflow-x:scroll;border:1px solid #34b;padding:0;margin:0 6px 6px 0;'+
'border-radius:10px;box-shadow:4px 4px 4px rgba(0,0,0,0.4);'+
'-ms-overflow-style: none;'+
'scrollbar-width: none;'+
'line-height:1em;'+
'}'
,0
);
let agent=navigator.userAgent;
if(agent.indexOf('MSIE')==-1 && agent.indexOf('Trident')==-1 ){
style.sheet.insertRule(
'nav.scroll_horizontal_menu2::-webkit-scrollbar{display: none;}' ,0
);
}
style.sheet.insertRule(
'nav.scroll_horizontal_menu2 ul{'+
'display:flex;list-style:none;justify-content:flex-start;margin:0;padding:0;'+
'border:none;border-radius:0px;'+
'background:#34d;width:auto;'+
'flex-wrap:nowrap;white-space: nowrap;'+
'position:relative;min-width:3000px;'+
'}'
,0
);
style.sheet.insertRule(
'nav.scroll_horizontal_menu2 ul li:hover{background:#12a;}'
,0
);
//IEはCSSのanimationで一括指定が一部出来ないためバラバラに登録する
style.sheet.insertRule(
'nav.scroll_horizontal_menu2 ul li{'+
'border-radius:10px 10px 10px 10px;'+
'margin:auto 0;'+
'animation-name:MamScrollHorizontalMenu2Ani;'+
'animation-duration:0.8s;'+
'animation-timing-function:ease;'+
'animation-delay:0.0s;'+
'animation-iteration-count:1;'+
'animation-direction:normal;'+
'animation-fill-mode:forwards;'+
'animation-play-state:running;'+
'}'
,0
);
style.sheet.insertRule(
'@keyframes MamScrollHorizontalMenu2Ani{'+
' 0%{opacity:0.0;} 100%{opacity:1.0;}'+
'}'
,0
);
style.sheet.insertRule(
'nav.scroll_horizontal_menu2 ul li a{'+
'margin:0;display:block;padding:12px 12px;'+
'text-decoration:none;color:#fff;text-shadow: 1px 2px 3px #333;'+
'border-radius:10px 10px 10px 10px;font-weight:bold;'+
'}'
,0
);
style.sheet.insertRule(
'nav.scroll_horizontal_menu2 ul li a:active{box-shadow:4px 4px 6px 2px rgba(0,0,0,0.4) inset;}'
,0
);
this.init=function(){
this.nav=document.querySelectorAll("nav.scroll_horizontal_menu2");
this.ul=document.querySelectorAll("nav.scroll_horizontal_menu2 ul");
for(let i=0;i<this.ul.length;i++){
this.flag[i]=false;
this.x[i]=0;
this.w[i]=0;
let w=0;
for(let j=0;j<this.ul[i].children.length;j++){
w+=parseInt(window.getComputedStyle(this.ul[i].children[j]).width);
}
this.w[i]=parseInt(window.getComputedStyle(this.ul[i].children[0]).width)
this.ul[i].style.width=w+'px';
setTimeout(this.scroll.bind(this),3000,i);
}
}
this.scroll=function(i){
let li=this.ul[i].children[0];
this.x[i]+=this.scrollSpeed;
if(this.x[i]>this.w[i]){
this.ul[i].appendChild(li);
this.x[i]=0;
this.w[i]=parseInt(window.getComputedStyle(this.ul[i].children[0]).width);
this.ul[i].style.left=this.x[i];
setTimeout(this.scroll.bind(this),2000,i);
}else{
this.ul[i].style.left=-this.x[i]+'px';
setTimeout(this.scroll.bind(this),33,i);
}
}
window.addEventListener("DOMContentLoaded",function(){
this.init();
}.bind(this));
}
MamScrollHorizontalMenu =new TMamScrollHorizontalMenu();
MamScrollHorizontalMenu2=new TMamScrollHorizontalMenu2();
</script>
垂直(縦並び)メニューのサンプル一覧
nav,ul,liタグとCSSを使って縦並びのメニューをつくる
CSSとJavascriptで円弧に沿った形の縦並びのメニューを作る
nav,ul,liタグとCSSを使ってカラフルなボタンの縦並びのメニューをつくる
nav,ul,liタグとCSSを使ってカラフルな縦並びのメニューをつくる
nav,ul,liタグとCSSを使って立体ボタンの縦並びのメニューをつくる
nav,ul,liタグとCSSを使って立体ボタンのカラフルな縦並びのメニューをつくる
水平(横並び)メニューのサンプル一覧
nav,ul,liタグとCSSを使って横並びのメニューをつくる
nav,ul,liタグとCSSとJavascriptで水平(横並び)自動スクロールするメニューをつくる
CSSでSVGアイコンを下部に固定した横並びのメニューがあるページ作る
nav,ul,liタグとCSSを使ってサブメニューがある横並びのメニューをつくる
