隐藏导航的栏滚动条并仍然滚动

时间:2017-03-05 15:40:23

标签: javascript jquery html css twitter-bootstrap

说明

我有这个Bootstrap的导航栏,它有一个水平响应菜单,但它显示的是一个水平滚动条。我在下面列出了一些隐藏/删除(并且仍然滚动)此滚动条的尝试,但没有任何正常工作。

尝试1:使用overflow-x: hidden,但不会水平滚动。
尝试2:使用::-webkit-scrollbar {display: none;},但它仅适用于基于webkit的浏览器。
尝试3:正如this answer中所述,我尝试使用下面的代码,但随后子菜单(导航展开时)大小已更改且滚动条仍然在那里。您可以在this fiddle中看到它。

#parent{
    height: 100%;
    width: 100%;
    overflow: hidden;
}

#child{
    width: 100%;
    height: 100%;
    overflow-y: scroll;
    padding-right: 17px; /* Increase/decrease this value for cross-browser compatibility */
}

/*I changed overflow-y to overflow-x and padding-right to padding-bottom*/

有没有什么方法适用于大多数浏览器?

示例代码

您还可以在JSFiddle上看到。

#navigation {
    background-color: rgba(230, 104, 92, 1);
}

.navbar-toggle i, .navbar-brand, .navbar-nav li a {
    color: #fff;
}

.nav {
    white-space: nowrap;
    display: -webkit-flex;
    display: -moz-flex;
    display: -ms-flex;
    display: -o-flex;
    display: flex;
}
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
</head>

<body id="body">

    <header id="navigation" class="navbar navbar-fixed-top">
        <div class="container">

            <div class="navbar-header">

                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <i class="fa fa-bars fa-2x" aria-hidden="true"></i>
                </button>

                <a class="navbar-brand" href="#body">
                    Logo
                </a>

            </div>

            <nav class="collapse navbar-collapse navbar-right" role="navigation">
                <ul id="nav-js" class="nav navbar-nav">
                    <li><a href="#">Item1</a></li>
                    <li><a href="#">Item2</a></li>
                    <li><a href="#">Item3</a></li>
                    <li><a href="#">Item4</a></li>
                    <li><a href="#">Item5</a></li>
                    <li><a href="#">Item6</a></li>
                    <li><a href="#">Item7</a></li>
                    <li><a href="#">Item8</a></li>
                    <li><a href="#">Item9</a></li>
                    <li><a href="#">Item10</a></li>
                    <li><a href="#">Item11</a></li>
                    <li><a href="#">Item12</a></li>
                    <li><a href="#">Item13</a></li>
                    <li><a href="#">Item14</a></li>
                    <li><a href="#">Item15</a></li>
                </ul>
            </nav>

        </div>
    </header>

    <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    
</body>

</html>

提前致谢,
路易斯。

2 个答案:

答案 0 :(得分:3)

解决此问题的最佳方法是更改​​菜单结构。由于dom树的性质和你拥有的菜单项数量,你总会遇到某种溢出问题。解决这个问题的最佳方法是考虑菜单项目的内容然后嵌套它们。一个例子是:

<ul>
<li>Main A</li>
<li>Main B
  <ul>
    <li>Sub 1 of Main B</li>
    <li>Sub 2 of Main B</li>
  </ul>
</li>
</ul>

拥有溢出属性隐藏网站可用性和导航所固有的项目从长远来看将是一个巨大的麻烦。此外,您将始终拥有滚动条,因为您打破了包含元素的宽度值,并使其比最高级别的父元素更宽,这意味着没有其他方法可以查看项目。

答案 1 :(得分:2)

你可以通过以下方式实现它 - 使用媒体查询仅在小屏幕视图中起作用。

当我们将position:relative提供给父级position:absolute to child时,我们需要对父级的高度进行硬编码。这就是高度变化的原因。

#parent {
  width: 100%;
  height: 70px;
}

还要给它一些填充左对齐,就像这样 -

填充右边是滚动的必要条件。

#child {

  padding-right: 150px;
  padding-left: 25px;
}

工作示例

#navigation {
    background-color: rgba(230, 104, 92, 1);
}

.navbar-toggle i, .navbar-brand, .navbar-nav li a {
    color: #fff;
}

.nav {
    white-space: nowrap;
    display: -webkit-flex;
    display: -moz-flex;
    display: -ms-flex;
    display: -o-flex;
    display: flex;
}
@media screen and (max-width: 768px) {
#child,
#parent {
  width: 120%;
  height: 70px;
}
#parent {
  
  position: relative;
  overflow: hidden;
}
#child {
  position: absolute;
  left: 0;
  overflow-y: hidden;
  overflow-x: scroll;
  padding-right: 150px;
  padding-left: 25px;
}
#child::-webkit-scrollbar {
  display: none;
}
.navbar-nav > li {
      margin-left: 10px;
}
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
</head>

<body id="body">

    <header id="navigation" class="navbar navbar-fixed-top">
        <div class="container">

            <div class="navbar-header">

                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <i class="fa fa-bars fa-2x" aria-hidden="true"></i>
                </button>

                <a class="navbar-brand" href="#body">
                    Logo
                </a>

            </div>

            <nav id="parent" class="collapse navbar-collapse navbar-right" role="navigation">
                <ul id="child" class="nav navbar-nav">
                    <li><a href="#">Item1</a></li>
                    <li><a href="#">Item2</a></li>
                    <li><a href="#">Item3</a></li>
                    <li><a href="#">Item4</a></li>
                    <li><a href="#">Item5</a></li>
                    <li><a href="#">Item6</a></li>
                    <li><a href="#">Item7</a></li>
                    <li><a href="#">Item8</a></li>
                    <li><a href="#">Item9</a></li>
                    <li><a href="#">Item10</a></li>
                    <li><a href="#">Item11</a></li>
                    <li><a href="#">Item12</a></li>
                    <li><a href="#">Item13</a></li>
                    <li><a href="#">Item14</a></li>
                    <li><a href="#">Item15</a></li>
                </ul>
            </nav>

        </div>
    </header>

    <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    
</body>

</html>

如果在firefox写入浏览器特定的css中突然使用它会增加导航项之间的边距。

<style type="text/css">
 @-moz-document url-prefix() {
 .navbar-nav > li {
  margin-left: 10px;/*set this to such a value so that it doesn't look like 
   it is breaking*/
  }
   }
    </style>

希望这有帮助!

相关问题