[css] 로고가있는 부트 스트랩 3 Navbar

텍스트 브랜딩 대신 이미지 로고가있는 Bootstrap 3 기본 탐색 메뉴를 사용하고 싶습니다. 화면 크기가 다른 문제를 일으키지 않고이 작업을 수행하는 올바른 방법은 무엇입니까? 나는 이것이 일반적인 요구 사항이라고 가정하지만 아직 좋은 코드 샘플을 보지 못했습니다. 모든 화면 크기에 적합한 디스플레이를 제공하는 것 이외의 핵심 요구 사항은 작은 화면의 메뉴 축소 가능성입니다.

navbar-brand 클래스가있는 A 태그 안에 IMG 태그를 넣으려고했지만 안드로이드 폰에서 메뉴가 제대로 작동하지 않습니다. 나는 또한 navbar 클래스의 높이를 높이려고 시도했지만 더 많은 것을 망쳤습니다.

그건 그렇고, 내 로고 이미지는 탐색 표시 줄의 높이보다 큽니다.



답변

왜 모두가 어려운 일을하려고합니까? 물론 이러한 접근 방식 중 일부는 효과가 있지만 필요한 것보다 더 복잡합니다.

먼저, 네비게이션 바에 맞는 이미지가 필요합니다. CSS 높이 속성을 통해 이미지를 조정하거나 (너비를 조절할 수 있음) 적절한 크기의 이미지 만 사용할 수 있습니다. 무엇을하기로 결정하든, 이렇게 보이는 방식은 이미지의 크기를 얼마나 잘 조정 하느냐에 달려 있습니다.

어떤 이유로 든 모든 사람이 이미지를 앵커 내부에 붙이기를 원하므로 navbar-brand이것이 필요하지 않습니다. navbar-brand이미지뿐만 아니라 navbar-left클래스에 필요하지 않은 텍스트 스타일을 적용합니다 (왼쪽 풀과 같지만 탐색 모음에 사용). 정말로 필요한 것은을 추가하는 것 navbar-left입니다.

<a href="#" class="navbar-left"><img src="/path/to/image.png"></a>

이미지 오른쪽에 나타나는 탐색 모음 브랜드 항목으로이를 수행 할 수도 있습니다.


답변

<div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse"
            data-target=".navbar-ex1-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand" rel="home" href="#" title="Buy Sell Rent Everyting">
        <img style="max-width:100px; margin-top: -7px;"
             src="/img/transparent-white-logo.png">
    </a>
</div>


답변

부트 스트랩 3 탐색 모음 로고 크기 조정

많은 예제와 함께 완벽한 데모

중요 업데이트 : 12/21/15

이 페이지에서 MANY DEMOS를 사용하여 특정 브라우저 너비에서 탐색 모음을 손상 시키는 버그가 Mozilla에서 발견되었습니다 . 기본적으로 모질라 버그는 이미지 너비의 일부로 탐색 막대 브랜드 링크의 왼쪽 및 오른쪽 패딩을 포함합니다. 그러나 이것은 쉽게 고칠 수 있으며 이것을 테스트 했으며이 페이지에서 가장 안정적인 작업 예라고 확신합니다. 자동으로 크기가 조정되며 모든 브라우저에서 작동합니다.

CSS에 이것을 추가하고 원하는 방식으로 navbar-brand를 사용하십시오 .img-responsive. 로고가 자동으로 맞춰집니다

.navbar-brand {
  padding: 0px; /* firefox bug fix */
}
.navbar-brand>img {
  height: 100%;
  padding: 15px; /* firefox bug fix */
  width: auto;
}

다른 옵션은 배경 이미지를 사용하는 것입니다. 모든 크기의 이미지를 사용하고 원하는 너비를 설정하십시오.

.navbar-brand {
  background: url(http://disputebills.com/site/uploads/2015/10/dispute.png) center / contain no-repeat;
  width: 200px;
}

아래의 원래 답변 (참조 용)

사람들은 객체 적합을 많이 잊어 버리는 것 같습니다. 개인적으로 이미지가 메뉴 크기에 자동으로 조정되기 때문에 가장 쉬운 방법이라고 생각합니다. 이미지에 객체 맞춤을 사용하면 메뉴 높이로 자동 크기가 조정됩니다.

    .navbar-brand > img {
      max-height: 100%;
      height: 100%;
      -o-object-fit: contain;
      object-fit: contain;
    }

이것이 IE “아직”에서는 작동하지 않는 것으로 지적되었습니다. 거기에있다 polyfill은 ,하지만 당신은 무엇을 위해 그것을 사용 계획이없는 경우가 과도한 수 있습니다. IE의 향후 릴리스에 대해 객체 적합이 계획되는 것처럼 보이 므로 일단 발생하면 모든 브라우저에서 작동합니다.

그러나 부트 스트랩에서 .img 응답 클래스를 발견하면 max-width는 이러한 이미지를 열 또는 세트가있는 명시 적 인 이미지에 넣었다고 가정합니다. 이는 100 %가 특히 상위 요소의 100 % 너비를 의미 함을 의미합니다.

    .img-responsive
        max-width: 100%;
        height: auto;
    }

