Làm thế nào để thay đổi ngưỡng thu gọn thanh điều hướng bằng cách sử dụng Twitter bootstrap-responsive?


94

Tôi đang sử dụng Twitter Bootstrap 2.0.1 trong một dự án Rails 3.1.2, được triển khai bằng bootstrap-sass. Tôi đang tải cả tệp bootstrap.cssbootstrap-responsive.csstệp, cũng như bootstrap-collapse.jsJavascript.

Tôi có một bố cục linh hoạt với thanh điều hướng tương tự như ví dụ . Điều này tuân theo hướng dẫn "biến thể đáp ứng" của thanh điều hướng tại đây . Nó hoạt động tốt: nếu trang hẹp hơn khoảng 940px, thanh điều hướng sẽ thu gọn và hiển thị một "nút" mà tôi có thể nhấp vào để mở rộng.

Tuy nhiên, thanh điều hướng của tôi có vẻ tốt khi chiều rộng xuống khoảng 550px, tức là nó không cần phải thu gọn trừ khi màn hình rất hẹp.

Làm cách nào để yêu cầu Bootstrap chỉ thu gọn thanh điều hướng nếu màn hình rộng dưới 550px?

Lưu ý rằng tại thời điểm này, tôi không muốn sửa đổi các hành vi đáp ứng khác, ví dụ: xếp chồng các phần tử thay vì hiển thị chúng cạnh nhau.


Câu hỏi tuyệt vời! Từ thông tin bạn đưa ra trong câu hỏi của mình, tôi đã có thể triển khai một thanh điều hướng có thể thu gọn bắt đầu từ con số không. Cảm ơn!
methodMan

Câu trả lời:


41

Bạn đang tìm dòng 239 của bootstrap-responsive.css

@media (max-width: 979px) {...}

Nơi max-widthgiá trị kích hoạt điều hướng đáp ứng. Thay đổi nó thành 550px hoặc lâu hơn và nó sẽ thay đổi kích thước tốt.


12
Cảm ơn. bootstrap-responsive.cssđược chôn trong đá quý bootstrap-sass. Có, tôi có thể chỉnh sửa nó nhưng sau đó khi đá quý được cập nhật, tôi sẽ phải làm lại. Có cách nào để ghi đè truy vấn @media, tương tự như ghi đè các phần tử CSS khác không?
Mark Berry

Tôi không thể nghĩ ra bất kỳ cách nào để đạt được ghi đè mà không cần chỉnh sửa lại tất cả các khai báo CSS.
methodofaction

Được rồi, cảm ơn. Tôi đã thử cách tiếp cận này, ghi đè dòng đó trong mã gem và nó tương đối hoạt động nhưng tôi nhận được thêm phần đệm ngang trong thanh điều hướng dưới chiều rộng 767px, có lẽ là do CSS trong @media (max-width: 767px)khối. Có vẻ như tôi sẽ phải ghi đè sâu hơn như được đề xuất trong câu trả lời của Andres Ilich.
Mark Berry

2
Như đã đề cập trong nhận xét của tôi về câu trả lời của @Andres Ilich, cập nhật trực tiếp mã nguồn dường như ít có hai tệ nạn hơn khi nói đến khả năng bảo trì, vì vậy tôi sẽ chấp nhận giải pháp này ngay bây giờ. Tôi có thể sống với 767px là ngưỡng tối thiểu, mặc dù tôi có thể có thể giảm hơn nữa bằng cách tạo vùng chứa tùy chỉnh cho thanh điều hướng không bị ảnh hưởng bởi @media (max-width: 767px). Hy vọng rằng một ngày nào đó Bootstrap (hoặc bootstrap-sass) sẽ bao gồm một phương tiện để sử dụng các biến để đặt ngưỡng, nhưng tôi nghĩ rằng điều đó sẽ yêu cầu nội suy trong các bộ chọn phương tiện .
Mark Berry

