Почему мой контейнер шире, чем его дочерний элемент в других браузерах, кроме Chrome? - PullRequest
0 голосов
/ 14 марта 2019

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

Screenshot from Firefox

МожетКто-нибудь объяснит мне, почему зеленый div, содержащий изображение, не регулирует его ширину относительно ребенка?Это ошибка?Это особенность?Это ошибка?

Исследования

Это работает, как я ожидаю, в Chrome, где это выглядит так:

Screenshot from Chrome

Но в Firefox есть много странных пробелов (это то же изображение, что и первое):

Screenshot from Firefox

Также,Вот скриншот следующих браузеров (начиная слева) Firefox, Opera и Internet Explorer 11:

Screenshot from FF, Opera and IE11

Как видите, работаеткак я ожидаю в Opera, но не в FF и IE11.Это не работает и в Edge.

Мои выводы

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

Вотснимок экрана без ограничений по высоте (100% высоты родителей 200 пикселей):

enter image description here

Если я прочитал ограничение по высоте, это выглядит так:

enter image description here

Как видите, ширина одинакова.Обратите внимание, что ширина зеленого div составляет 510 пикселей.Это то же самое, что и изображение (500 пикселей) + отступы (5 пикселей + 5 пикселей).

Код

Я попытался добавить jsFiddle для вашего удобства, но, как ни странно, я былне удалось воспроизвести ошибку там (она работала как положено).

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <style>

        .wrapper {
            height: 200px;
        }

        .div1 {
            float: left;
            background-color: green;
        }

        .div1 img {
            height: 100%;
            padding: 5px;
        }

        .div2 {
            background-color: blue;
        }

    </style>
</head>
<body>
    <div class="wrapper">
        <div class="div1">
            <img src="http://placehold.it/500x500">
        </div>

        <div class="div2">
            <h1>Heading</h1>
        </div>
    </div>
</body> 
</html>

1 Ответ

0 голосов
/ 14 марта 2019

Я отвечу на свой вопрос в надежде помочь кому-то еще

TLDR:

Мне не хватало декларации типа документа HTML5, которая выглядит следующим образом: <!DOCTYPE html>.

Более длинная версия:

При написании этого вопроса меня внезапно поразило, что это может быть вызвано отсутствием объявления типа документа.Быстрый тест подтвердил мое подозрение.Все, чего мне не хватало, это декларации <!DOCTYPE html>!

Можно с уверенностью сказать, что я обновлю свой фрагмент кода, добавив в него doctype.Я использовал фрагмент doc Visual Studio и никогда не думал об этом.Обратите внимание, что фрагмент html уже содержит тип документа.(В VS: если вы наберете html или doc и нажмете вкладку в документе HTML, появится быстрый шаблон HTML)

Почему

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

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

Niceзнать:

Убедитесь, что вы поместили DOCTYPE прямо в начале вашего HTML-документа.Все, что находится до DOCTYPE, например комментарий или объявление XML, вызовет режим причуд в Internet Explorer 9 и старше.

-MDN

В HTML5 единственная цельDOCTYPE должен активировать режим полных стандартов.

-MDN

Как узнать, какой режим используется

В Windows нажмите alt, чтобы вызватьстарая панель инструментов, затем перейдите к ToolsPage info

enter image description here

enter image description here

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