Отзывчивый iframe с максимальной шириной и высотой
У меня есть контейнер с фиксированной высотой, содержащий как изображения, так и фреймы. Чтобы сделать изображения чувствительными и предотвращая как вертикальное, так и горизонтальное переполнение, я могу просто установить следующий CSS:
img {
max-width: 100%;
max-height: 100%;
}
Это гарантирует, что портретное изображение не будет переполняться вертикально, а ландшафтное изображение не будет переполняться горизонтально.
В iframe я использую метод "padding-ratio" , устанавливая дополнение элемента обертки к соотношению сторон iframe (например, 56,25% для видео 16: 9):
.iframe-wrapper {
position: relative;
height: 0;
padding-top: 56.25%;
overflow: hidden;
}
.iframe-wrapper iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
Хотя это означает, что шкала iframe с шириной окна просмотра не работает, если я изменяю высоту окна просмотра. По сути, я бы хотел, чтобы iframe имитировал работу изображений.
Ответы
Ответ 1
Для моих целей (встраивание видео с Vimeo на отзывчивый сайт) это отлично работает в браузерах, в которых я тестировал:
@media screen and (max-width: 750px) {
iframe {
max-width: 100% !important;
width: auto !important;
height: auto !important;
}
}
Он не требует местозаполнителей изображений, поэтому он намного проще.
Ответ 2
Этот код помог мне:
<div class="video-container"><iframe.......></iframe></div>
.video-container {
position:relative;
padding-bottom:56.25%;
padding-top:30px;
height:0;
overflow:hidden;
}
.video-container iframe, .video-container object, .video-container embed {
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
}
Источник: https://www.h3xed.com/web-development/how-to-make-a-responsive-100-width-youtube-iframe-embed
Ответ 3
Вот исправление, которое я чувствую, что оно может работать для вас, но вы должны идти на компромисс в отношении "коэффициента заполнения", потому что это не нужно;)
HTML:
<div class="embeded-video">
<img class="ratio-img" src="http://placehold.it/16x9" alt="16:9 Image" />
<iframe src="//www.youtube.com/embed/I_dN9IpmOZU" frameborder="0" allowfullscreen align="center"></iframe>
</div>
CSS выглядит следующим образом:
.embeded-video {
position: relative
}
.embeded-video .ratio-img {
display: block;
width: 100% !important;
height: auto !important;
}
.embeded-video IFRAME {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
Демо: http://codepen.io/anon/pen/MYbqgp?editors=110
Ответ 4
Я не уверен, можно ли позволить высоте расти только до максимальной высоты, но возможно ограничить высоту и при этом сохранить соотношение сторон. Вот умная техника, которая заставляет его работать... Я не писал этот код, но я использовал его, и он, кажется, работает довольно хорошо:
https://codepen.io/shshaw/pen/uzlfh
Копирование и вставка (слегка измененного) кода здесь для потомков... (Моя основная модификация - использование vh
единиц вместо процента.)
/* Adapted from https://codepen.io/shshaw/pen/uzlfh - thanks Shaw! */
.responsive-embed {
height: 45vh; /* Set height here */
display: inline-block; /* Must be inline-block */
position: relative; /* Keep the child element contained */
/* min/max-width will break the aspect ratio, but otherwise work as expected */
/*
min-height: 200px;
max-height: 400px;
*/
}
.responsive-embed .ratio {
height: 100%; /* Our ratio canvas is expanded to as tall as the height set above. */
width: auto; /* Allows the width to adjust based in the height, keeping the aspect ratio */
visibility: hidden; /* Prevents non-transparent image or alt text from showing up */
text-align: left;
}
.responsive-embed iframe {
/* Force the child block to be same size as parent */
position: absolute !important;
top: 0 !important; left: 0 !important;
width: 100% !important;
height: 100% !important;
}
<div class="responsive-embed">
<img class="ratio" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAJCAAAAAAeQfPuAAAAC0lEQVQYGWMYrAAAAJkAAWzZLOIAAAAASUVORK5CIIA=" alt="16x9">
<iframe src="https://player.vimeo.com/video/20732587/?api=0&portrait=0&autoplay=0&color=21abb9" width="100%" height="100%" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
</div>
Ответ 5
На всякий случай, если кто-то здесь использует (или рассматривает) UIkit, вы можете исправить это, просто добавив атрибут uk-responsive
responseive:
<iframe uk-responsive src="...">
Это так просто.