Twitter 부트 스트랩 반응 형을 사용하여 navbar 축소 임계 값을 변경하는 방법은 무엇입니까?


94

저는 Bootstrap-sass로 구현 된 Rails 3.1.2 프로젝트에서 Twitter Bootstrap 2.0.1을 사용하고 있습니다. bootstrap.cssbootstrap-responsive.css파일 과 bootstrap-collapse.jsJavascript를 모두로드 하고 있습니다 .

예제 와 유사한 navbar가있는 유동적 인 레이아웃이 있습니다. 이것은 "반응 변화"지침 네비게이션 바에을 다음 여기에 . 잘 작동합니다. 페이지가 약 940px보다 좁 으면 탐색 모음이 축소되고 클릭하여 확장 할 수있는 "버튼"이 표시됩니다.

그러나 내 navbar는 약 550px 너비로보기 좋습니다. 즉, 화면이 매우 좁지 않으면 축소 할 필요가 없습니다.

화면 너비가 550px 미만인 경우에만 Bootstrap에 navbar를 축소하도록 지시하는 방법은 무엇입니까?

이 시점 에서 다른 반응 형 동작 (예 : 요소를 나란히 표시하는 대신 스택 쌓기)을 수정하고 싶지 않습니다 .


좋은 질문입니다! 귀하의 질문에 제공 한 정보에서 아무것도 시작하지 않고 접을 수있는 탐색 모음을 구현할 수있었습니다. 감사!
methodMan

답변:


41

당신은 라인 239를 찾고 있습니다 bootstrap-responsive.css

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

어디 max-width값이 반응 탐색을 트리거합니다. 550px 정도로 변경하면 크기가 잘 조정됩니다.


12
감사. bootstrap-responsive.css부트 스트랩 같은 보석에 묻혀 있습니다. 예, 편집 할 수 있지만 gem이 업데이트되면 다시해야합니다. 다른 CSS 요소를 재정의하는 것과 유사하게 @media 쿼리를 재정의하는 방법이 있습니까?
Mark Berry

모든 CSS 선언을 다시 작성하지 않고 재정의를 달성하는 방법을 생각할 수 없습니다.
methodofaction

괜찮 감사. 이 접근 방식을 시도하여 gem 코드에서 해당 줄을 재정의했으며 약간 작동하지만 아마도 @media (max-width: 767px)블록 의 CSS로 인해 767px 너비 아래의 탐색 막대에 추가 수평 패딩이 생겼습니다 . Andres Ilich의 답변에서 제안한 것처럼 더 광범위한 재정의를 수행해야 할 것 같습니다.
Mark Berry

2
@Andres Ilich의 답변에 대한 내 의견에서 언급했듯이 소스 코드를 직접 업데이트하는 것은 유지 관리 측면에서 두 가지 악의 적은 것처럼 보이므로 지금은이 솔루션을 받아 들일 것입니다. 최소 임계 값으로 767px로 살 수 있지만 .NET Framework의 영향을받지 않는 navbar에 대한 사용자 지정 컨테이너를 만들어 더 줄일 수는 @media (max-width: 767px)있습니다. 바라건대 Bootstrap (또는 bootstrap-sass)은 언젠가 변수를 사용하여 임계 값을 설정하는 수단을 포함하지만 미디어 선택기에서 보간 이 필요하다고 생각합니다 .
Mark Berry

1
navbar 중단 점 재정의 CSS가 Bootstrap 3에 대해 변경되었습니다. 여기 3.1에 대한 작업 예제가 있습니다. bootply.com/120604
Zim

73

부트 스트랩> 2.1 && <3

  • 더 적은 버전의 부트 스트랩 사용
  • variables.less에서 @navbarCollapseWidth 변수를 변경합니다.
  • 다시 컴파일하십시오.

업데이트 2013 : 쉬운 방법

(댓글을 통해 THX에서 Archonic으로)

2014 업데이트 : Bootstrap 3.1.1 및 3.2 ( 문서에 추가하기도 함 )

있는 거 당신이 경우 사용자 정의 또는 편집 / 오버라이드 (override) .less변수를, 당신이 찾고있는 :

//** 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
twitter.github.com/bootstrap/customize.html#variables 를 방문 하여 너비를 변경하고 다운로드 할 수 있습니다 . 컴파일이 필요하지 않습니다.
Archonic 2013

링크 및 버튼 텍스트 업데이트 : getbootstrap.com/customize/#less-variables & "컴파일 및 다운로드"
digitalextremist

이것은 @navbarCollapseWidth: 600px;boostrap_and_overrides.css.less 와 같은 것을 넣으면 twitter-bootstrap-rails gem에서도 작동합니다 .
sffc

이것은 더 이상 Bootstrap 3에서 문제가되지 않는 것 같습니다. :(
CodingWithSpike 2014

Bootstrap 4는 어떻습니까?
Aaron Franke

11

당신은 새로운 설정할 수 있습니다 @media당신이 맞는 볼 아래 네비게이션 바에 요소를 삭제하는 쿼리를, 당신이 할 일은 원하는 드롭 폭으로 새 쿼리를 수용하기 위해 전자를 재설정합니다. 예를 들면 다음과 같습니다.

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

}

