2017-08-30 4 views
1

ほとんど私は、dropdown menuを実装するために、PureCSSの "docs"からdemo codeをコピーしています。ドロップダウンメニューのレスポンスメニュー

私はCodePenを作成しましたが、ここでもコードを共有します。

垂直バージョンでは、サブメニュー項目がホバー上またはクリック時に表示されないという問題があります。

私はこれが意図的なものであると想定しており、タッチデバイスなどのクリックでの公開を可能にするために追加のJavaScript(example)を作成する必要があるかどうかは不明です。私が持っているもの

は次のとおりです。

HTML:

<h1>PureCSS.io Responsive Nav Test</h1> 
<link rel="stylesheet" href="https://unpkg.com/[email protected]/build/grids-responsive-min.css"> 
<link rel="stylesheet" href="https://unpkg.com/[email protected]/build/pure-min.css" integrity="sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w" crossorigin="anonymous"> 
<a href="#" class="custom-toggle" id="toggle"><s class="bar"></s><s class="bar"></s><s class="bar"></s></a> 
<nav class="custom-wrapper pure-menu custom-restricted-width pure-u-1" id="menu"> 
    <div class="pure-menu pure-menu-horizontal custom-can-transform"> 
     <ul id="menu-header-nav-menu" class="pure-menu-list"> 
     <li class="pure-menu-item"> 
      <a class="pure-menu-link" class='pure-menu-link' href="#">One</a> 
     </li> 
     <li class="pure-menu-item"> 
      <a class="pure-menu-link" class='pure-menu-link' href="#">Two</a> 
     </li> 
     <li class="pure-menu-item"> 
      <a class="pure-menu-link" class='pure-menu-link' href="#">Three</a> 
     </li> 
     <li class="pure-menu-item pure-menu-has-children pure-menu-allow-hover"> 
      <a class="pure-menu-link" class='pure-menu-link' href="#">Parent</a> 
      <ul class="pure-menu-children"> 
       <li class="pure-menu-item"> 
       <a class="pure-menu-link" class='pure-menu-link' href="#">Child One</a> 
      </li> 
       <li class="pure-menu-item"> 
       <a class="pure-menu-link" class='pure-menu-link' href="#">Child Two</a> 
      </li> 
      </ul> 
      </li> 
     </ul> 
    </div> 
</nav> 

CSS:

.site-header { 
     position: relative; 
    } 

    .custom-wrapper { 
     margin-bottom: 1em; 
     -webkit-font-smoothing: antialiased; 
     height: 2.1em; 
     overflow: hidden; 
     -webkit-transition: height 0.5s; 
     -moz-transition: height 0.5s; 
     -ms-transition: height 0.5s; 
     transition: height 0.5s; 
    } 

    .custom-wrapper.open { 
     height: 14em; 
    } 

    .custom-wrapper { 
     height: 0; 
    } 

    .custom-toggle { 
     width: 34px; 
     height: 34px; 
     position: absolute; 
     top: 0; 
     right: 0; 
     display: none; 
    } 

    .custom-toggle { 
     display: block; 
    } 

    .custom-toggle .bar { 
     background-color: #777; 
     display: block; 
     width: 20px; 
     height: 2px; 
     border-radius: 100px; 
     position: absolute; 
     top: 18px; 
     right: 7px; 
     -webkit-transition: all 0.5s; 
     -moz-transition: all 0.5s; 
     -ms-transition: all 0.5s; 
     transition: all 0.5s; 
    } 

    .custom-toggle .bar:first-child { 
     -webkit-transform: translateY(-6px); 
     -moz-transform: translateY(-6px); 
     -ms-transform: translateY(-6px); 
     transform: translateY(-6px); 
    } 

    .custom-toggle .bar:last-child { 
     -webkit-transform: translateY(+6px); 
     -moz-transform: translateY(+6px); 
     -ms-transform: translateY(+6px); 
     transform: translateY(+6px); 
    } 

    .custom-toggle.x .bar:last-child { 
     display: none; 
    } 

    .custom-toggle.x .bar { 
     -webkit-transform: rotate(45deg); 
     -moz-transform: rotate(45deg); 
     -ms-transform: rotate(45deg); 
     transform: rotate(45deg); 
    } 

    .custom-toggle.x .bar:first-child { 
     -webkit-transform: rotate(-45deg); 
     -moz-transform: rotate(-45deg); 
     -ms-transform: rotate(-45deg); 
     transform: rotate(-45deg); 
    } 

    @media (min-width: 47.999em) { 
    .custom-toggle { 
     display: none; 
    } 

    .custom-wrapper { 
     height: 3.2em; 
     overflow: visible; 
    } 

    .pure-menu-children .pure-menu-item { 
     background-color: #999; 
    } 
    } 

Javascriptを:

(function (window, document) { 
    var menu = document.getElementById('menu'), 
     WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange':'resize'; 

    function toggleHorizontal() { 
     [].forEach.call(
      document.getElementById('menu').querySelectorAll('.custom-can-transform'), 
      function(el){ 
       el.classList.toggle('pure-menu-horizontal'); 
      } 
    ); 
    }; 

    function toggleMenu() { 
     // set timeout so that the panel has a chance to roll up 
     // before the menu switches states 
     if (menu.classList.contains('open')) { 
      setTimeout(toggleHorizontal, 500); 
     } 
     else { 
      toggleHorizontal(); 
     } 
     menu.classList.toggle('open'); 
     document.getElementById('toggle').classList.toggle('x'); 
    }; 

    function closeMenu() { 
     if (menu.classList.contains('open')) { 
      toggleMenu(); 
     } 
    } 

    document.getElementById('toggle').addEventListener('click', function (e) { 
     toggleMenu(); 
     e.preventDefault(); 
    }); 

    window.addEventListener(WINDOW_CHANGE_EVENT, closeMenu); 
})(this, this.document); 

私は正確に私が対処する必要があることを前提アムモバイルサブナビとアドイtionalスクリプト?

答えて

1

「子供」がページ外にあったことが起こっていました。

:それは基本的なYUI、純粋なCSSのマークアップを変更するが、この場合には、この作業をするために必要だった理由

が、私はわからないんだけど、私は小さな画面サイズのため、次の2つの項目が変更され

.pure-menu-has-children { 
    position: relative; 
} 

.pure-menu-children { 
    left: 3em; 
    top: 2em; 
} 

.pure-menu-childrenulposition: absoluteですが、わかりませんがrelative親です。多分それはulです。いずれにしても、それは相対親であるとすると、親リスト項目に関連して表示されることが容易になる。.pure-menu-has-childrenli

.pure-menu-children { 
    left: 100%; 
    top: 0; 
} 

は、しかし、私はそれが上にあるように私はそれを好むと思う:私はそれは、フレームワークのデフォルト設定に復元することができ、より大きなビューポートのメディアクエリのように、その後、モバイル最初のアプローチを使用してい

小型のデバイス。ここに更新されたPenがあります。

完全に満足できません。たぶん垂直メニューはそれほど広い必要はないかもしれません。この場合、child itemはまだ全幅アイテムに基づいて整列しているように見えるので、.pure-menu-linkに追加する必要があることがわかりました。text-align: leftです。

関連する問題