【问题标题】:Tricky Responsive horizontal menu bar棘手的响应式水平菜单栏
【发布时间】:2014-12-03 22:48:50
【问题描述】:

我有一个包含 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>

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您可以向我们提供代码而不是图像,我们会帮助您解决问题,因为我们需要知道 how 你做了你得到的而不是 what 问题是通过向我们展示一些图像。请提供一些代码。
  • 任何源代码?像小提琴一样?
  • 贴出您对这个主题所做的相关代码和分析...
  • 我正在尝试使用引导程序的“默认”导航栏来实现这一点。我还没有开始研究它,但假设我们有一个默认的引导菜单。我不要求提供完整的代码,只是提供一些完成此任务的提示。
  • 感谢您的欢迎,我不是新手,所以它只是一个新的个人资料 :)

标签: html css responsive-design media-queries


【解决方案1】:

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;
        }
    }

【讨论】:

  • 这看起来很棒!谢谢 :) 但我想是否可以不重复菜单来做到这一点?
  • 如果您不想重复菜单,则必须将它们移动到不同的父级(需要 JavaScript),这将需要大量的 CSS 来创建它们已移动到的错觉一个不同的父元素,以及使用兄弟选择器使它们在非父元素悬停时显示/隐藏。
猜你喜欢
  • 1970-01-01
  • 2014-09-07
  • 2016-11-12
  • 2015-10-23
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多