다음 코드 @media에서 979px마크 앞의 드롭을 처리하는 원래 쿼리 와 원하는 드롭 포인트를 지원하는 새 쿼리를 어떻게 포함했는지 확인할 수 있습니다 550px. navbar 요소에 대한 특정 쿼리에 적용된 모든 스타일을 재설정하기 위해 부트 스트랩 응답 CSS에서 직접 원래 쿼리를 수정하고 대신 필요한 드롭 포인트를 전달하는 새 쿼리로 포팅했습니다. 이렇게하면 부트 스트랩 응답 스타일 시트를 엉망으로 만들지 않고 원본 쿼리에서 새 쿼리로 모든 스타일을 전달할 수 있습니다. 이렇게하면 기본값이 문서의 다른 요소에 계속 적용됩니다.

다음은 550px필요 에 따라 드롭하도록 설정된 미디어 쿼리가있는 짧은 데모입니다 . http://jsfiddle.net/wU8MW/

참고 : @media새로 수정 된 CSS가 반응 형 CSS보다 먼저로드되어야 하므로 위의 수정 된 쿼리를 CSS 프레임 아래에 배치했습니다 .


자세한 답변 감사합니다. 작동하는 것 같습니다. 나는 여전히 방법을 찾으려고 노력하고 있습니다. 내가 올바르게 이해했다면 (1) 원래 @media (max-width: 979px)쿼리를 복제 하여 새 @media (max-width: 550px)쿼리 를 만듭니다 . 그런 다음 (2) 새로운 979px 쿼리를 직접 코딩하여 메인 bootstrap-responsive.css? CSS의 태그 시퀀스가의 시퀀스를 따르지 않는 것 같습니다. 따라서 수행 한 작업을 bootstrap-responsive.css비교하는 데 어려움이 있습니다.
Mark Berry

@MarkBerry 당신은 올바른 길을 가고 있습니다. @media (max-width: 550px)내가 초기 따르지 않는 쓴 쿼리 @media (max-width: 979px)내가 한 모든 불을 지르고 통해 손으로 무시 빠른 예를했고 / 붙여 넣기, 그 일에 게으른있어 복사하기 때문에 쿼리 구문을하지만, 올바른 방법으로는 두 번째에 언급 한대로로해야 할 일 포인트.
Andres Ilich 2012

1
이것은 유지 보수성에 관해서는 어려운 요청입니다. 이러한 종류의 광범위한 재정의는 절대적인 제어를 제공하는 동시에 모든 부트 스트랩 업데이트 후 수동 검사를 많이하는 것이 아니라 @Duopixel의 제안에 따라 하나 또는 두 개의 소스 코드 줄을 직접 업데이트하는 것을 의미합니다. 난 때문에이 부분에 부트 스트랩을 사용하고 있지 CSS의 재능이 내가 지금은 간단한 해결책으로 갈 거라고 생각 때문에.
Mark Berry

6

bootstrap-sass는 다음 버전 (2.2.1.0)에서 $ navbarCollapseWidth 변수를 지원합니다. 해당 버전이 출시되면 원하는 작업을 정확히 수행하도록 업데이트 할 수 있습니다!


이 변수를 어디에 두 었는지 설명해 주시겠습니까?
앤디 헤이든

부트 스트랩이 가져 오기 전에 예@import "bootstrap";
Ashley


4

나는 이것이 곧 공식적인 방식으로 구현 될 것이라고 생각한다 (그리고 희망한다). 그 동안 저는 드롭 다운 버튼에 보이는 전화를 사용하고 탐색 모음에 배치 한 두 번째 버튼 세트에 보이는 태블릿을 사용하여 간단한 CSS 해킹을 수행하고 있습니다. 따라서 다음과 같이 보였습니다.

<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>

이제 다음과 같이 보입니다.

<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>

요소의 순서가 중요합니다. 그렇지 않으면 다음 줄로 들어가는 요소에 문제가있을 수 있습니다.


3

부트 스트랩에 필요한 모든 부분을 나열하는 별도의 SCSS 파일을 만들었습니다. 이렇게하면 사이트에 필요한 부분에 따라 부분을 켜고 끌 수 있습니다. 이렇게하면 중단 점 변수를 쉽게 재정의 할 수 있습니다. 내가 얻은 것은 다음과 같습니다.

// 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

여기에 내 코드가 있습니다 (다른 모든 솔루션은 탐색 막대가 드롭 다운 될 때 펑키 스크롤 막대를 보여 주므로 코드를 편집하지 않았습니다). 다른 답변에 게시 할 수 없으므로 다른 사람들이 찾을 수 있도록 여기에서 할 것입니다. 저는 레일을 사용하여 부트 스트랩 3.0으로이 작업을 수행하고 있습니다.