1
Các navbar breakpoint ghi đè CSS đã thay đổi cho Bootstrap 3 - đây là một ví dụ làm việc cho 3.1: bootply.com/120604
Zim

73

Bootstrap> 2.1 && <3

  • Sử dụng phiên bản bootstrap ít hơn
  • Thay đổi biến @navbarCollapseWidth trong biến.less
  • Biên dịch lại.

Cập nhật 2013: Cách dễ dàng

(THX cho Archonic qua bình luận)

Cập nhật 2014: Bootstrap 3.1.1 và 3.2 (họ thậm chí đã thêm nó vào tài liệu )

Nếu bạn đang tùy chỉnh hoặc ghi đè / chỉnh sửa .lesscác biến, bạn đang tìm kiếm:

//** Point at which the navbar becomes uncollapsed.
@grid-float-breakpoint:     @screen-sm-min;
//** Point at which the navbar begins collapsing.
@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);

6
Bạn có thể truy cập twitter.github.com/bootstrap/customize.html#variables và thay đổi chiều rộng và tải xuống. Không cần biên dịch.
Archonic

Link và nút văn bản Cập nhật: getbootstrap.com/customize/#less-variables & "Compile và Tải"
digitalextremist

Điều này cũng hoạt động với đá quý twitter-bootstrap-rails nếu bạn đặt một cái gì đó như @navbarCollapseWidth: 600px;boostrap_and_overrides.css.less.
sffc

Điều này dường như không còn là một điều trong Bootstrap 3. :(
CodingWithSpike

Còn đối với Bootstrap 4 thì sao?
Aaron Franke

11

Bạn có thể thiết lập một @mediatruy vấn mới để thả các phần tử thanh điều hướng xuống khi bạn thấy phù hợp, tất cả những gì bạn phải làm là đặt lại truy vấn cũ để phù hợp với truy vấn mới của bạn với chiều rộng thả mong muốn. Lấy ví dụ này:

CSS

/** Modified Responsive CSS **/

@media (max-width: 979px) {
    .btn-navbar {
        display: none;
    }
    .navbar .nav-collapse {
        clear: none;
    }

    .nav-collapse {
        height: auto;
        overflow: auto;
    }

    .navbar .nav {
        float: left;
        margin: 0 10px 0 0;
    }

    .navbar .brand {
        margin-left: -20px;
        padding: 8px 20px 12px;
    }

    .navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
        display: block;
    }

    .navbar .nav > li > a, .navbar .dropdown-menu a {
        border-radius: 0;
        color: #999999;
        font-weight: normal;
        padding: 10px 10px 11px;
    }

    .navbar .nav > li {
        float: left;
    }

    .navbar .dropdown-menu {
        background-clip: padding-box;
        background-color: #FFFFFF;
        border-color: rgba(0, 0, 0, 0.2);
        border-radius: 0 0 5px 5px;
        border-style: solid;
        border-width: 1px;
        box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
        display: none;
        float: left;
        left: 0;
        list-style: none outside none;
        margin: 0;
        min-width: 160px;
        padding: 4px 0;
        position: absolute;
        top: 100%;
        z-index: 1000;
    }

    .navbar-form, .navbar-search {
        border:none;
        box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.1);
        float: left;
        margin-bottom: 0;
        margin-top:6px;
        padding: 9px 15px;
    }

    .navbar .nav.pull-right {
        float: right;
        margin-left: auto;
    }
}