우리가 navbar와 함께 사용할 수없는 이유는 부모 (.navbar-brand)의 고정 높이가 50px이지만 너비가 설정되어 있지 않기 때문입니다.

우리는 그 논리를 가지고있는 경우 이 높이에 따라 반응하는 것으로 우리는 .navbar 브랜드 높이 추가 및 자동 설정에 의해 스케일이 비율로 조정됩니다 폭 있다는 응답 이미지를 가질 수 있습니다.

max-height: 100%;
width: auto;

일반적으로 display:block;시나리오 에 추가 해야하지만 navbar-brand에는 이미 float : left가 있으므로; 그것에 적용되면 자동으로 블록 요소로 작동합니다.


로고가 너무 작은 드문 상황이 발생할 수 있습니다. img-responsive 접근법은 이것을 고려하지 않지만 우리는 할 것입니다. “height”속성을 추가 .navbar-brand > img하면 확장 및 축소 될 수 있습니다.

max-height: 100%;
height: 100%;
width: auto;

그래서이 작업을 완료하기 위해 두 가지를 모두 합쳤으며 모든 브라우저에서 완벽하게 작동하는 것 같습니다.

<style type="text/css">
.navbar-brand>img {
   max-height: 100%;
   height: 100%;
   width: auto;
   margin: 0 auto;


   /* probably not needed anymore, but doesn't hurt */
   -o-object-fit: contain;
   object-fit: contain;

}
</style>

<nav class="navbar navbar-default">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="http://disputebills.com"><img src="http://disputebills.com/site/uploads/2015/10/dispute.png" alt="Dispute Bills"></a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Home</a></li>
            <li><a href="#about">About</a></li>
            <li><a href="#contact">Contact</a></li>
          </ul>
        </div>
      </div>
</nav>

데모 http://codepen.io/bootstrapped/pen/KwYGwq


답변

귀하의 질문이 흥미 롭지 만 하나의 답변이있을 것으로 기대하지는 않습니다. 아마도 귀하의 질문이 너무 광범위 할 수 있습니다. 솔루션은 다음에 의존해야합니다. 탐색 표시 줄의 다른 콘텐츠 (항목 수), 로고 크기, 로고가 반응해야하는 경우 등 navbar- 브랜드 클래스를 사용해야합니다. 15 픽셀의 패딩 (위 / 아래)이 추가되기 때문입니다.

300×150 픽셀의 로고로 http://getbootstrap.com/examples/navbar/ 에서이 설정을 테스트합니다 .

전체 화면> 1200 :

여기에 이미지 설명을 입력하십시오

768 ~ 992 픽셀 사이 (메뉴가 축소되지 않음) :

여기에 이미지 설명을 입력하십시오

<768 (메뉴 축소)

여기에 이미지 설명을 입력하십시오

