Bootstrap 3 - ปิดใช้งานการยุบแถบนำทาง


89

นี่คือแถบนำทางง่ายๆของฉัน:

<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 บรรทัดเพื่อลบล้างสไตล์เริ่มต้น

ข้อเสนอแนะใด ๆ ?

คำตอบ:


138

หลังจากตรวจสอบอย่างใกล้ชิดไม่ใช่ 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;
}

และด้วยสิ่งนี้เมนูของคุณจะไม่ยุบ

การสาธิต ( jsfiddle )

คำอธิบาย

คุณสมบัติ CSS ทั้งสี่ทำตามลำดับ:

  1. ค่าเริ่มต้น .collapseคุณสมบัติใน bootstrap จะซ่อนทางด้านขวาของเมนูสำหรับแท็บเล็ต (แนวนอน) และโทรศัพท์และปุ่มสลับจะปรากฏขึ้นเพื่อซ่อน / แสดง ดังนั้นคุณสมบัตินี้จะแทนที่ค่าเริ่มต้นและแสดงองค์ประกอบเหล่านั้นอย่างต่อเนื่อง

  2. เพื่อให้เมนูด้านขวาปรากฏในบรรทัดเดียวกันกับด้านซ้ายเราต้องให้ด้านซ้ายลอยไปทางซ้าย

  3. คุณสมบัตินี้มีอยู่ตามค่าเริ่มต้นใน bootstrap แต่ไม่มีในแท็บเล็ต (แนวตั้ง) กับความละเอียดของโทรศัพท์ คุณสามารถข้ามสิ่งนี้ได้ซึ่งมีแนวโน้มว่าจะไม่มีผลกับแถบนำทางโดยรวมของคุณ

  4. สิ่งนี้ทำให้เมนูด้านขวาไปทางขวาในขณะที่องค์ประกอบด้านใน ( li) จะเป็นไปตามคุณสมบัติ 2 ดังนั้นเราจึงมีลูกลอยด้านซ้ายและด้านขวาลอยไปทางขวาซึ่งจะทำให้เป็นบรรทัดเดียว


2
@gwho เพิ่งเพิ่มคำอธิบายในคำตอบ
AyB

1
ถ้ามันผอมพอองค์ประกอบที่ลอยไปทางซ้ายและทางขวาที่ลอยอยู่ก็สามารถพันกันได้ (ฉันกำลังพูดถึงuls ไม่ใช่lis) อะไรคือวิธีที่ดีที่สุดในการป้องกันไม่ให้สิ่งนี้เกิดขึ้น
ahnbizcad

2
หากความต้องการเพียงอย่างเดียวของคุณคือการป้องกันไม่ให้รายการ UL / LI กลายเป็นแนวดิ่ง CSS ตัวที่ 2 ก็เป็นสิ่งที่จำเป็น
JamesB

1
!importantงบไม่จำเป็นต้องมีที่นี่สำหรับฉันมันทำงานโดยไม่ต้อง พยายามหลีกเลี่ยงเมื่อทำได้ (! important)
Tim-Erwin

2
@ICanHasKittenz Dropdowns ยังคงเปลี่ยนพฤติกรรมเมื่อ <768 px ซึ่งจะแสดงในแถบนำทาง (beahviour ที่ยุบ) ด้านในของการปรากฏในกล่องสีขาวลอย (พฤติกรรมที่ไม่ยุบ) ตามที่คาดไว้ และหัวเรื่องแบบเลื่อนลงจะกว้างขึ้นเมื่อคลิกบังคับให้องค์ประกอบอื่นเปลี่ยน เพียงเพิ่มรายการแบบเลื่อนลงในองค์ประกอบ navbar แล้วคุณจะเห็นมันด้วยตัวเอง
Roubi

24

nabvar จะยุบลงบนอุปกรณ์ขนาดเล็ก จุดยุบถูกกำหนดโดย@grid-float-breakpointตัวแปร โดยค่าเริ่มต้นสิ่งนี้จะเกิดขึ้นก่อนหน้า768pxนี้ สำหรับหน้าจอที่ต่ำกว่า768ความกว้างของหน้าจอพิกเซลแถบนำทางจะมีลักษณะดังนี้:

ป้อนคำอธิบายภาพที่นี่

เป็นไปได้ที่จะเปลี่ยน@grid-float-breakpointใน variable.less และ recompile Bootstrap เมื่อทำเช่นนี้คุณจะต้องเปลี่ยน@screen-xs-maxใน navbar.less @grid-float-breakpoint -1คุณจะต้องตั้งค่านี้เป็นใหม่ของคุณ ดูเพิ่มเติม: https://github.com/twbs/bootstrap/pull/10465 สิ่งนี้จำเป็นในการเปลี่ยนรูปแบบ navbar และดรอปดาวน์ที่ @ grid-float-breakpoint เป็นเวอร์ชันมือถือด้วย

วิธีที่ง่ายที่สุดคือปรับแต่ง bootstrap

ค้นหาตัวแปร:

 @grid-float-breakpoint

ซึ่งตั้งค่าเป็น@screen-smคุณสามารถเปลี่ยนแปลงได้ตามความต้องการของคุณ หวังว่าจะช่วยได้!


สำหรับผู้ใช้ SAAS

เพิ่มตัวแปรที่กำหนดเองของคุณเช่น$grid-float-breakpoint: 0px;ก่อนหน้าไฟล์@import "bootstrap.scss";


4
นี่เป็นประโยชน์จริงๆน่าเสียดายที่ฉันใช้ bootstrap CDN ดังนั้นฉันจึงไม่สามารถปรับแต่งไฟล์หลัก bootstrap ได้มีคำแนะนำเกี่ยวกับวิธีการทำสิ่งนี้ในไฟล์ css ที่แยกออกมาหรือไม่
itsme

2
+1 สำหรับตัวแปร @ grid-float-breakpoint บนหน้าการปรับแต่ง bootstrap นั่นเป็นเคล็ดลับสำหรับฉัน!
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

หากคุณไม่ได้ใช้รุ่นที่น้อยกว่านี่คือบรรทัดที่คุณต้องเปลี่ยน:

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

จากนั้นเพิ่มคลาส. ไม่มีการยุบในแต่ละรายการและคลาส. 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.