Video tag on Safari 10 goes up after few seconds

2019-09-12 00:46发布

after few seconds on reproducing the video, the video goes up 50% and shows the controls and just bottom half of the video.

this issue happens only on Safari 10, tried on Safari 9 (and other browsers) and it works fine, i've reproduced the issue on https://jsfiddle.net/antonino_R/d9tf0va3/4/

<div class="wrapper">
  <div class="wrapper-inner">
    <div class="wrapper-video">
      <video autoplay controls loop muted >
      <source src="http://techslides.com/demos/sample-videos/small.mp4" type='video/mp4;codecs="avc1.42E01E, mp4a.40.2"'/>
      </video>
    </div>
    <div class="site-centered clearfix">
          <header class="entry-header">
            <h1 class="entry-title">this is a title</h1>
            <h2 class="entry-subtitle">this is some text</h2>
          </header>
    </div>
  </div>
</div>

and this is the css (i'm trying to have title and subtitle in the middle of the screen)

.wrapper {
    overflow: hidden;
    color: #FFF;
    border-top: 6px solid #9BA800;
    background-color: #404040;
    background: linear-gradient(145deg, #404040 0%, #111 100%);
    position: relative;
    z-index: 0;
}

.wrapper-video {
    position: absolute;
    z-index: 1;
    top: 50%;
    left: 0;
    right: 0;
    bottom: 0;
}

.wrapper-video video {
    width: 100%;
    -webkit-filter: opacity(0.6) contrast(1.5);
    filter: opacity(0.6) contrast(1.5);
    transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
}

.site-centered {
    max-width: 78em;
    margin: 0 auto;
    padding: 0 1.5em;
}

.wrapper .entry-header {
    margin: 7.5em 0 3.5em 0;
    font-weight: 300;
    line-height: 1.5;
    overflow: auto;
    z-index: 10;
    position: relative;
    overflow: visible;
    margin-bottom: 4.5em;
}

seems like safari has changed the way it treats the video tags

1条回答
甜甜的少女心
2楼-- · 2019-09-12 01:23

I've found the issue: basically having the video positioned in the middle was hiding the controls, and the "controls" attribute on the html tag was forcing the video to have the controls, safari forces the controls to be shown that's why after few seconds the video gets pushed to the top, just to show the controls

just removing the "controls" attribute fixes the issue:

(here the jsFiddle: https://jsfiddle.net/antonino_R/d9tf0va3/14/ )

<div class="wrapper">
  <div class="wrapper-inner">
    <div class="wrapper-video">
      <video autoplay loop muted >
      <source src="http://techslides.com/demos/sample-videos/small.mp4" type='video/mp4;codecs="avc1.42E01E, mp4a.40.2"'/>
      </video>
    </div>
    <div class="site-centered clearfix">
          <header class="entry-header">
            <h1 class="entry-title">this is a title</h1>
            <h2 class="entry-subtitle">this is some text</h2>
          </header>
    </div>
  </div>
</div>

and the css is cleaner:

.wrapper {
    overflow: hidden;
    color: #FFF;
    border-top: 6px solid #9BA800;
    background-color: #404040;
    background: linear-gradient(145deg, #404040 0%, #111 100%);
    position: relative;
    z-index: 0;
}

.wrapper-video {
    position: absolute;
    z-index: 1;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

.wrapper-video video {
    width: 100%;
    -webkit-filter: opacity(0.6) contrast(1.5);
    filter: opacity(0.6) contrast(1.5);
    transform: translateY(-10%);
    -webkit-transform: translateY(-10%);
}

.site-centered {
    max-width: 78em;
    margin: 0 auto;
    padding: 0 1.5em;
}

.wrapper .entry-header {
    margin: 7.5em 0 3.5em 0;
    font-weight: 300;
    line-height: 1.5;
    overflow: auto;
    z-index: 10;
    position: relative;
    overflow: visible;
    margin-bottom: 4.5em;
}
查看更多
登录 后发表回答