2014-12-03 47 views
2

我有一个子导航栏,有6个项目或更多。我试图做的是,当浏览器调整大小时,会根据可用空间显示一个“更多”图标,并且随着视口大小的减小,下拉菜单中的每个项目都会逐个进入子菜单。棘手响应水平菜单栏

我附上了设计要求的屏幕截图。我正在寻找一种方法来完成这个纯CSS或使用媒体查询。

任何帮助,将不胜感激。

<nav class="navbar navbar-default navbar-fixed-top" role="navigation"> 
     <div class="container-fluid"> 
     <div class="navbar-header"> 
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-6"> 
      <span class="sr-only">Toggle navigation</span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      </button> 
      <a class="navbar-brand" href="#">Brand</a> 
     </div> 

     <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-6"> 
      <ul class="nav navbar-nav"> 
      <li class="active"><a href="#">Home</a></li> 
      <li><a href="#">Link</a></li> 
      <li><a href="#">Link</a></li> 
      <li><a href="#">Link</a></li> 
      <li><a href="#">Link</a></li> 
      </ul> 
     </div><!-- /.navbar-collapse --> 
     </div> 
    </nav> 

http://i.stack.imgur.com/3xD6a.jpg

+1

欢迎来到Stack Overflow。如果您可以向我们提供代码而不是图片,我们会帮助您解决问题,因为我们需要知道您是如何做到的,而不是通过向我们展示一些图片来解决问题。你能提供一些代码吗? – Dorvalla 2014-12-03 07:51:34

+0

任何源代码?像小提琴? – 2014-12-03 07:52:26

+0

在这个问题上发布您的相关代码和分析... – Aditya 2014-12-03 07:58:02

回答

4

here是你描述的工作示例。 (它的丑陋我没有花太多时间在造型上)

这个想法是使用媒体查询结合第n个子选择器来只显示所需的元素。

<ul class="nav"> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>4</li> 
    <li>5</li> 
    <li>6</li> 
    </ul> 

    <ul id="more"> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>4</li> 
    <li>5</li> 
    <li>6</li> 
    </ul> 


    ul, li{ 
     list-style:none; 
     } 
    .nav > li{ 
     display:inline-block; 
     width:100px; 
     height:50px; 
     border:1px solid black; 
     font-size:20px; 
     text-align:center; 
     box-sizing:border-box; 
     padding-top:10px; 
     background:white; 
     margin:5px; 
     vertical-align:top; 
    } 

    .nav{ 
     background:beige; 
     padding:10px; 
     height:55px; 
     overflow:hidden; 
     whitespace:no-wrap; 
    } 

    #more { 
    display:none; 
     margin:0; 
     padding:2px; 

     width:40px; 
    position:absolute; 
     top:20px; 
     right:0; 
     border-left:4px solid black; 
     padding-top:60px; 
    } 

    #more > li{ 
     font-size:10px; 
     border:1px solid black; 
     width:100%; 
     margin:2px 0; 
    box-sizing:border-box; 
     display:none; 

    } 




    @media screen and (max-width: 700px) { 
     #more { 
      display:block; 
     } 

     #more:hover li:nth-child(6) { 
      display:block; 
     } 
    } 



    @media screen and (max-width: 600px) { 
     #more { 
      display:block; 
     } 

     #more:hover li:nth-child(5) { 
      display:block; 
     } 
    } 
+0

这看起来不错!谢谢:)但我想是否可以做到这一点,而不必重复菜单? – 2014-12-04 07:10:51

+0

如果你不想重复菜单,你将不得不将它们移动到不同的父级(需要JavaScript),它将需要大量的CSS过度消耗来创建他们已经移动到不同父元素的错觉,以及使他们在使用兄弟选择器不是其父母的元素上悬停显示/隐藏。 – CodeToad 2014-12-04 12:39:37