自動スクロールする水平(横並び)メニューをnav,ul,liタグとCSSとJavascriptでつくる

常時少しずつスクロールするメニュー

画像と文字の項目が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を使ってサブメニューがある横並びのメニューをつくる