Как я могу имитировать функциональность background-size:cover
элемента HTML, как <video>
или <img>
?
Я хотел бы, чтобы это работало как
background-size: cover;
background-position: center center;
javascript
jquery
css
Сирон
источник
источник
cover
. См. Background-size 101 по ссылке .Ответы:
Это то, что я вырвал на некоторое время, но я наткнулся на отличное решение, которое не использует сценарий и может обеспечить идеальное моделирование обложки на видео с 5 строками CSS (9, если вы считаете селекторы и скобки) ). Это имеет 0 крайних случаев, в которых он не работает идеально, за исключением CSS3-совместимости .
Вы можете увидеть пример здесь
Проблема с решением Тимофея в том , что он неправильно обрабатывает масштабирование. Если окружающий элемент меньше видеофайла, он не уменьшается. Даже если вы дадите видео тегу крошечный начальный размер, например 16 на 9 пикселей, в
auto
конечном итоге вынудите его установить минимальный размер файла. Учитывая текущее решение с наибольшим количеством голосов на этой странице, я не смог уменьшить масштаб видеофайла, что привело к резкому увеличению масштаба.Однако, если соотношение сторон вашего видео известно, например 16: 9, вы можете сделать следующее:
Если родительский элемент видео установлен на всю страницу (например,
position: fixed; width: 100%; height: 100vh;
), то и видео тоже будет.Если вы хотите, чтобы видео также центрировалось, вы можете использовать метод точного центрирования:
Конечно,
vw
,vh
иtransform
являются CSS3, поэтому если вам нужна совместимость с более старыми браузерами , вам нужно использовать сценарий.источник
vh
иvw
что общего?jsFiddle
Использование фонового покрытия подходит для изображений, как и ширина 100%. Они не являются оптимальными для
<video>
, и эти ответы слишком сложны. Вам не нужен jQuery или JavaScript для создания полноэкранного фонового видео.Имейте в виду, что мой код не будет полностью покрывать фон с помощью видео, как обложка, но вместо этого он сделает видео настолько большим, насколько это необходимо для поддержания соотношения сторон и при этом будет охватывать весь фон. Любое лишнее видео будет отбрасываться по краю страницы, причем стороны зависят от того, где вы привязали видео.
Ответ довольно прост!
Просто используйте этот видеокод HTML5 или что-то в этом роде: (тестирование на полной странице)
Минимальная высота и минимальная ширина позволят видео поддерживать соотношение сторон видео, которое обычно является соотношением сторон любого обычного браузера при нормальном разрешении. Любое лишнее видео выходит за пределы страницы.
источник
min-width
илиmin-height
делает трюк.position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
.Для некоторых браузеров вы можете использовать
http://caniuse.com/object-fit
источник
height: 100%; width: 100%;
. спасибо за этот современный ответВот как я это сделал. Рабочий пример находится в этом jsFiddle .
источник
video { min-width: 100%; min-height: 100%; }
и он работает как шарм.background-size: cover
для видео.Другие ответы были хорошими, но они включают в себя JavaScript или они не центрируют видео по горизонтали и вертикали.
Вы можете использовать это полное решение CSS для создания видео, которое имитирует свойство background-size: cover:
источник
Основываясь на ответе и комментариях Даниэля де Вит , я искал немного больше. Спасибо ему за решение.
Решением является использование,
object-fit: cover;
которое имеет отличную поддержку (его поддерживают все современные браузеры). Если вы действительно хотите поддерживать IE, вы можете использовать polyfill как object-fit-images или object-fit .Демоверсии:
и с родителем:
источник
object-fit: cover
иwidth
иheight
установив на 100%, вы получаете пропорционально масштабированныйimg
илиvideo
увеличенный по центру без суеты.Решение M-Pixel великолепно тем, что оно решает проблему масштабирования ответа Тимоти (видео будет увеличиваться, но не уменьшаться, поэтому, если ваше видео действительно большое, есть хорошие шансы, что вы увидите только небольшой увеличенный фрагмент). Однако это решение основано на ложных предположениях, связанных с размером контейнера видео, а именно, что он обязательно равен 100% ширины и высоты области просмотра. Я обнаружил несколько случаев, когда это не сработало для меня, поэтому я решил заняться проблемой самостоятельно, и я считаю, что нашел окончательное решение .
HTML
CSS
Он также основан на соотношении видео, поэтому если ваше видео имеет коэффициент, отличный от 16/9, вам нужно изменить нижний процент заполнения. Помимо этого, он работает из коробки. Протестировано в IE9 +, Safari 9.0.1, Chrome 46 и Firefox 41.
РЕДАКТИРОВАТЬ (17 марта 2016 г.)
Так как я опубликовал этот ответ я написал небольшой модуль CSS для имитации как
background-size: cover
иbackground-size: contain
на<video>
элементах: http://codepen.io/benface/pen/NNdBMjОн поддерживает различные выравнивания для видео (аналогично
background-position
). Также отметим, чтоcontain
реализация не идеальна. В отличие от этогоbackground-size: contain
, оно не будет масштабировать видео до его фактического размера, если ширина и высота контейнера будут больше, но я думаю, что в некоторых случаях это может быть полезно. Я также добавил специальныеfill-width
иfill-height
классы, которые вы можете использовать вместе,contain
чтобы получить специальное сочетаниеcontain
иcover
... попробовать его, и не стесняйтесь улучшать его!источник
object-fit: cover
для FF и Chrome, а ваше решение с Modernizr для IEobject-fit: cover
лучший ответ с этим IE, Safari polyfill.https://github.com/constancecchen/object-fit-polyfill
Она поддерживает
img
,video
иpicture
элементы.источник
CSS и маленькие js могут заставить видео покрывать фон и горизонтально центрироваться.
CSS:
JS: (связать это с изменением размера окна и вызвать один раз отдельно)
источник
Сразу после нашего длинного раздела комментариев, я думаю, это то, что вы ищете, на основе jQuery:
HTML:
JS:
CSS:
Приведенный выше код использует ширину и высоту браузера, если вы делаете это внутри div, вам придется изменить его на что-то вроде этого:
Для Div:
HTML:
JS:
CSS:
Я должен также заявить, что я только что протестировал это Google Chrome ... вот jsfiddle: http://jsfiddle.net/ADCKk/
источник
Верхний ответ не уменьшает видео, если ширина браузера меньше ширины вашего видео. Попробуйте использовать этот CSS (с идентификатором вашего видео #bgvid):
источник
z-index
нужен?я тоже хочу опубликовать это решение, так как у меня была эта проблема, но другие решения не работали для моей ситуации ...
я думаю, чтобы правильно моделировать
background-size:cover;
свойство css для элемента вместо свойства background-image elements, вам нужно сравнить соотношение сторон изображения с текущим соотношением сторон окна, поэтому независимо от того, какой размер (а также в случае, если изображение выше, чем шире) окно - элемент, заполняющий окно (и также центрирующий его, хотя я не знаю, было ли это требованием) ....используя изображение, просто для простоты, я уверен, что элемент видео тоже будет работать нормально.
сначала получите соотношение сторон элементов (как только оно будет загружено), затем присоедините обработчик изменения размера окна, активируйте его один раз для первоначального определения размера:
затем в обработчике изменения размера вы должны сначала определить, следует ли заполнять ширину или высоту заливки, сравнивая текущее соотношение сторон окна с исходным соотношением сторон изображения.
}
источник
Этот подход просто использует CSS и HTML. Вы можете легко сложить div ниже видео. Это прикрытие, но не по центру при изменении размера.
HTML:
CCS:
источник
@ Скрытые Гоббс
Вы открыли награду за этот вопрос только для решения CSS, поэтому я попробую. Мое решение такой проблемы - использовать фиксированное соотношение для определения высоты и ширины видео. Я обычно использую Bootstrap, но я извлек из него необходимый CSS, чтобы он работал без него. Это код, который я использовал ранее, чтобы, среди прочего, центрировать вставленное видео с правильным соотношением. Он должен работать
<video>
и<img>
элементы слишком Это верхний , что имеет отношение, но я дал вам два других, а так как я уже имел их прокладки вокруг. Удачи! :)Пример полноэкранного jsfiddle
источник
Чтобы ответить на комментарий Weotch о том, что ответ Тимоти Райана Карпентера не учитывает
cover
центрирование фона, я предлагаю быстрое CSS-исправление:CSS:
Добавление этих двух строк будет центрировать любой элемент. Более того, все браузеры, которые могут обрабатывать видео HTML5, также поддерживают преобразования CSS3, поэтому это всегда будет работать.
Полный CSS выглядит следующим образом.
Я бы прокомментировал ответ Тимоти, но у меня недостаточно репутации, чтобы сделать это.
источник
Ребята, у меня есть лучшее решение, оно короткое и прекрасно работает для меня. Я использовал это для видео. И это прекрасно имитирует вариант обложки в CSS.
Javascript
Если вы перевернете if, иначе вы получите содержание.
А вот и CSS. (Вам не нужно использовать его, если вы не хотите позиционировать центр, родительский div должен быть « position: родственник »)
CSS
источник
Я просто решил это и хотел поделиться. Это работает с Bootstrap 4. Это работает с,
img
но я не проверял это сvideo
. Вот ХАМЛ и СКСHAML
SCSS
источник
Старый вопрос, но в случае, если кто-нибудь увидит это, лучший ответ на мой взгляд - конвертировать видео в анимированный GIF. Это дает вам гораздо больше контроля, и вы можете просто обращаться с ним как с изображением. Это также единственный способ работать на мобильном устройстве, поскольку вы не можете автоматически воспроизводить видео. Я знаю, что вопрос заключается в том, чтобы сделать это в
<img>
теге, но я не вижу недостатка в использовании<div>
и выполненииbackground-size: cover
источник
.gif
это намного больше по размеру, но при этом более размыто. Мое мнение изменилось с тех пор, как я написал этот ответ. Жаль, что вы не можете объединить лучшее из обоих.