Bootstrap,从导航栏中删除响应式设计

10

所以,我只有一个使用Bootstrap的简单导航栏:

<div class="navbar navbar-inverse navbar-static-top" role="navigation">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">LOGO</a>
        </div>
        <div>
          <ul class="nav navbar-nav navbar-right">
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">Menu <b class="caret"></b></a>
              <ul class="dropdown-menu">
                <li><a href="#">Messages</a></li>
                <li><a href="#">Paramètres</a></li>
                <li><a href="#">Mes frenks</a></li>
                <li class="divider"></li>
                <li><a href="#">Signaler un bug</a></li>
                <li><a href="#">Conditions générales</a></li>
              </ul>
            </li>
          </ul>

        <form class="navbar-form navbar-right" role="form">
            <div class="form-group">
                <input class="form-control" type="text" placeholder="Recherche">
            </div>
        </form>

        </div><!--/.nav-collapse -->
      </div>
    </div>

查看 jsfiddle: jsfiddle

我不希望当你改变窗口的大小时,导航栏被分成多行。在我的示例中,下拉菜单和输入框位于下面。

我希望导航栏只是被压缩起来,仍然保持在同一行上... 有什么想法吗?


请看这里:https://dev59.com/VHfZa4cB1Zd3GeqPMgrS#18902276 - Farhan Ahmad
这不是我想要的。我想要一个响应式的设计,但在调整大小时不要出现多行...* - Clément Andraud
5个回答

23

可以做到。实际上并不太复杂。

我只需下载Bootstrap 3源代码并扫描他们的CSS文件。他们有不同屏幕尺寸的@media查询(你已经知道了)。我只需复制他们对于@media (min-width: 768px)使用的所有CSS规则,并将它们放在一个新的规则中:@media (max-width: 768px)

这是结果,您可以将其直接使用:

CSS:

@media (max-width: 768px) {
    .navbar-header {
        float: left;
    }

    .navbar {
        border-radius: 4px;
        min-width: 400px;
    }

    .nav-tabs-justified > li > a {
        border-bottom: 1px solid #ddd;
        border-radius: 4px 4px 0 0;
    }
    .nav-tabs-justified > .active > a,
    .nav-tabs-justified > .active > a:hover,
    .nav-tabs-justified > .active > a:focus {
        border-bottom-color: #fff;
    }

    .nav-justified > li {
        display: table-cell;
        width: 1%;
    }
    .nav-justified > li > a {
        margin-bottom: 0;
    }

    .nav-tabs.nav-justified > li > a {
        border-bottom: 1px solid #ddd;
        border-radius: 4px 4px 0 0;
    }
    .nav-tabs.nav-justified > .active > a,
    .nav-tabs.nav-justified > .active > a:hover,
    .nav-tabs.nav-justified > .active > a:focus {
        border-bottom-color: #fff;
    }

    .nav-tabs.nav-justified > li {
        display: table-cell;
        width: 1%;
    }
    .nav-tabs.nav-justified > li > a {
        margin-bottom: 0;
    }

    .navbar-right .dropdown-menu {
        right: 0;
        left: auto;
    }
    .navbar-right .dropdown-menu-left {
        right: auto;
        left: 0;
    }
    .container {
        min-width: 400px;
    }

    .navbar-collapse {
        width: auto;
        border-top: 0;
        box-shadow: none;
    }
    .navbar-collapse.collapse {
        display: block !important;
        height: auto !important;
        padding-bottom: 0;
        overflow: visible !important;
    }
    .navbar-collapse.in {
        overflow-y: visible;
    }
    .navbar-fixed-top .navbar-collapse,
    .navbar-static-top .navbar-collapse,
    .navbar-fixed-bottom .navbar-collapse {
        padding-right: 0;
        padding-left: 0;
    }

    .container > .navbar-header,
    .container-fluid > .navbar-header,
    .container > .navbar-collapse,
    .container-fluid > .navbar-collapse {
        margin-right: 0;
        margin-left: 0;
    }

    .navbar-static-top {
        border-radius: 0;
    }

    .navbar-fixed-top,
    .navbar-fixed-bottom {
        border-radius: 0;
    }

    .navbar-toggle {
        display: none;
    }

    .navbar-nav {
        float: left;
        margin: 0;
    }
    .navbar-nav > li {
        float: left;
    }
    .navbar-nav > li > a {
        padding-top: 15px;
        padding-bottom: 15px;
    }
    .navbar-nav.navbar-right:last-child {
        margin-right: -15px;
    }

    .navbar-left {
        float: left !important;
    }
    .navbar-right {
        float: right !important;
    }

    .navbar-form .form-group {
        display: inline-block;
        margin-bottom: 0;
        vertical-align: middle;
    }
    .navbar-form .form-control {
        display: inline-block;
        width: auto;
        vertical-align: middle;
    }
    .navbar-form .control-label {
        margin-bottom: 0;
        vertical-align: middle;
    }
    .navbar-form .radio,
    .navbar-form .checkbox {
        display: inline-block;
        padding-left: 0;
        margin-top: 0;
        margin-bottom: 0;
        vertical-align: middle;
    }
    .navbar-form .radio input[type="radio"],
    .navbar-form .checkbox input[type="checkbox"] {
        float: none;
        margin-left: 0;
    }
    .navbar-form .has-feedback .form-control-feedback {
        top: 0;
    }

    .navbar-form {
        width: auto;
        padding-top: 0;
        padding-bottom: 0;
        margin-right: 0;
        margin-left: 0;
        border: 0;
        -webkit-box-shadow: none;
                box-shadow: none;
    }
    .navbar-form.navbar-right:last-child {
        margin-right: -15px;
    }

    .navbar-text {
        float: left;
        margin-right: 15px;
        margin-left: 15px;
    }
    .navbar-text.navbar-right:last-child {
        margin-right: 0;
    } 
}
请注意,我注释掉了.container规则,因此它将不再具有固定的大小。 这是您的fiddle的新CSS副本:http://jsfiddle.net/Fraximus/5KAXf/1/ 如果可以,请告诉我是否有效。

