Как использовать <img>или <canvas>с макетом «display: flex» - PullRequest
0 голосов
/ 11 ноября 2018

Как мы можем иметь <img> или <canvas>, который растягивается / сжимается, чтобы заполнить оставшееся пространство в типе макета display: flex? Это просто сделать <div> заполнитьОстальное пространство, но у <img> есть свое представление о размере, которое мешает правильной работе макета.Например, предположим, что у нас есть:

  • родитель <div> с display: flex,
  • ребенок <h1> с flex: 0 0 auto и
  • achild <img> с flex: 1 1 0px.

При изменении размера окна <img> (или <canvas>) иногда точно соответствует, но иногда переполняет родительский элемент в зависимости от размера или соотношения сторонокно.

<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Simple Test</title>
        <style>
            body {
                width: 100vw;
                height: 100vh;
                box-sizing: border-box;
                display: flex;
                flex-flow: column nowrap;
                margin: 0px;
                border: 4px dashed lightcoral;
            }
            h1 {
                flex: 0 0 auto;
                margin: 0px;
                border: 4px solid chocolate;
            }
            div {
                flex: 1 1 0px;
                border: 4px dotted darkorchid;
            }
            canvas {
                width: 100%;
                height: 100%;
                box-sizing: border-box;
                border: 4px solid lightseagreen;
            }
        </style>
    </head>
    <body>
    <h1>Heading</h1>
    <div><canvas width="400" height="200"/></div>
    <script>
        var c = document.getElementsByTagName('canvas').item(0);
        var x = c.getContext('2d');
        x.ellipse(100, 100, 50, 50, 0, 0, 360);
        x.fill();
    </script>
    </body>
    </html>

1 Ответ

0 голосов
/ 11 ноября 2018

Отвечая на мой собственный вопрос, это связано с поведением flex-shrink, что хорошо объясняется этим вопросом .

Короче говоря, для flex-элементов по умолчанию используется значение min-width: auto, которое обычно означает ширину содержимого (или высоту в зависимости от flex-direction). Просто установите min-width: 0, чтобы позволить <img> или <canvas> правильно изменить размер. Это, возможно, более запутанно в этом случае, потому что кажется неуместным назначать этим элементам минимальный размер.

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