Как я могу сделать масштаб игрока YouTube равным ширине страницы, но также сохранить соотношение сторон?
У меня есть видео на YouTube, которое я хочу разместить на своей веб-странице.
Я хочу масштабировать видео, чтобы оно соответствовало проценту браузера пользователей, а также чтобы сохранить соотношение сторон.
Я пробовал это:
<iframe width="87%" height="315" src="http://www.youtube-nocookie.com/embed/dU6OLsnmz7o" frameborder="0" allowfullscreen></iframe>
Но это делает игрока более широким, а не выше.
Нужно ли прибегать к JavaScript (или нестандартным CSS)?
Ответы
Ответ 1
Я столкнулся с подобной проблемой с моим сайтом при разработке некоторого отзывчивого CSS. Я хотел, чтобы любые встроенные объекты Youtube изменялись с изменением размера при переключении с настольного CSS на нечто меньшее (я использую медиа-запросы для повторного отображения содержимого для мобильных устройств).
Решение, на котором я остановился, - это CSS и надбавка. В принципе, у меня есть три класса видео в моем CSS:
.video640 {width: 640px; height: 385px}
.video560 {width: 560px; height: 340px}
.video480 {width: 480px; height: 385px}
... и я назначаю один из них содержимому Youtube, которое я включаю, в зависимости от его первоначального размера (вам может потребоваться больше классов, я просто выбрал наиболее распространенные размеры).
В мультимедийном запросе CSS для более мелких устройств эти же классы просто повторяются так:
.video640 {width: 230px; height: 197px}
.video560 {width: 230px; height: 170px}
.video480 {width: 240px; height: 193px}
Я понимаю, что это требует некоторой надстройки "вверх", когда вы включаете видео в свой HTML (то есть добавляете класс), но если вы не хотите идти по маршруту Javascript, это работает очень хорошо - вы может пересобирать ваши видео-классы на столько разных размеров, сколько вам нужно. Вот как выглядит надпись Youtube:
<object class="video640" type="application/x-shockwave-flash" value="YOUTUBE URL">
<param name="movie" value="YOUTUBE URL"></param>
</object>
Ответ 2
Что я считаю лучшим решением для CSS.
.auto-resizable-iframe {
max-width: 420px;
margin: 0px auto;
}
.auto-resizable-iframe > div {
position: relative;
padding-bottom: 75%;
height: 0px;
}
.auto-resizable-iframe iframe {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
}
<div class="auto-resizable-iframe">
<div>
<iframe frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/_OBlgSz8sSM"></iframe>
</div>
</div>
Демо http://jsfiddle.net/JBhp2/
Ответ 3
Довольно легко с некоторыми javascript.
jQuery(function() {
function setAspectRatio() {
jQuery('iframe').each(function() {
jQuery(this).css('height', jQuery(this).width() * 9/16);
});
}
setAspectRatio();
jQuery(window).resize(setAspectRatio);
});
Ответ 4
Этот плагин jQuery в последнее время делает раунды, он называется FitVids и делает именно то, что вам нужно, изменяет размеры видео на основе размера браузера в то время как поддерживая соотношение сторон.
http://fitvidsjs.com/
Ответ 5
Трюк, чтобы сделать видеоизображение видео youtube, заключается в том, чтобы сделать ширину iframe 100% и поместить ее в div с "padding-bottom", равным пропорции в процентах. Например.
Но проблема в том, что у вас будет много страниц со встроенными видео YoutTube. Здесь плагин jquery, который сканирует все видео на странице и автоматически изменяет их размер, изменяя код iframe, как указано выше. Это означает, что вам не нужно менять код. Включите javascript, и все ваши видеоролики YouTube станут авторезистирующими.
https://skipser.googlecode.com/files/youtube-autoresizer.js
Ответ 6
Старый вопрос, но я думаю, что теги @media CSS 3 будут полезны в этом случае.
Вот мое решение аналогичной проблемы.
CSS:
@media only screen and (min-width: 769px) {
.yVid {
width: 640px;
height: 360px;
margin: 0 auto;
}
}
@media only screen and (max-width: 768px) {
.yVid {
width: 560px;
height: 315px;
margin: 0 auto;
}
}
HTML:
<div class="yVid">
<iframe width="100%" height="100%" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/_OBlgSz8sSM"></iframe>
</div>
В основном это добавляет точку останова на 768 пикселей, где видео изменяет размер. Вы также можете добавить контрольные точки на 992 и 1280 для еще большего количества репсонов. (номера основаны на стандартных размерах Bootstrap).
Ответ 7
Вы можете использовать два класса, которые будут масштабировать размер видео в зависимости от размера упаковочного div. Рассмотрим этот пример:
<div class="content-wrapper">
<div class="iframe-wrapper res-16by9">
<iframe src="https://www.youtube.com/embed/pHsYFURtzzY" frameborder="0" allowfullscreen></iframe>
</div>
</div>
Теперь посмотрите на CSS.
.content-wrapper{
max-width: 800px;
margin: 0 auto;
background-color: #fff;
}
.iframe-wrapper{
width: 100%;
position: relative;
}
.res-4by3{
padding-bottom: 75%;
}
.res-16by9{
padding-bottom: 56.25%;
}
.iframe-wrapper iframe{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
Обратите внимание, что вам нужно будет обернуть iframe в div, ширина которого равна 100%, а позиция - относительному. Вы также должны добавить нижний отступ в оболочку iframe. Этот отступ будет определять высоту видео. Я рекомендую создать два класса, которые будут представлять соотношение изображений.
Довольно просто вычислить правильную нижнюю подкладку для оберток, которые представляют определенное разрешение. Например, для разрешений 4 на 3 и 16 на 9 нижний отступ будет равен:
[4/3 res]
100/4 * 3 = 75%;
[16/9 res]
100/16 * 9 = 56,25%
Затем поместите iframe как абсолютный и поместите его в верхний левый угол разделительного блока. Также обязательно установите ширину и высоту iframe на 100%. Теперь вам нужно сделать еще одну вещь. Вы сделали.
Добавьте класс, который соответствует правильному разрешению для вас. Он будет масштабировать ширину и высоту изображения соответственно, сохраняя правильные пропорции на месте.
Пример выше работает для любого iframe. Это означает, что вы также можете использовать его для карт Google iframe.
Ответ 8
Вы можете использовать style="max-width: %87; max-height: %87;"
Ответ 9
В дополнение к Дарвину и Тодду следующее решение будет
- избегать нижнего поля
- максимальная ширина для больших экранов
- минимизировать высоту в мобильном представлении
- сохранить фиксированный размер для @media нет совместимых браузеров
HTML:
<div class="video_player">
<div class="auto-resizable-iframe">
<div>
<iframe frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/_OBlgSz8sSM"> </iframe>
</div>
</div>
</div>
CSS:
.videoplayer{
text-align: center;
vertical-align: middle;
background-color:#000000;
margin: 0;
padding: 0;
width: 100%;
height:420px;
overflow:hidden;
top: 0;
bottom: 0;
}
.auto-resizable-iframe {
width:100%;
max-width:100%;
margin: 0px auto;
}
.auto-resizable-iframe > div {
position: relative;
padding-bottom:420px;
height: 0px;
}
.auto-resizable-iframe iframe {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
}
//full screen
@media (min-width:0px) {
.videoplayer{
height:100%;
}
.auto-resizable-iframe > div {
padding-bottom:100%;
}
}
//mobile/pad view
@media (min-width:600px) {
.videoplayer{
height:420px;
}
.auto-resizable-iframe > div {
padding-bottom:420px;
}
}
Ответ 10
Это то, что сработало для меня. Это слегка измененный код из YouTube Embed Code Generator.
CSS:
.video-container {
position: relative;
width: 100%;
height: 0;
padding-bottom: 56.27198%;
}
.video-container iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
HTML:
<div class="video-container">
<iframe width="560px" height="315px" src="https://www.youtube.com/embed/XXXXxxxx?&theme=dark&autohide=2&iv_load_policy=3"><iframe>
</div>
Ответ 11
В списке ответов на использование js есть несколько предложений по изменению структуры сгенерированного iframe. Я думаю, что есть риск с этим, потому что, когда вы завершаете iframe внутри других элементов, возможно, что API YouTube потеряет "соединение" с iframe (особенно если вы передадите элемент в качестве node вместо использования определенного идентификатора, например меня). Скорее всего, чтобы обойти это, используйте javascript для изменения содержимого до того, как вы действительно запустите проигрыватель YouTube.
фрагмент из моего кода:
/**
* Given the player container, we will generate a new structure like this
*
* <div class="this-is-the-container">
* <div class="video-player">
* <div class="auto-resizable-iframe">
* <div>
* <iframe frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/_OBlgSz8sSM"> </iframe>
* </div>
* </div>
* </div>
* </div>
*
* @return {Node} the real player node deep inside
*/
YouTube.renderResizable = function (playerContainer) {
// clean up the content of player container
playerContainer.textContent = '';
var playerDiv = document.createElement('div');
playerDiv.setAttribute('class', 'video-player');
playerContainer.appendChild(playerDiv);
// add the auto-resizable-frame-div
var resizeableDiv = document.createElement('div');
resizeableDiv.setAttribute('class', 'auto-resizable-iframe');
playerDiv.appendChild(resizeableDiv);
// create the empty div
var div = document.createElement('div');
resizeableDiv.appendChild(div);
// create the real player
var player = document.createElement('div');
div.appendChild(player);
return player;
};
Ответ 12
Просто установите высоту и ширину iframe с помощью метрики CSS vw
. Он использует ширину устройства в качестве параметра:
.videoWrapper iframe {
height: 36.6vw;
width: 65vw;
}
Ответ 13
Добавить код JavaScript, чтобы дать каждому iTrame iTrame класс:
$('iframe[src*="youtube"]').addClass('youtube')
Затем в Media Queries используйте ваш класс трубки для установки другого размера.
.youtube {
/* Do stuff here */
}
Легче и оптимизировано для CMS, чем руководство.