Не удалось исправить левую боковую панель

У меня есть левый div с id sideNav и правый main div вот так

#sideNav {
  background-color: #012d20;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  overflow: hidden;
  border-right-style: groove;
  height: 100vh;
}
<div class = "row">
  <!-- navigation sidebar -->
  <div class = "col-2 pt-5" id = "sideNav">
    ...
  </div>

  <!-- main content area -->
  <main class = "col-10">
    ...
  </main>
</div>

Код работает, но левая часть main теперь внутри за sideNav. Когда я удаляю свойство position sideNav css, мои div снова отображаются правильно, но sideNav больше не фиксируется и прокручивается вместе со страницей.

Как мне сохранить sideNav фиксированным и правильно отображать мои элементы div?

Дайте padding-left главному (ширина боковой панели)

Anuresh VP 13.03.2019 11:26

Да, это сработает, но это означает, что мне также придется написать другое правило css для разных размеров экрана. Разве нет способа заставить его работать без написания нескольких правил?

Mena 13.03.2019 11:30

Вам не нужно абсолютное позиционирование, если вы собираетесь сделать высоту первого элемента div равной 100vh. Просто поместите оба div как float: left;

Ari 13.03.2019 11:32
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
3
253
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Это потому, что fix "игнорируется" другими контейнерами. Это handeld, как если бы это было абсолютным. Вы можете задать боковой панели фиксированную ширину, а основной — отступ.

#sideNav {
  background-color: #012d20;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  overflow: hidden;
  border-right-style: groove;
  height: 100vh;
  width: 350px;
}

main {
  padding-left: 350px;
}

Кодепен

Ответ принят как подходящий

Причина, по которой это не работает для вас, заключается в том, что строка имеет тип отображения flex, поэтому все столбцы ниже вписываются в эту строку.

Затем ваши столбцы представляют собой блоки, разделенные заданным значением, например. столбец-3 столбец-4 и т. д.

Изменяя тип отображения столбца (на фиксированный в вашем примере), вы удаляете его из гибкого интервала, и поэтому ваша основная навигация будет двигаться влево, потому что вы не сместили ее.

Чтобы исправить это, не добавляйте отступы, как предлагали другие, в BootStrap есть классы, которые обрабатывают это. Вместо этого добавьте смещение-2 к основной навигации и оставьте все остальное как есть.

Пример фрагмента

#sideNav {
  background-color: #012d20;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  overflow: hidden;
  border-right-style: groove;
  height: 100vh;
}
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet" integrity = "sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin = "anonymous">

<div class = "row">
  <!-- navigation sidebar -->
  <div class = "col-2 pt-5" id = "sideNav">
    ...
  </div>

  <!-- main content area -->
  <main class = "col-10 offset-2">
    ...
  </main>
</div>

Отлично, с помощью смещения начальной загрузки это удалось.

Mena 13.03.2019 11:42

Давайте попробуем это,

Я добавляю ширину для sideNav около 40 пикселей; тот же самый padding-left я добавляю #main-content.

HTML

          <div class = "row">
            <!-- navigation sidebar -->
            <div class = "col-2 pt-5" id = "sideNav">
            <p>paragraph...</p>
           </div>
           <!-- main content area -->
           <main class = "col-10" id = "main-content">
             <p>paragraph...</p>
             <p>paragraph...</p>
           </main>
           </div>

css

        #sideNav {
            background-color: #012d20;
            position: fixed;
            z-index: 1;
            top: 0;
            left: 0;
            overflow: hidden;
            border-right-style: groove;
            height: 100%;
            width:40px;
         }

         #main-content{
          width:100%;
          float:left;
          padding:0 0 0 40px;
          background:yellow;
         }

Я видел, что вы используете загрузочную сетку, поэтому, чтобы сетка работала, я рекомендую поместить фиксированный контейнер в .col-2 div.

 #sideNav {
      background-color: #012d20;
      position: fixed;
      z-index: 1;
      top: 0;
      left: 0;
      overflow: hidden;
      border-right-style: groove;
      height: 100vh;
    }
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel = "stylesheet"/>

    <div class = "row">
      <!-- navigation sidebar -->
      <div class = "col-2 pt-5">
        <div id = "sideNav">
          ...
        </div>
      </div>

      <!-- main content area -->
      <main class = "col-10">
        ...
      </main>
    </div>

Другие вопросы по теме