미적 측면 외에는 기술적 인 문제가 없었습니다. 작은 화면에서는 큰 로고가 뷰포트와 겹치거나 깨질 수 있습니다. 768에서 992 픽셀 사이의 화면은 내용이 줄에 맞지 않을 때 다른 문제가 있습니다 (예 : https://github.com/bassjobsen/jamedo-bootstrap-start-theme/issues/18 참조).

기본 탐색 표시 줄 의 기본 탐색 표시 줄 예제는 아래쪽 여백을 30px로 추가하므로 탐색 표시 줄의 내용이 페이지의 내용과 겹치지 않아야합니다. (탐색 된 네비게이션 바에는 네비게이션 바의 높이가 다를 때 문제가 있습니다).

네비게이션 바를 다양한 화면 크기에 맞게 조정하려면 CSS와 미디어 쿼리가 필요합니다. 질문을 좁히십시오. 안드로이드에서 찾은 문제를 설명하십시오.

업데이트 예는 http://bootply.com/77512 를 참조하십시오 .

휴대 전화와 같은 작은 화면에서는 축소 된 메뉴가 로고 위에 나타납니다.

코드에서 버튼과 로고를 교환하고 로고를 먼저 (로고에 float : left 설정)

상단을 제외한 다른 메뉴 항목을 정렬 할 수있는 방법이 없습니다

을 설정 margin-top하기위한 .navbar-collapse ul. 로고 높이에서 navbar 높이를 뺀 값을 아래쪽에 맞추거나 (logo height-navbar height) / 2를 가운데


답변

기본 높이 (50px)보다 큰 로고로 부트 스트랩 탐색 모음을 만드는 방법에 대한 지침 :

로고 100 픽셀 X 100 픽셀, 표준 CSS와 :

  1. 로고의 높이와 (패딩 상단 + 패딩 하단)을 계산합니다. 여기 120px (높이 100px + padding top (10px) + padding bottom (10px))

  2. 고토 부트 스트랩 / 사용자 정의 . 대신 설정 메뉴 바 높이 50 픽셀> 120 픽셀 (70 + 50) 및 메뉴 바 붕괴 – 최대 높이 에 340px에서 410 픽셀 (340 + 70). CSS를 다운로드하십시오 .

  3. 이 예제에서는이 navbar를 사용합니다 . 에서 네비게이션 바 브랜드 :

      <div class="navbar-header">
        ...
        </button>
        <a class="navbar-brand myLogo" href="#">
          <img src="yourLogo.jpg" />
        </a>
      </div>...

    추가 예제에 대한 클래스, mylogo를 , 그리고 IMG (로고)를

    <a class="navbar-brand myLogo" href="#"><img src="yourLogo.jpg" /></a>.

  4. CSS 추가

    .myLogo {패딩 : 10px; }

  5. 다른 크기에 적합합니다.


답변

글쎄, 마침내이 같은 문제가 발생했습니다. 여기 내 솔루션이 있으며 Chrome, Firefox 및 Internet Explorer의 세 가지 주요 브라우저 모두에서 내 사이트에서 테스트했습니다.

우선 텍스트 기반 로고를 사용하지 않는 경우이 특정 클래스가 축소 된 탐색 메뉴가 두 배가되는 주요 원인 인 것으로 확인되면 “navbar-brand”를 완전히 제거하십시오.

나를 올바른 방향으로 인도하기 위해 user3137032에게 소리 지르십시오.

사용자 정의 반응 형 이미지 컨테이너를 만들어야합니다. “로고”라고했습니다.

부트 스트랩 HTML 마크 업은 다음과 같습니다.

<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a href="@Url.Action(" Index ", "Home ")" class="logo"><img src="~/resources/images/Logo_Concept.png" /></a>
    </div>
    <div class="navbar-collapse collapse">
      <ul class="nav navbar-nav">
        <li>
          <a href="@Url.Action(" About ", "Home ")">
            <i class="glyphicon glyphicon-info-sign"></i> About
          </a>
        </li>
        <li>
          <a href="@Url.Action(" Contact ", "Home ")">
            <i class="glyphicon glyphicon-phone"></i> Contact
          </a>
        </li>
        <li>
          <a href="@Url.Action(" Index ", "Products ")">
            <i class="glyphicon glyphicon-tag"></i> Products
          </a>
        </li>
      </ul>
    </div>
  </div>
</div>

그리고 CSS 코드 :

.logo img {
width: 100% \9; /*Force IE10 and below to size SVG images correctly*/
max-width: 100%;
}

@media (max-width:480px) {
.logo img {
    width: 70% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 70% !important;
}
}

@media (max-width:400px) {
.logo img {
    width: 75% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 75%;
}
}

@media (max-width:385px) {
.logo img {
    width: 70% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 70%;
}
}

@media (max-width:345px) {
.logo img {
    width: 65% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 65%;
}
}

@media (max-width:335px) {
.logo img {
    width: 60% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 60%;
}
}

@media (max-width:325px) {
.logo img {
    width: 55% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 55%;
}
}

@media (max-width:315px) {
.logo img {
    width: 50% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 50%;
}
}

@media (최대 너비 : x)의 값은 로고 이미지 너비에 따라 다를 수 있습니다. 내 크기는 368px입니다. 로고 크기에 따라 백분율을 변경해야 할 수도 있습니다. 첫 번째 @ 미디어 쿼리는 임계 값이어야하며 광산은 이미지 너비 (368px) + 축소 된 버튼 크기 (44px) + 약 60px이며 반응 형 이미지 스케일링을 시작하는 480px로 나왔습니다.

HTML 부분에서 면도기 구문을 제거하십시오. 문제가 해결되면 알려주세요.

편집 : 죄송합니다. 네비게이션 바 높이 문제가 없습니다. 개인적으로 Bootstrap LESS를 적절한 탐색 표시 줄 높이로 컴파일하여 내 목적으로 70px를 사용하고 이미지 높이는 68px입니다. 두 번째 방법은 bootstrap.css 파일 자체에서 “.navbar”를 검색하고 최소 높이를 로고 높이로 변경하는 것입니다.


답변

내 솔루션은 img 태그에 CSS “display : inline-block”을 추가하는 것입니다.

<img style="display: inline-block; height: 30px; margin-top: -5px">

데모 : jsfiddle