ブートストラップ3-ナビゲーションバーの折りたたみを無効にする


88

これは私のシンプルなナビゲーションバーです。

<div class="navbar navbar-fixed-top myfont" role="navigation">
    <div class="">
        <ul class="nav navbar-nav navbar-left">
            <li>
                <a class="navbar-brand" href="#">
                    <img src="assets/img/logo.png"/>
                </a>
            </li>
            <li>
                <button class="btn btn-navbar">
                    <i class="fa fa-edit"></i>
                    Create 
                </button>
            </li>
        </ul>
    </div>
    <ul class="nav navbar-nav navbar-right">
        <li data-match-route="/"><a href="#/page-one">Login</a></li>
        <li data-match-route="/"><a href="#/page-two/sub-a">Signup</a></li>
    </ul>
</div>

これが崩壊するのを防ぎたいのですが、それが必要ないので、どうすればいいですか?

デフォルトのスタイルを上書きするために、CSSの300K行を書くことは避けたいです。

なにか提案を?

回答:


137

よく調べてみると、30万行ではありませんが、オーバーライドする必要のあるCSSプロパティは約3〜4個あります。

.navbar-collapse.collapse {
  display: block!important;
}

.navbar-nav>li, .navbar-nav {
  float: left !important;
}

.navbar-nav.navbar-right:last-child {
  margin-right: -15px !important;
}

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

これでメニューが崩れることはありません。

デモ jsfiddle

説明

4つのCSSプロパティはそれぞれ次のことを行います。

  1. .collapseブートストラップのデフォルトプロパティは、タブレット(ランドスケープ)および電話のメニューの右側を非表示にし、代わりにトグルボタンを表示して非表示/表示します。したがって、このプロパティはデフォルトをオーバーライドし、それらの要素を永続的に表示します。

  2. 右側のメニューが左側と同じ行に表示されるようにするには、左側を左にフロートさせる必要があります。

  3. このプロパティはデフォルトでブートストラップに存在しますが、タブレット(ポートレート)から電話の解像度には存在しません。これはスキップできます。全体のナビゲーションバーには影響しません。

  4. これにより、右側のメニューが右側に維持され、内部要素(li)はプロパティ2に従います。したがって、左側のフロートは左側に、右側のフロートは右側にあり、これらを1行にまとめています。


2
@gwho回答に説明を追加しました。
AyB 2014年

1
十分に細くなると、フロートされた左要素とフロートされた右要素が互いに重なり合う可能性があります(私はulsではなくs について話していliます)。これさえ起こらないようにする最善の方法は何ですか?
ahnbizcad 2014年

2
UL / LIリストが垂直になるのを防ぐことが唯一の要件である場合、必要なのは2番目のCSSだけです。
JamesB 2014年

1
ここでは!importantステートメントは必要ありませんが、私にとってはそれなしで機能します。可能な限り回避するようにしてください(!重要)。
Tim-Erwin

2
@ICanHasKittenzドロップダウンは、768ピクセル未満の場合でも動作を変更します。期待どおりに、フロートされた白いボックス(折りたたまれていない動作)の中にあるナビゲーションバー(折りたたまれた動作)内に表示されます。また、クリックするとドロップダウンタイトルが広がり、他の要素がシフトします。navbar要素にドロップダウンを追加するだけで、自分でそれを確認できます。
Roubi

24

nabvarは小さなデバイスでは崩壊します。折りたたみのポイントは@grid-float-breakpoint変数で定義されます。デフォルトでは、これは以前に行われ768pxます。768ピクセル画面幅未満の画面の場合、ナビゲーションバーは次のようになります。

ここに画像の説明を入力してください

@grid-float-breakpointvariables.less を変更して、Bootstrapを再コンパイルすることが可能です。これを行うとき@screen-xs-maxは、navbar.lessでも変更する必要があります。この値を新しいに設定する必要があります@grid-float-breakpoint -1https://github.com/twbs/bootstrap/pull/10465も参照してください。これは、@ grid-float-breakpointのナビゲーションバーフォームとドロップダウンをモバイルバージョンに変更するためにも必要です。

最も簡単な方法は、ブートストラップをカスタマイズすることです

変数を見つける:

 @grid-float-breakpoint

に設定され@screen-smていますが、必要に応じて変更できます。それが役に立てば幸い!


SAASユーザー向け

$grid-float-breakpoint: 0px;前のようにカスタム変数を追加します@import "bootstrap.scss";


