Twitter Bootstrap - верхняя панель навигации, блокирующая верхний контент страницы

250

У меня есть этот код Bootstrap для Twitter

  <div class='navbar navbar-fixed-top'>
    <div class='navbar-inner'>
      <div class='container'>
        <a class='btn btn-navbar' data-target='.nav-collapse' data-toggle='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 class='active'>
              <a href='some_url'>My Home</a>
            </li>
            <li>
              <a href='some_url'>Option 1 </a>
            </li>
            <li>
              <a href='some_url'>Another option</a>
            </li>
            <li>
              <a href='some_url'>Another option</a>
            </li>
          </ul>
        </div>
      </div>
    </div>
  </div>

Но когда я просматриваю начало страницы, панель навигации блокирует часть содержимого, которое находится в верхней части страницы. Любая идея о том, как заставить его понижать остальную часть контента ниже при просмотре верхней части страницы, чтобы содержимое не блокировалось навигационной панелью?

Теги:

14 ответов

168
Лучший ответ

Добавьте в свой CSS:

body { 
    padding-top: 65px; 
}

В Документах по загрузке:

Фиксированная навигационная панель будет накладывать ваш другой контент, если вы не добавите дополнение к верхней части тела.

  • 11
    См. Дополнительный ответ ниже @Spajus о том, как кодировать это для отзывчивой Bootstrap
  • 4
    Определенно используйте другой ответ с немного большей краткостью, используя @media (min-width: 980px) {body {padding-top: 60px; }}
Показать ещё 2 комментария
315

Добавление дополнений, подобных этому, недостаточно, если вы используете отзывчивый бутстрап. В этом случае при изменении размера окна вы получите разрыв между верхней частью страницы и навигационной панелью. Правильное решение выглядит так:

body {
  padding-top: 60px;
}
@media (max-width: 979px) {
  body {
    padding-top: 0px;
  }
}
  • 17
    Отлично. Это действительно должно быть как-то интегрировано в бутстрап. Вы должны раскошелиться и отправить запрос на получение.
  • 1
    Хорошее решение, но есть еще что-то не решенное. Посмотрите на этот вопрос, который я только что задал, и посмотрите, сможет ли кто-нибудь помочь. stackoverflow.com/questions/12763707/...
Показать ещё 12 комментариев
120

Для bootstrap 3 класс navbar-static-top вместо navbar-fixed-top предотвращает эту проблему, если вам не нужно, чтобы навигационная панель всегда была видимой.

  • 2
    Это работает, однако, может оставить некоторое пространство над панелью навигации. Вам может потребоваться изменить site.css и удалить 80px padding-top из тела.
  • 9
    Я перепробовал все, и это единственный ответ, который сработал. Поскольку это наиболее общее решение и не зависит от размера экрана, это должен быть правильный ответ.
Показать ещё 7 комментариев
56

гораздо более удобное решение для вашей справки, оно отлично работает во всех моих проектах:

измените свой первый "div" с

<div class='navbar navbar-fixed-top'>

к

<div class="navbar navbar-default navbar-static-top">
  • 3
    Это должен быть правильный ответ.
  • 22
    Статическая навигационная панель исчезает при прокрутке.
Показать ещё 3 комментария
15

Я использую jQuery для решения этой проблемы. Это фрагмент для BS 3.0.0:

$(window).resize(function () { 
    $('body').css('padding-top', parseInt($('#main-navbar').css("height"))+10);
});

$(window).load(function () { 
    $('body').css('padding-top', parseInt($('#main-navbar').css("height"))+10);        
});
  • 2
    Я использовал изображение поверх панели навигации и у меня были реальные проблемы со скрытым контентом. Это сработало отлично! Спасибо!
  • 2
    Большое спасибо за ваше решение. этот ответ сработал как очарование для меня :) Я хотел бы добавить одну вещь. Когда вы загружаете страницу, тело устанавливается сверху, прежде чем оно автоматически подстраивается, потому что jquery не запускается мгновенно. Чтобы сделать это более плавным, я добавил это в CSS body {padding-top: // начальная высота моей панели навигации; } Это помогает в плавном переходе! Еще раз спасибо!
Показать ещё 4 комментария
6

У меня был хороший успех с созданием фиктивного нефиксированного навигационного бара прямо перед моей реальной фиксированной навигационной панелью.

<nav class="navbar navbar-default"></nav> <!-- Dummy nav bar -->
<nav class="navbar navbar-default navbar-fixed-top"> <!-- Real nav bar -->
    <!-- Nav bar details -->
</nav>

Интервал работает отлично при всех размерах экрана.

  • 1
    Работает для меня тоже
  • 0
    Какая удачная находка - Что заставило тебя понять это? !!!
Показать ещё 7 комментариев
6

В моем проекте, полученном из учебника MVC 5, я обнаружил, что изменение отступов тела не повлияло. Для меня работали следующие:

@media screen and (min-width:768px) and (max-width:991px) {
    body {
        margin-top:100px;
    }
}
@media screen and (min-width:992px) and (max-width:1199px) {
    body {
        margin-top:50px;
    }
}

Он разрешает случаи, когда navbar складывается в 2 или 3 строки. Это можно вставить в bootstrap.css в любом месте после строк   body {     margin: 0;   }

3

Как видно на в этом примере из Twitter, добавьте это перед строкой, включающей декларации чувствительных стилей:

<style> 
    body {
        padding-top: 60px;
    }
</style>

Так же:

<link href="Z/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<style type="text/css">
    body {
        padding-top: 60px;
    }
</style>
<link href="Z/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" />
2

с navbar navbar-default все работает нормально, но если вы используете navbar-fixed-top, вы должны включить нестандартное тело стиля {padding-top: 60px; } в противном случае он заблокирует содержимое под ним.

  • 1
    Это не добавляет никакой информации, которой нет в других ответах.
1

Загрузочный файл v4 стартовый шаблон css использует:

body {
  padding-top: 5rem;
}
1

используя percentage, намного лучше, чем pixels.

body {
  padding-top: 10%; //This works regardless of display size.
}

При необходимости вы все равно можете быть явным, добавляя разные breakpoints, как упоминалось в другом ответе @spajus

1

Используя MVC 5, способ, которым я исправил мой, состоял в том, чтобы просто добавить мой собственный Site.css, загруженный после других, следующей строкой: body{padding: 0}

и я изменил код в начале _Layout.cshtml, чтобы быть:

<body>
    <div class="navbar navbar-inverse navbar-static-top">
        <div class="container">
            @if (User.Identity.IsAuthenticated) {
                <div class="top-navbar">
0
<div class='navbar' data-spy="affix" data-offset-top="0">

Если ваш навигатор находится сверху страницы, установите значение равным 0. В противном случае установите для параметра data-offset-top значение содержимого над навигационной панелью.

Между тем, вам необходимо изменить css как таковой:

.affix{
  width:100%;
  top:0;
  z-index: 10;
}
0

вы должны добавить

 #page 
 { 
   padding-top: 65px
 }

чтобы не уничтожить липкий нижний колонтитул или что-то еще

Ещё вопросы

Сообщество Overcoder
Наверх
Меню