これは私のシンプルなnavbarです:
<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>
これが崩壊するのを防ぎたいのですが、必要ないので、どうすればいいですか?
デフォルトのスタイルをオーバーライドするために300K行のCSSを書くことは避けたいです。
なにか提案を?
300k行ではなく、詳しく調べた後、オーバーライドする必要がある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;
}
これにより、メニューが崩壊することはありません。
説明
4つのCSSプロパティはそれぞれを行います。
bootstrapのデフォルトの.collapse
プロパティは、タブレット(ランドスケープ)および電話のメニューの右側を非表示にし、代わりにトグルボタンを表示して非表示/表示します。したがって、このプロパティはデフォルトをオーバーライドし、これらの要素を永続的に表示します。
右側のメニューを左側と同じ行に表示するには、左側を左にフローティングする必要があります。
このプロパティは、デフォルトでbootstrapに存在しますが、タブレット(ポートレート)から電話への解像度には存在しません。これはスキップできますが、ナビゲーションバー全体には影響しない可能性があります。
これにより、右側のメニューが右側に保持され、内部要素(li
)がプロパティ2に従います。したがって、左側float leftと右側float rightは、それらを1行にします。
Nabvarは小さなデバイスで崩壊します。折りたたみのポイントは、変数の@grid-float-breakpoint
によって定義されます。デフォルトでは、これは768px
の前に終了します。画面幅768
ピクセル未満の画面の場合、navbarは次のようになります。
Variables.lessで@grid-float-breakpoint
を変更し、Bootstrapを再コンパイルすることができます。これを行うとき、navbar.lessの@screen-xs-max
も変更する必要があります。この値を新しい@grid-float-breakpoint -1
に設定する必要があります。 https://github.com/twbs/bootstrap/pull/10465 も参照してください。これは、@ grid-float-breakpointのnavbarフォームとドロップダウンをモバイルバージョンにも変更するために必要です。
変数を見つける:
@grid-float-breakpoint
@screen-sm
に設定されていますが、必要に応じて変更できます。それが役に立てば幸い!
$grid-float-breakpoint: 0px;
などのカスタム変数を@import "bootstrap.scss";
の前に追加します
デフォルトの折りたたみ動作を変更せずに、ナビゲーションの新しいセクションを常に表示したままにする方法を次に示します。 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
でその動作を示しています。
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;
}
}
別の方法は、マークアップから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>
次のソリューションは、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クラスを追加します。これはjaで書かれた例です:
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