Подтвердить что ты не робот

Отзывчивый объектив: исправление обложек в Chrome

Я знаю, что есть другие вопросы об этом, но они старые и не обновлены текущей поддержкой браузеров. И они не охватывают конкретную проблему Chrome с этим.

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

В принципе, object-fit: cover отлично работает. И в Safari работает отлично, видео высокого качества/уменьшенного масштаба внутри его контейнера, поддерживающего соотношение сторон.

В Chrome тоже случается, но нет никакого отношения к высоте контейнера. Элемент превосходит высоту его контейнера и продолжает расти до дна в соответствии с шириной окна.

object-fit: fill хорошо работает в обоих браузерах, но проблема здесь очевидна, соотношение сторон не соблюдается, деформируя видео/изображение и т.д.

Вот что у меня есть:

HTML

<video preload autoplay loop poster="poster.jpg" id="bgvid">
    <source src="image/video.mp4" type="video/mp4">
</video>

CSS

#bgvid {
  width: 100%;
  min-width: 100%;
  height: 445px;
  max-height: 445px;
  background-color: #f0f0f0;
  object-fit: cover; /* cover works perfectly on Safari */
}

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


4b9b3361

Ответ 1

Я просто ударил это сам. Похоже, если вы обернете свой видеоэлемент в div и установите переполнение как скрытое, то оно будет работать вокруг Chrome, например:

<div class="wrapper">
  <video preload autoplay loop poster="poster.jpg" id="bgvid">
    <source src="image/video.mp4" type="video/mp4">
  </video>
</div>

с css

#bgvid {
  width: 100%;
  height: 100%;
  background-color: #f0f0f0;
  object-fit: cover; /* cover works perfectly on Safari */
}

.wrapper {
  width: 100%;
  min-width: 100%;
  height: 445px;
  max-height: 445px;
  overflow: hidden;
}

Я также нашел пару файлов с проблемами, которые, по-видимому, покрывают ошибку Chrome: