HTML – remove the poster attribute and add a class telling it to fade in:
<video class="fade-in-video" autoplay loop muted>
CSS – add the poster as a background image instead, and styles for the opacity classes:
.video-bg { ... background: url(path/to/poster.jpg) center center no-repeat; background-size: cover; /* Should be run through an auto-prefixer */ } .fade-in-video { opacity: 0; transition: opacity .8s linear; } .fade-in-video.is-playing { opacity: 1; }
JavaScript – add the .is-playing class when the video starts:
var fade_in_videos = document.querySelectorAll('.fade-in-video'); for( i=0; i<fade_in_videos.length; i++ ) { fade_in_videos[i].addEventListener("playing", function(){ this.className += ' is-playing'; }); }
This JavaScript allows for multiple background videos on your page, and should be placed after all your video tags, or if you’re using jQuery, inside $(document).ready()
.