@media (max-width: 550px) {
    .btn-navbar {
        display: block;
    }
    .navbar .nav-collapse {
        clear: left;
    }

    .nav-collapse {
        height: 0;
        overflow: hidden;
    }

    .navbar .nav {
        float: none;
        margin: 0 0 9px;
    }

    .navbar .brand {
        margin: 0 0 0 -5px;
        padding-left: 10px;
        padding-right: 10px;
    }

    .navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
        display: none;
    }

    .navbar .nav > li > a, .navbar .dropdown-menu a {
        border-radius: 3px 3px 3px 3px;
        color: #999999;
        font-weight: bold;
        padding: 6px 15px;
    }

    .navbar .nav > li {
        float: none;
    }

    .navbar .dropdown-menu {
        background-color: transparent;
        border: medium none;
        border-radius: 0 0 0 0;
        box-shadow: none;
        display: block;
        float: none;
        left: auto;
        margin: 0 15px;
        max-width: none;
        padding: 0;
        position: static;
        top: auto;
    }

    .navbar-form, .navbar-search {
        border-bottom: 1px solid #222222;
        border-top: 1px solid #222222;
        box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.1);
        float: none;
        margin: 9px 0;
        padding: 9px 15px;
    }

    .navbar .nav.pull-right {
        float: none;
        margin-left: 0;
    }

}

Trong đoạn mã sau, bạn có thể thấy cách tôi bao gồm @mediatruy vấn ban đầu xử lý điểm rơi trước 979pxdấu và truy vấn mới để hỗ trợ điểm rơi mong muốn của bạn 550px. Tôi đã sửa đổi truy vấn ban đầu ngay từ css đáp ứng bootstrap để đặt lại tất cả các kiểu được áp dụng cho truy vấn cụ thể đó cho các phần tử thanh điều hướng và chuyển chúng sang truy vấn mới mang điểm rơi mà bạn cần thay thế. Bằng cách này, chúng tôi có thể chuyển đổi tất cả các kiểu từ truy vấn ban đầu xuống truy vấn mới mà không làm xáo trộn trong biểu định kiểu đáp ứng bootstrap, theo cách này, các giá trị mặc định sẽ vẫn áp dụng cho các phần tử khác trong tài liệu của bạn.

Đây là bản demo ngắn với một truy vấn phương tiện được đặt để thả 550pxkhi bạn yêu cầu: http://jsfiddle.net/wU8MW/

Lưu ý: Tôi đã đặt các @mediatruy vấn được sửa đổi ở trên xuống bên dưới khung css vì css sửa đổi mới được cho là được tải đầu tiên so với css đáp ứng.


Cảm ơn bạn đã trả lời chi tiết của bạn. Nó dường như hoạt động - tôi vẫn đang cố gắng tìm ra cách. Nếu tôi hiểu đúng về bạn, bạn (1) đã sao chép @media (max-width: 979px)truy vấn ban đầu để tạo @media (max-width: 550px)truy vấn mới . Sau đó (2) bạn viết mã thủ công một truy vấn 979px mới để ghi đè các ảnh hưởng của truy vấn 979px trong main bootstrap-responsive.css? Trình tự các thẻ trong CSS của bạn dường như không tuân theo trình tự trong bootstrap-responsive.css, vì vậy tôi gặp khó khăn khi so sánh chúng để xem bạn đã làm gì.
Mark Berry

@MarkBerry Bạn đang đi đúng hướng. Các @media (max-width: 550px)truy vấn tôi đã viết không theo ban đầu @media (max-width: 979px)cú pháp truy vấn vì tất cả tôi đã làm là một ví dụ nhanh trọng nó bằng tay thông qua con đom đóm và sao chép / dán, có lười biếng trên một đó, nhưng đúng cách để làm điều đó là khi bạn được đề cập trên thứ hai của bạn điểm.
Andres Ilich

1
Đây là một cuộc gọi khó khăn khi nói đến khả năng bảo trì. Tôi e rằng kiểu ghi đè mở rộng này, mặc dù cung cấp khả năng kiểm soát tuyệt đối, sẽ có nghĩa là phải kiểm tra thủ công sau mỗi lần cập nhật Bootstrap so với cập nhật trực tiếp một hoặc hai dòng mã nguồn theo gợi ý của @Duopixel. Tôi đang sử dụng Bootstrap một phần vì tôi không phải là người thích CSS, vì vậy tôi nghĩ tôi sẽ sử dụng giải pháp đơn giản hơn bây giờ.
Mark Berry

