Bootstrap 4 фиксированная позиция с шириной наследовать не работает - PullRequest
2 голосов
/ 06 апреля 2019

У меня есть контент и боковая панель:

.border {
   border: 1px solid black;
}
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

    <title>Hello, world!</title>
  </head>
  <body>
    <div id="app">
       <div class="container">
           <div class="row">
              <div class="col-md-7 col-lg-9 border">
                <div class="content">
                  .....
                  </div>
              </div>
              <div class="col-md-5 col-lg-3 border position-relative">
                 <div class="position-fixed border" style="    width: inherit;">
                   ....
                 </div>
              
              </div>
           </div>
           
       </div>
    </div>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
  </body>
</html>

В этом примере ширина элемента position-fixed не является наследницей родительского элемента.Зачем?Мне нужно получить наследовать ширину родительского элемента.Если я установлю ширину: 20%, то ширина работает с фиксированной позицией, но почему не работает наследование ширины?

1 Ответ

2 голосов
/ 06 апреля 2019

Работает нормально, но вы должны заметить, что position:fixed имеет ширину относительно области просмотра.Поэтому, если вы установите 20% в родительский элемент, фиксированный элемент унаследует 20% и не будет наследовать вычисленное значение пикселя ширины родительского элемента.

Таким образом, оба элемента будут иметь 20%, но не обаиз них имеют одинаковую ссылку для процента (т. е. не оба имеют одинаковый содержащий блок)

Ключевое слово наследования CSS заставляет элемент, для которого определено, принять вычисленное значение свойстваот его родительского элемента. ref

... Однако для некоторых свойств (таких, где проценты относятся к чему-то, что может потребоваться для определения макета, например,width, margin-right, text-indent и top), указанные в процентах значения превращаются в вычисленные в процентах значения . ref

Вот базовый пример для иллюстрации:

.box {
  border:2px solid red;
  min-height:50px;
  width:100%;
}
.box > div {
  position:fixed;
  width:inherit;
  min-height:50px;
  border:2px solid green;
  left:0;
}

body {
  padding:0 100px;
}
<div class="box">
  <div></div>
</div>

В приведенном ниже примере оба элемента имеют width:100%.Фиксированный элемент имеет 100% ширину области просмотра, в то время как статический элемент имеет 100% ширины body минус отступ.

Положение и размер блока (ов) элементаиногда вычисляется относительно определенного прямоугольника, называемого содержащим блок элементом.Содержащий блок элемента определяется следующим образом:

...

Для других элементов, если позиция элемента 'относительная' или 'статическая', содержащий блок формируется краем содержимого блока предка ближайшего контейнера блока.

Если элемент имеет 'position: fixed', содержащий блок устанавливается в окне просмотра в случае непрерывного носителя или области страницы в случае постраничного носителя. ref


Еще одна вещь, на которую следует обратить внимание, это то, что вы не устанавливаете любое значение left в своем коде, котороесбивает с толку и заставит вас думать, что ширина фиксированного элемента неверна, но у вас просто переполнение.

Вот предыдущий код без левых:

.box {
  border:2px solid red;
  min-height:50px;
  width:100%;
}
.box > div {
  position:fixed;
  width:inherit;
  min-height:50px;
  border:2px solid green;
}

body {
  padding-left:100px;
}
<div class="box">
  <div></div>
</div>

Можно подумать, что фиксированный элемент имеет такую ​​же ширину, что и статический, но нет.Фиксированный элемент переполнен.

Связанный: Почему мои абсолютно позиционированные элементы не находятся там, где я ожидаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...