CSS / Flexbox Chrome неправильно определяет размер

Может ли кто-нибудь предложить, почему Chrome, похоже, не правильно определяет высоту при использовании следующего упрощенного кода Flexbox?

<div style = "position: absolute; left: 0px; top: 0px; width: 100%; height: 100%">
  <div style = "display: flex; flex-direction: column; width: 100%; height: 100%">
    <div style = "width: 100%; flex: 1 0 auto; background: red">
      <div style = "display: flex; flex-direction: row; width: 100%; height: 100%; background: gray">
        <div style = "height: 100%; flex: 1 0 auto">
          <div style = "width: 100%; height: 100%; background: orange">
            boop
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

Что происходит можно увидеть на изображении: CSS / Flexbox Chrome неправильно определяет размер

Кто-нибудь может придумать исправление? У меня есть небольшая структура, которая использует таблицы внизу для макета. Я, наконец, нахожусь в процессе обновления его для использования Flexbox, но мне кажется, что я не могу заставить вложенные flexbox работать правильно во всех браузерах.

Обновлено: Итак, если я добавлю еще один div "boop" в качестве дочернего элемента к контейнеру flexbox, я хочу следующее (из firefox и IE).

CSS / Flexbox Chrome неправильно определяет размер

Если я установил высоту на 100%, тогда он завинтил высоту для других родственных div.

CSS / Flexbox Chrome неправильно определяет размер

удалите flex-direction: column; из второго div ИЛИ добавьте height:100% в третий

Temani Afif 20.04.2018 16:29

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

Karsten Pedersen 20.04.2018 16:45

Я считаю, что Только Chrome правильно вычисляет высоту. Первый div установлен на 100% высоты своего родителя. Но его родитель - body, и он содержит только одно слово (boop), поэтому его высота - одно слово. Меня больше удивляет то, что другие браузеры заполняют всю страницу без видимой причины.

Jeremy Thille 20.04.2018 16:48

Справедливо. Итак, как мне заставить стандартный браузер заполнять родительское пространство? (Я добавляю несколько изображений, чтобы помочь пояснить).

Karsten Pedersen 20.04.2018 16:51

Уф, так сбит с толку. Я думал, что понимаю это, ха-ха. Итак, если я установлю базис на 0 для красного div (т.е. flex: 1 0 0) ... он будет работать так же, как firefox и IE. Есть идеи, почему это так?

Karsten Pedersen 20.04.2018 17:13

Два небольших изменения, и он работает во всех браузерах: jsfiddle.net/ds3ujxzd

Michael Benjamin 20.04.2018 17:23

Проблема объяснена в обмане. Я использовал Решение № 4 из принятого ответа.

Michael Benjamin 20.04.2018 17:25

Большое спасибо, но мы еще не совсем там. Я изменил вашу скрипку: jsfiddle.net/g79t6vey Можно ли, чтобы оранжевый цвет заполнился серым. а также имел оба блока друг под другом?

Karsten Pedersen 20.04.2018 17:38

В настоящее время в моей скрипке: замена строки 33 на: "flex: 1 0 0px;" исправляет это в Chrome. Я просто пытаюсь выяснить, почему: S В настоящее время: я думаю, что столкнулся с этим: github.com/philipwalton/flexbugs/issues/197 И такое же решение, похоже, работает для меня.

Karsten Pedersen 20.04.2018 17:40

Да. Вместо flex: 1 0 auto используйте flex: 1 0 0px (такой же, как flex: 1) jsfiddle.net/g79t6vey/2

Michael Benjamin 20.04.2018 18:11
Разница между flex-basis: auto и flex-basis: 0.
Michael Benjamin 20.04.2018 18:13

Также не забудьте добавить @username в свои комментарии, иначе пользователь не получит уведомление о том, что вы разместили сообщение. Я случайно наткнулся на твой пост.

Michael Benjamin 20.04.2018 18:19

@Michael_B Большое спасибо. Хотя я все еще вижу несколько проблем. Использование базиса 0 пикселей имеет довольно плохой побочный эффект в том смысле, что, когда размер окна становится меньше, чем содержимое, происходит очень странное перекрытие, поэтому я не считаю, что это правильное решение для этого. Я собрал реальный jfiddle, чтобы продемонстрировать общую проблему. jsfiddle.net/uhgu6w53 Я надеюсь, что это не слишком много, чтобы спросить, но можете ли вы поиграть с этим, чтобы увидеть, что вы сделаете, чтобы убедиться, что (то есть оранжевое поле) правильно расширяется при вложении сложными способами

Karsten Pedersen 20.04.2018 18:46

Упс, забыл упомянуть. Пример jfiddle (jsfiddle.net/uhgu6w53) подходит для других браузеров. Просто Chrome, похоже, не изменяет размер оранжевого div и вместо этого возвращается к высоте содержимого.

Karsten Pedersen 20.04.2018 18:53
jsfiddle.net/uhgu6w53/1
Michael Benjamin 20.04.2018 18:54

Ах, фантастика! Спасибо!. Хотя ваши изменения очень интересны. Я думал, что display: flex нужен только в том случае, если вы собираетесь поместить непосредственных потомков в div, у которого есть flex: x или какое-либо другое свойство, связанное с flex. Кроме того, почему мы хотим удалить высоту: 100% из гибкой строки, но не из гибкой колонки?

Karsten Pedersen 20.04.2018 18:59
height: 100% в контейнере направления строк отменяет настройку по умолчанию align-items: stretch, которая может работать только в том случае, если высота дочернего элемента вычисляется как auto. Более полное объяснение здесь: stackoverflow.com/q/44878379/3597276
Michael Benjamin 23.04.2018 01:49
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
1
17
46
0

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