6

bootstrap-sass sẽ hỗ trợ biến $ navbarCollapseWidth trong phiên bản tiếp theo (2.2.1.0). Bạn sẽ có thể cập nhật nó để làm chính xác những gì bạn muốn sau khi phiên bản đó hoạt động!


Vui lòng giải thích nơi bạn đặt biến này?
Andy Hayden

Trước khi nhập bất kỳ Bootstrap nào, ví dụ@import "bootstrap";
Ashley


4

Tôi nghi ngờ (và hy vọng) điều này sẽ sớm được thực hiện một cách chính thức. Trong thời gian chờ đợi, tôi chỉ thực hiện một cuộc tấn công css đơn giản, sử dụng điện thoại hiển thị trên nút thả xuống và máy tính bảng hiển thị trên bộ nút thứ hai mà tôi đã đặt trong thanh điều hướng. Vì vậy, trước khi nó trông như thế này:

<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a href="<%= root_url %>" class="brand brandtag"></a>
      <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>
      <div class="nav-collapse">
        <ul class="nav">
          <li>Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
    </div>
  </div>
</div>

Và bây giờ nó trông giống như:

<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a href="<%= root_url %>" class="brand brandtag"></a>
      <a class="btn btn-navbar visible-phone" data-toggle="collapse" data-target=".nav-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>
      <div class="visible-tablet">
        <ul class="nav">
          <li>Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
      <div class="nav-collapse">
        <ul class="nav">
          <li>Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
    </div>
  </div>
</div>

Lưu ý rằng thứ tự của các phần tử là quan trọng, nếu không bạn có thể gặp vấn đề với các phần tử đi vào dòng tiếp theo


3

Tôi đã tạo một tệp SCSS riêng biệt liệt kê tất cả các phân đoạn mà bootstrap cần, theo cách đó tôi có thể bật và tắt các phân đoạn tùy thuộc vào những gì trang web của chúng tôi cần. Bằng cách này, tôi có thể ghi đè biến điểm ngắt một cách dễ dàng. Đây là những gì tôi nhận được:

// Core variables and mixins
$grid-float-breakpoint: 991px;
@import "bootstrap/variables";
@import "bootstrap/mixins";

// Reset
@import "bootstrap/normalize";
//@import "bootstrap/print";

// Core CSS
@import "bootstrap/scaffolding";
@import "bootstrap/type";
//@import "bootstrap/code";
@import "bootstrap/grid";
@import "bootstrap/tables";
@import "bootstrap/forms";
@import "bootstrap/buttons";

// Components
@import "bootstrap/component-animations";
@import "bootstrap/glyphicons";
@import "bootstrap/dropdowns";
//@import "bootstrap/button-groups";
//@import "bootstrap/input-groups";
@import "bootstrap/navs";
@import "bootstrap/navbar";
@import "bootstrap/breadcrumbs";
@import "bootstrap/pagination";
@import "bootstrap/pager";
@import "bootstrap/labels";
@import "bootstrap/badges";
//@import "bootstrap/jumbotron";
//@import "bootstrap/thumbnails";
@import "bootstrap/alerts";
//@import "bootstrap/progress-bars";
//@import "bootstrap/media";
//@import "bootstrap/list-group";
@import "bootstrap/panels";
//@import "bootstrap/wells";
@import "bootstrap/close";

// Components w/ JavaScript
@import "bootstrap/modals";
@import "bootstrap/tooltip";
//@import "bootstrap/popovers";
//@import "bootstrap/carousel";

// Utility classes
@import "bootstrap/utilities";
@import "bootstrap/responsive-utilities";

2