嗯,是的,这样好多了 :) 但你觉得有可能指定导航栏的最小尺寸吗?用你的fiddle进行检查,如果你将窗口缩小得非常小...如果导航栏在窗口变得非常小的时候可以停止移动,那就太棒了 :) - Clément Andraud
当然可以!只需更改被注释的.container规则即可。 例如,我们可以写成min-width: 400px;而不是width: 750px;。 我会编辑答案以反映这种变化。 - Frax
我们还需要向.navbar元素添加 min-width: 400px; 规则,以正确修复它。 代码已更新。 - Frax
是的,非常好 :) 谢谢!我稍后测试一下,现在不行,谢谢 ;) - Clément Andraud
hacky的方法。如何保持导航栏响应并有另一个不响应? - challet

3
只需将.navbar-expand类添加到您的导航栏中,它就永远不会折叠。
引用块:
导航栏可以利用.navbar-toggler.navbar-collapse.navbar-expand{-sm|-md|-lg|-xl}类来更改其内容在按钮后折叠的时间。结合其他实用程序,您可以轻松选择何时显示或隐藏特定元素。
对于从不折叠的导航栏,在导航栏上添加.navbar-expand类。对于始终折叠的导航栏,请不要添加任何.navbar-expand类。
来自https://getbootstrap.com/docs/4.1/components/navbar/#responsive-behaviors

这是最好的方法!谢谢 - Nick

2

如何从Bootstrap SASS / SCSS / LESS中禁用响应式

对于编译版本的Bootstrap https://github.com/twbs/bootstrap-sass,只需在编译之前添加这些变量即可轻松实现。

SASS / SCSS

$grid-float-breakpoint:1px; 
$screen-xs:1px;
$screen-sm:2px;
$screen-md:3px;
$screen-lg:9999px;

LESS

@grid-float-breakpoint:1px; 
@screen-xs:1px;
@screen-sm:2px;
@screen-md:3px;
@screen-lg:9999px;

从头部移除"viewport"

<meta name="viewport" content="width=device-width, initial-scale=1">


2

0

或许这可以帮助到您。我想在小屏幕上避免垂直对齐的项目。这是我所做的:将nav-flat类添加到根ul元素中。

<ul class="nav navbar-nav nav-flat">

并加入以下CSS:

@media (max-width: 768px) {
    .nav-flat li { display: inline; }
    .nav-flat li a { display: inline; }
    .dropdown-menu li { display: block; }
    .dropdown-menu li a { display: block; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接