4
残念ながら、これは本当に役に立ちます。ブートストラップCDNを使用しているため、ブートストラップのメインファイルをカスタマイズできません。別のcssファイルでこれを行う方法に関するヒントはありますか?
itsme 2014年

2
ブートストラップカスタマイズページの@ grid-float-breakpoint-variableの+1は、私にとってはトリックでした!
Wietse

4
SASSユーザーの場合:行の$grid-float-breakpoint: 0px;前のようにカスタム変数を追加するだけ@import "bootstrap.scss";
Duvrai

5

以下は、デフォルトの折りたたみ動作を変更せずに、ナビゲーションの新しいセクションを常に表示したままにする方法です。そのの拡大navbar; navbar-header-menu私が作成したCSSクラスであり、適切なBootstrapの一部ではありません。

これをnavbar-header後の要素に配置しnavbar-brandます。

<div class="navbar-header-menu">
    <ul class="nav navbar-nav">
        <li class="active"><a href="#">I'm always visible</a></li>
    </ul>
    <form class="navbar-form" role="search">
        <div class="form-group">
            <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
    </form>
</div>

このCSSを追加します。

.navbar-header-menu {
    float: left;
}

    .navbar-header-menu > .navbar-nav {
        float: left;
        margin: 0;
    }

        .navbar-header-menu > .navbar-nav > li {
            float: left;
        }

            .navbar-header-menu > .navbar-nav > li > a {
                padding-top: 15px;
                padding-bottom: 15px;
            }

        .navbar-header-menu > .navbar-nav .open .dropdown-menu {
            position: absolute;
            float: left;
            width: auto;
            margin-top: 0;
            background-color: #fff;
            border: 1px solid #ccc;
            border: 1px solid rgba(0,0,0,.15);
            -webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
            box-shadow: 0 6px 12px rgba(0,0,0,.175);
        }

    .navbar-header-menu > .navbar-form {
        float: left;
        width: auto;
        padding-top: 0;
        padding-bottom: 0;
        margin-right: 0;
        margin-left: 0;
        border: 0;
        -webkit-box-shadow: none;
        box-shadow: none;
    }

        .navbar-header-menu > .navbar-form > .form-group {
            display: inline-block;
            margin-bottom: 0;
            vertical-align: middle;
        }

    .navbar-header-menu > .navbar-left {
        float: left;
    }

    .navbar-header-menu > .navbar-right {
        float: right !important;
    }

    .navbar-header-menu > *.navbar-right:last-child {
        margin-right: -15px !important;
    }

フィドルを確認してください:http : //jsfiddle.net/L2txunqo/

警告:navbar-right要素を視覚的に並べ替えるのに使用できますが、要素を画面の最も右の部分に移動することは保証されていません。フィドルはnavbar-form


0

lessバージョンを使用していない場合は、次の行を変更する必要があります。

@media (max-width: 767px) { /* Change this to 0 */
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 20px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}

0

次の解決策は、Bootstrap 3.3.4で私のために機能しました:

CSS:

/*no collapse*/

.navbar-collapse.collapse.off {
    display: block!important;
}
.navbar-collapse.collapse.off ul {
    margin: 0;
    padding: 0;
}

.navbar-nav.no-collapse>li,
.navbar-nav.no-collapse {
    float: left !important;
}

.navbar-right.no-collapse {
    float: right!important;
}

次に、各リストに.no-collapseクラスを追加し、メインコンテナーに.offクラスを追加します。これはヒスイで書かれた例です:

nav.navbar.navbar-default.navbar-fixed-top
        .container-fluid
            .collapse.navbar-collapse.off
                ul.nav.navbar-nav.no-collapse
                    li
                        a(href='#' class='glyph')
                            i(class='glyphicon glyphicon-info-sign')
                ul.nav.navbar-nav.navbar-right.no-collapse
                    li.dropdown
                        a.dropdown-toggle(href='#', data-toggle='dropdown' role='button' aria-expanded='false')
                            | Tools
                            span.caret
                        ul.dropdown-menu(role='menu')
                            li
                                a(href='#') Tool #1
                    li
                        a(href='#')
                            | Logout

0

別の方法は、単にcollapse navbar-collapseマークアップから削除することです。Bootstrap 3.3.7の例

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<nav class="navbar navbar-atp">
  <div class="container-fluid">
    <div class="">
      <ul class="nav navbar-nav nav-custom">
        <li>
          <a href="#" id="sidebar-btn"><span class="fa fa-bars">Toggle btn</span></a>
        </li>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li>Nav item</li>
      </ul>
    </div>
  </div>
</nav>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.