자산 / 스타일 시트 / 프레임 워크 및이를 덮어 쓰면 다음과 같이 붙여 넣습니다. (목표를 달성하려면 최대 너비를 원하는 값으로 조정하십시오.)

@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

부트 스트랩 3.x

LESS를 사용 하면의 값을 변경 @screen-small하여 최소 크기를 타겟팅 할 수 있습니다.

예: @screen-small: 600px;

너비가 600px 미만일 때만 "작은 장치"모드로 전환하는 데 사용합니다.


SCSS로이 작업을 수행하는 방법을 알고 있습니까?
bcackerman

죄송합니다. 나는 부트 스트랩이 LESS를 사용하여 개발되었다고 생각했기 때문에 .css 방식으로해야 할 수도 있습니다 (위의 부트 스트랩 2 답변 참조)
JasonS

1

부트 스트랩 3.x

SASS를 사용하면 $ screen-sm 값을 변경하여 최소 크기를 타겟팅 할 수 있습니다.

예 : $ screen-sm : 600px;

이 값은 @import "부트 스트랩"앞에 application.scss 파일에 넣어야합니다.

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

"@"로 시작하는 더 적은 변수는 가져 오기 전에이를 대체하기 위해 "$"로 변경했습니다.

다음은 변수 목록입니다.


이로 인해 기능이 중단됩니다
blnc

1

부트 스트랩 4.x

Bootstrap 4.x에서 축소 임계 값을 변경하는 것은 간단합니다. 6 가지 경우가 있습니다.

  1. 항상 확장하고 축소하지 않습니다 (예 : 중단 점은 0px 임). <nav class="navbar navbar-expand">...</nav>
  2. 중단 점은 sm (576px)입니다.<nav class="navbar navbar-expand-sm">...</nav>
  3. 중단 점은 md (768px)입니다.<nav class="navbar navbar-expand-md">...</nav>
  4. 중단 점은 lg (992px)입니다.<nav class="navbar navbar-expand-lg">...</nav>
  5. 중단 점은 xl (1200px)입니다.<nav class="navbar navbar-expand-xl">.../nav>
  6. 항상 축소하고 확장하지 않습니다 (예 : 중단 점은 ∞px). : <nav class="navbar">...</nav>(그냥 navbar-expand-*클래스를 제거하십시오 . 부트 스트랩 4.x에서와 같이 모바일 우선)

Carol Skelly의이 기사에 대한 크레딧 https://medium.com/wdstack/examples-bootstrap-4-navbar-b3c9dc0edc1a를 찾았습니다.


0

이것은 부트 스트랩 CSS 파일의 LESS 버전을 사용할 수있는 좋은 예입니다. 이를 수행하는 방법은 다음과 같습니다.

더 나은 방법은 Github에 풀 요청으로 제출하여 모든 사람이 혜택을받을 수 있도록하고 "커스텀 코드"가 앞으로 Bootstrap의 일부가되기를 바랍니다.

  • variables.less탐색 모음을 접을시기를 지정 하는 변수를에 추가하십시오 . 다음과 같은 것 :@navCollapseWidth: 979px
  • 그런 다음 수정 responsive-navbar.less...
    • 상단 변화까지 @media (max-width: 979px)@media (max-width: @navCollapseWidth)
    • 하단의 변경시 @media (min-width: 980px)@media (max-width: @navCollapseWidth - 1)

물론 ... 제안 된 방법 중 하나를 사용하여 덜 컴파일해야 합니다 .


분명히 Bootstrap 2.0.4는 반응 형 항목에 대한 파일 구조를 변경했습니다. bootstrap-sass 작성자 @Thomas McDonald 의 의견 을 참조하십시오 . 아직 파헤 치지는 않았지만 SASS 버전에서도 임계 값을 쉽게 수정할 수 있습니다.
Mark Berry

죄송 해요; 나는 질문에서 Sass 코멘트를 완전히 놓쳤다 ... 나는 단지 카테고리를 기반으로 부트 스트랩에 집중했다. 그러나 파일 구조는 부트 스트랩에서 봤던 것과 동일 해 보입니다 ... 어느 쪽이든 질문에 대한 답변을 업데이트하겠습니다.
Jason Capriotti

걱정 마. 그리고 저는 부트 스트랩이 navbar 축소 임계 값을 제어하는 ​​변수 또는 일련의 변수를 기본적으로 제공하는 것이 최선의 해결책이라는 데 완전히 동의합니다. CSS, LESS 또는 SASS 또는 미디어 쿼리에 대한 경험이 부족하여 향상된 기능을 작성할 수 있습니다.).
Mark Berry

0

기본 접을 수있는 내비게이션의 항목에 눈에 보이는 전화 등급 블록과 숨겨진 전화 등급 을 추가하여 타일러의 해킹을 한층 더 확장 하면 접힌 항목 중 하나 또는 두 개를 '끌어 내서' 전화 탐색 모음에도 표시 할 수 있습니다.

<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

이 코드를 사용자 정의 style.css 파일에 적어두면 작동합니다.

@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;
        }
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.