Đây là mã của tôi (Tất cả các giải pháp khác đều hiển thị thanh cuộn thú vị khi thanh điều hướng thả xuống vì vậy tôi đã chỉnh sửa mã để nó không bị lỗi). Tôi không thể đăng câu trả lời khác nên tôi sẽ làm ở đây để những người khác tìm. Tôi đang sử dụng đường ray để thực hiện việc này với Bootstrap 3.0.

nội dung / bảng định kiểu / khuôn khổ và ghi đè dán vào: (Điều chỉnh chiều rộng tối đa thành bất kỳ giá trị nào để đạt được mục tiêu của bạn.)

@media (max-width: 2500px) {
.navbar-header {
    float: none;
}
.navbar-toggle {
    display: block;
}
.navbar-collapse {
    border-top: 1px solid transparent;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
}
.navbar-collapse.collapse {
    display: none!important;
}
.navbar-collapse.collapse.in {
    display: block!important;
}
.navbar-nav {
    float: none!important;
}
.navbar-nav>li {
    float: none;
}
.navbar-nav>li>a {
    padding-top: 10px;
    padding-bottom: 10px;
}

1

Bootstrap 3.x

sử dụng LESS , bạn có thể thay đổi giá trị của @screen-smallđể nhắm mục tiêu kích thước tối thiểu của mình

thí dụ: @screen-small: 600px;

Tôi sử dụng điều này để chỉ chuyển sang chế độ "thiết bị nhỏ" khi chiều rộng nhỏ hơn 600px


Bạn có biết cách thực hiện việc này với SCSS không?
bcackerman

xin lỗi, tôi không. tôi nghĩ bootstrap được phát triển sử dụng ít hơn, do đó bạn có thể phải làm điều đó một cách .css (xem bootstrap 2 câu trả lời ở trên)
tên gọi là Jasons

1

Bootstrap 3.x

sử dụng SASS, bạn có thể thay đổi giá trị của $ screen-sm để nhắm mục tiêu kích thước tối thiểu của mình

ví dụ: $ screen-sm: 600px;

Bạn cần đặt giá trị này vào tệp application.scss của mình trước @import "bootstrap";

$screen-sm:600px;
@import "bootstrap";

Các biến ít hơn bắt đầu bằng "@" chỉ cần thay đổi chúng thành "$" để ghi đè chúng trước khi nhập.

Đây là danh sách các biến.


Điều này phá vỡ chức năng
blnc

1

Bootstrap 4.x

Rất nhanh để thay đổi ngưỡng thu gọn trong Bootstrap 4.x. Có 6 trường hợp:

  1. Luôn mở rộng, không bao giờ thu gọn (nghĩa là điểm ngắt là 0px): <nav class="navbar navbar-expand">...</nav>
  2. Điểm ngắt là sm (576px):<nav class="navbar navbar-expand-sm">...</nav>
  3. Điểm ngắt là md (768px):<nav class="navbar navbar-expand-md">...</nav>
  4. Điểm ngắt là lg (992px):<nav class="navbar navbar-expand-lg">...</nav>
  5. Điểm ngắt là xl (1200px):<nav class="navbar navbar-expand-xl">.../nav>
  6. Luôn luôn thu gọn, không bao giờ mở rộng (nghĩa là điểm ngắt là ∞px). : <nav class="navbar">...</nav>(Chỉ cần xóa navbar-expand-*lớp. Ưu tiên di động như trong Bootstrap 4.x)

Tín dụng cho bài viết này của Carol Skelly Tôi đã tìm thấy https://medium.com/wdstack/examples-bootstrap-4-navbar-b3c9dc0edc1a


0

Đây là một ví dụ tuyệt vời về nơi bạn có thể sử dụng phiên bản ÍT NHẤT của tệp CSS Bootstrap. Làm thế nào để làm điều này là bên dưới.

Tốt hơn cả là gửi điều này dưới dạng yêu cầu kéo trên Github để mọi người đều có thể hưởng lợi và "mã tùy chỉnh" của bạn hy vọng sẽ là một phần của Bootstrap trong tương lai.

  • Thêm một biến để variables.lesschỉ định thời điểm thu gọn thanh điều hướng. Cái gì đó như:@navCollapseWidth: 979px
  • Sau đó sửa đổi responsive-navbar.less...
    • Lên đầu thay đổi @media (max-width: 979px)thành@media (max-width: @navCollapseWidth)
    • Ở cuối thay đổi @media (min-width: 980px)thành@media (max-width: @navCollapseWidth - 1)

Tất nhiên ... bạn phải biên dịch LESS bằng một trong các phương pháp được đề xuất .


Rõ ràng Bootstrap 2.0.4 đã thay đổi cấu trúc tệp cho nội dung đáp ứng. Xem bình luận của tác giả bootstrap-sass @Thomas McDonald. Chưa tìm hiểu kỹ về vấn đề này nhưng nó có thể cho phép sửa đổi ngưỡng dễ dàng hơn ngay cả với phiên bản SASS.
Mark Berry

Tôi xin lỗi; Tôi hoàn toàn bỏ lỡ nhận xét của Sass trong câu hỏi ... Tôi chỉ tập trung vào Bootstrap dựa trên danh mục. Tuy nhiên, cấu trúc tệp trông giống như những gì tôi đã xem trong Bootstrap ... theo cách nào đó, tôi sẽ cập nhật câu trả lời của mình để nó trả lời câu hỏi.
Jason Capriotti

Đừng lo lắng. Và tôi hoàn toàn đồng ý rằng giải pháp tốt nhất là bootstrap cung cấp một biến hoặc một loạt các biến kiểm soát ngưỡng thu gọn của thanh điều hướng. Tôi không đủ kinh nghiệm với CSS, LESS hoặc SASS hoặc các truy vấn phương tiện để trở thành người viết phần nâng cao đó;).
Mark Berry

