问题
Using the below, Chrome is not respecting the media queries to display the correct video source based on the device width. Chrome is just playing the first source it finds as you can see here: http://homeglobal.ch/. How can I fix this?
<video id="intro-video" poster="img/poster.png" controls>
<source src="videos/intro.mp4" type="video/mp4" media="all and (min-device-width:1600px)">
<source src="videos/intro.webm" type="video/webm" media="all and (min-device-width:1600px)">
<source src="videos/intro-1600.mp4" type="video/mp4" media="all and (min-device-width:1100px)">
<source src="videos/intro-1600.webm" type="video/webm" media="all and (min-device-width:1100px)">
<source src="videos/intro-1100.mp4" type="video/mp4" media="all and (min-device-width:481px)">
<source src="videos/intro-1100.webm" type="video/webm" media="all and (min-device-width:481px)">
<source src="videos/intro-480.mp4" type="video/mp4">
<source src="videos/intro-480.webm" type="video/webm">
</video>
回答1:
Unfortunally, Chrome is not supporting media queries for video html 5 tag. A work around for this is to use plain Javascript or Jquery. It is no pretty, but works even in chrome.
var video = $('#myvideo');
var WindowWidth = $(window).width();
if (WindowWidth < 1200) {
//It is a small screen
video.append("<source src='/img/homepage/640/splash.m4v' type='video/mp4' >");
} else {
//It is a big screen or desktop
video.append("<source src='/img/homepage/1080/uimain-1080.mp4' type='video/mp4' >");
}
回答2:
I used a solution with object-fit: cover;
.video-wrapper {
position: relative;
max-width: 100%;
height: auto;
overflow: hidden;
margin-bottom: 0;
padding-top: 100%;
}
@media (min-width: 768px) {
.video-wrapper {
padding-top: 50%;
}
}
.video-item {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
object-fit: cover;
}
Codepen here
来源:https://stackoverflow.com/questions/25907930/chrome-not-respecting-video-source-inline-media-queries