Как сделать так, чтобы высота изображения реагировала на столбец Bootstrap 4, чтобы не влиять на встроенное видео в соседнем столбце? - PullRequest
0 голосов
/ 04 апреля 2020

Мне нужна строка, которая содержит изображение, встроенное видео и текст. Сайт использует Bootstrap для адаптивного поведения, однако объекты в этой строке не должны складываться при уменьшении ширины страницы.

С изображением в первом столбце встроенное видео во втором столбце имеет проблемы с изменением размера при уменьшении ширины страницы. Похоже, что когда ширина страницы уменьшается, а высота строки становится меньше высоты изображения в первом столбце, встроенное видео во втором столбце начинает отображать черные полосы сверху и снизу и теряет соотношение сторон. Это происходит, даже если само изображение, кажется, меняет высоту (таким образом, будучи «отзывчивым»). Но настоящая проблема, которую я пытаюсь решить, - это проблема с внедренным видео во втором столбце, которое портится при уменьшении ширины страницы (с изображением в первом столбце).

Мой код выглядит следующим образом:

<html lang="en">
<head>
    <title></title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">  
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-3 border">
                <a href="https://placeholder.com"><img class="img-fluid" src="https://via.placeholder.com/30x225" alt="image"></a>
            </div>
            <div class="col-6 border embed-responsive embed-responsive-16by9" id="vid">
                <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/kyJUQuaECrg" allowfullscreen></iframe>
            </div>
            <div class="col-3 border d-flex">
                <span class="mt-auto">Some Text</span>
            </div>
        </div>
    </div>
</body>
</html>

Похоже, проблема в центре изображения в первом столбце. Если я удаляю изображение и помещаю текст в столбец, то размер встроенного видео во втором столбце изменяется должным образом при любой ширине окна.

Хотя класс img-Fluid, добавленный к изображению в первом столбце, выглядит следующим образом: заставьте изображение иметь отзывчивую высоту, видео во втором столбце испортится, когда ширина страницы уменьшится. Я перепробовал все виды манипуляций с высотой, используя проценты к изображению и к div / col, содержащему изображение, но до сих пор не могу найти комбинацию, которая решает эту проблему.

В конечном счете, я бы хотел быть в состоянии указать высоту для изображения в первом столбце, который определяется в процентах от его контейнера. Мне нужно, чтобы изображение имело отзывчивую высоту, а встроенное видео - масштабировалось, но при этом поддерживало его внешний вид (без черных полос и правильного соотношения сторон) при любой ширине страницы.

Кстати, изображение в первом столбце можно заменить на текст, повернутый на 90 градусов влево. Однако любая попытка повернуть текст в столбце Bootstrap вызвала ряд других проблем с выравниванием.

Ответы [ 2 ]

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

Я обнаружил, что если я использую класс реагирования на встраивание Bootstrap для первого столбца (содержащего изображение) и обертываю изображение в <div>, тогда встроенное видео во втором столбце ведет себя правильно.

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

<html lang="en">
<head>
    <title></title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">  
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-3 embed-responsive border">
                <div class="embed-responsive-item justify-content-end d-flex ">
                    <img class="mt-auto" style="height: 100%;" src="img/local_image.jpg">
                </div>
            </div>
            <div class="col-6 border embed-responsive embed-responsive-16by9" id="vid">
                <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/kyJUQuaECrg" allowfullscreen></iframe>
            </div>
            <div class="col-3 border d-flex">
                <span class="mt-auto">Some Text</span>
            </div>
        </div>
    </div>
</body>
</html>
0 голосов
/ 04 апреля 2020

Ну, вы можете установить высоту изображения на 100%, которая будет высотой столбца, чтобы он был адаптивным.

...