0

Tiến hành hack của tyler hơn nữa bằng cách thêm khối phân loại điện thoại hiển thị và một loại điện thoại ẩn vào một mục trong điều hướng có thể thu gọn chính, bạn có thể 'kéo' một hoặc hai trong số các mục thu gọn để hiển thị ngay cả trong thanh điều hướng của điện thoại.

<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a href="<%= root_url %>" class="brand brandtag"></a>
      <a class="btn btn-navbar visible-phone" data-toggle="collapse" data-target=".nav-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>
      <div class="visible-tablet">
        <ul class="nav">
          <li>Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
      <div class="visible-phone">
        <ul class="nav">
          <li>Navigation 1</li>
        </ul>
      </div>
      <div class="nav-collapse">
        <ul class="nav">
          <li class="hidden-phone">Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
    </div>
  </div>
</div>

0

Chỉ cần ghi lại mã này trong tệp style.css tùy chỉnh của bạn và nó sẽ hoạt động

@media (min-width: 768px) and (max-width: 991px) {
        .navbar-collapse.collapse {
            display: none !important;
        }
        .navbar-collapse.collapse.in {
            display: block !important;
        }
        .navbar-header .collapse, .navbar-toggle {
            display:block !important;
        }
        .navbar-header {
            float:none;
        }
        .navbar-nav {
            float: none !important;
            margin: 0px;
        }
        .navbar-nav {
            margin: 7.5px -15px;
        }
        .nav > li {
            position: relative;
            display: block;
        }
        .navbar-nav > li {
            float: none !important;
        }
        .nav > li > a {
            position: relative;
            display: block;
            padding: 10px 15px;
        }
        .navbar-collapse {
            padding-right: 15px;
            padding-left: 15px;
            overflow-x: visible;
            border-top: 1px solid transparent;
            box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1) inset;
        }
        .nav {
            padding-left: 0px;
            margin-bottom: 0px;
            list-style: outside none none;
        }
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.