Почему Firefox и Chrome визуализируют эту прокручиваемую область в гибком дочернем элементе по-разному и как заставить Firefox работать так же, как Chrome? - PullRequest
0 голосов
/ 22 апреля 2020

Я создаю панель инструментов с динамическим количеством элементов c справа от страницы, высота которой всегда равна высоте области просмотра.

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

Однако, с моим решением, в Firefox полоса прокрутки находится над элементами. В Chrome он рендерится так, как ожидалось, и сдвигает элементы для прокрутки в сторону.

Я искал некоторое время, но мои поисковые слова перекрываются более старыми проблемами, касающимися min-height: 0 и min- ширина: 0 для гибкого дочернего вопроса. Проблема, когда сама полоса прокрутки находится чуть выше содержимого области прокрутки, я не смог найти.

Воспроизведение на JSFiddle: https://jsfiddle.net/3o65an7m/4/

Воспроизведение также скопировано здесь, но imo легче увидеть проблему в JSFiddle:

html {
  height: 400px;
}

body, .wrap {
  height: 100%;
  margin: 0;
}

.wrap {
  display: flex;
  flex-direction: column;
  min-height: 0;
}

.right-bar {
  flex-grow: 1;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  justify-content: space-between;
  min-height: 0;
}

.upper {
  flex-grow: 1;
  overflow-y: auto;
}

.footer {
  color: white;
  width: 100%;
  background: blue;
}

.b {
  height: 20px;
  width: 20px;
  background: red;
  margin: 4px;
  padding: 4px;
}
<html>
<body>
<div class="wrap">
  <div class="right-bar">
    <div class="upper">
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
    </div>
    <div class="lower">
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
      <div class="b"></div>
    </div>
  </div>
  <div class="footer">Text</div>
</div>
</body>
</html>

Сравнение изображений; левый FF, правый Chrome. Я хочу, чтобы поведение всегда было таким же видимым в Chrome:

Image showing difference in render between Firefox and Chrome; in Firefox, scrollbar is above elements, in Chrome, elements are shifted to the left to avoid collision with scrollbar

1 Ответ

0 голосов
/ 22 апреля 2020

Они отображаются по-разному, потому что они разные браузеры, использующие разные механизмы рендеринга

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