二维变换过渡不适用于 IE11 中的 VW 和 VH 单元
2D Transform Transition dosen't work with VW and VH Units in IE11
当我尝试为带有过渡的变换 translateY() 制作动画时,我遇到了 IE11 和 10 的奇怪问题。我有一个天空盒,里面有一个高度为 500vh 的天空。这个天空必须根据视口中的当前部分上下移动。
视口是一个 absolute:position 元素,它处理内容等等。
当我现在将天空设置为 transform: translateY(-400vh) 时,它在除 IE11 和 10 之外的所有浏览器中都能正常工作。看起来元素在过渡开始时消失,在过渡结束时出现完成。
您可以在 fiddle 此处找到一个简短示例:https://jsfiddle.net/90q394vz/4/
body, html {
height:100%;
width:100%;
overflow:hidden;
}
* { box-sizing:border-box; }
header {
position:fixed;
top:0;
left:0;
width:100%;
background:#fff;
z-index:100;
}
.skybox {
//height: 100%;
z-index: 1;
//width: 100%;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
overflow: hidden;
}
.skybox .sky {
height: 500vh;
width: 100%;
background: red;
transform: translateY(-400vh);
transition: all 0.8s ease-in-out;
}
.sec1 .skybox .sky {
transform: translateY(-400vh);
}
.sec2 .skybox .sky {
transform: translateY(-300vh);
}
.sec3 .skybox .sky {
transform: translateY(-200vh);
}
.sec4 .skybox .sky {
transform: translateY(-100vh);
}
.viewport {
width:100%;
height: 100%;
position: relative;
z-index:10;
text-align:center;
padding: 50px;
}
.viewport-content {
background: rgba(255,255,255,0.2);
margin: 100px auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header>
<span onclick="$('body').removeClass().addClass('sec1')">scroll 1</span>
<span onclick="$('body').removeClass().addClass('sec2')">scroll 2</span>
<span onclick="$('body').removeClass().addClass('sec3')">scroll 3</span>
<span onclick="$('body').removeClass().addClass('sec4')">scroll 4</span>
</header>
<div class="skybox">
<div class="sky">
<div style="height:100vh; padding:100px;">sky part 5</div>
<div style="height:100vh; padding:100px;">sky part 4</div>
<div style="height:100vh; padding:100px;">sky part 3</div>
<div style="height:100vh; padding:100px;">sky part 2</div>
<div style="height:100vh; padding:100px;">sky part 1</div>
</div>
</div>
<div class="viewport">
<div class="viewport-content">
im content in top of the sky yeahhh...ö
</div>
</div>
知道如何解决这个问题吗?
更新 1: 经过另一次测试,我认为 IE 无法使用带有 vh 和 vw 单位的转换!下面是一个 10vh 的简单 translateX 的小例子。它朝着相反的方向大声笑。我完全不知道那里发生了什么 -.-
https://jsfiddle.net/8hne5ckd/3/
更新 2 几个小时后我发现,当我从简单的 2d 变换 (translateY(-100vh) ) 到 translate3d(0, -100vh, 0)。我不知道为什么 IE 可以使用 3d 变换处理 vh 和 vw 单位,但不能处理 2d 变换。
如果有更多知识的人能解释我为什么会很好。
https://jsfiddle.net/8hne5ckd/7/
更新 3 好的,它仍然不起作用。无论是过渡还是动画。我一使用大众汽车,它看起来就很垃圾。
谢谢
尝试使用 % 而不是 vh 进行 translate3D 转换(不是 translateY)。这在我的场景中解决了它。希望对你有用!
我在 IE 中遇到了类似的问题,将初始值设置为 0.1vh 而不是 0 帮助了我。
以字符串形式提供值,例如 "20vh"
而不是 20vh
。这对我有用。
当我尝试为带有过渡的变换 translateY() 制作动画时,我遇到了 IE11 和 10 的奇怪问题。我有一个天空盒,里面有一个高度为 500vh 的天空。这个天空必须根据视口中的当前部分上下移动。 视口是一个 absolute:position 元素,它处理内容等等。
当我现在将天空设置为 transform: translateY(-400vh) 时,它在除 IE11 和 10 之外的所有浏览器中都能正常工作。看起来元素在过渡开始时消失,在过渡结束时出现完成。
您可以在 fiddle 此处找到一个简短示例:https://jsfiddle.net/90q394vz/4/
body, html {
height:100%;
width:100%;
overflow:hidden;
}
* { box-sizing:border-box; }
header {
position:fixed;
top:0;
left:0;
width:100%;
background:#fff;
z-index:100;
}
.skybox {
//height: 100%;
z-index: 1;
//width: 100%;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
overflow: hidden;
}
.skybox .sky {
height: 500vh;
width: 100%;
background: red;
transform: translateY(-400vh);
transition: all 0.8s ease-in-out;
}
.sec1 .skybox .sky {
transform: translateY(-400vh);
}
.sec2 .skybox .sky {
transform: translateY(-300vh);
}
.sec3 .skybox .sky {
transform: translateY(-200vh);
}
.sec4 .skybox .sky {
transform: translateY(-100vh);
}
.viewport {
width:100%;
height: 100%;
position: relative;
z-index:10;
text-align:center;
padding: 50px;
}
.viewport-content {
background: rgba(255,255,255,0.2);
margin: 100px auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header>
<span onclick="$('body').removeClass().addClass('sec1')">scroll 1</span>
<span onclick="$('body').removeClass().addClass('sec2')">scroll 2</span>
<span onclick="$('body').removeClass().addClass('sec3')">scroll 3</span>
<span onclick="$('body').removeClass().addClass('sec4')">scroll 4</span>
</header>
<div class="skybox">
<div class="sky">
<div style="height:100vh; padding:100px;">sky part 5</div>
<div style="height:100vh; padding:100px;">sky part 4</div>
<div style="height:100vh; padding:100px;">sky part 3</div>
<div style="height:100vh; padding:100px;">sky part 2</div>
<div style="height:100vh; padding:100px;">sky part 1</div>
</div>
</div>
<div class="viewport">
<div class="viewport-content">
im content in top of the sky yeahhh...ö
</div>
</div>
知道如何解决这个问题吗?
更新 1: 经过另一次测试,我认为 IE 无法使用带有 vh 和 vw 单位的转换!下面是一个 10vh 的简单 translateX 的小例子。它朝着相反的方向大声笑。我完全不知道那里发生了什么 -.-
https://jsfiddle.net/8hne5ckd/3/
更新 2 几个小时后我发现,当我从简单的 2d 变换 (translateY(-100vh) ) 到 translate3d(0, -100vh, 0)。我不知道为什么 IE 可以使用 3d 变换处理 vh 和 vw 单位,但不能处理 2d 变换。 如果有更多知识的人能解释我为什么会很好。
https://jsfiddle.net/8hne5ckd/7/
更新 3 好的,它仍然不起作用。无论是过渡还是动画。我一使用大众汽车,它看起来就很垃圾。
谢谢
尝试使用 % 而不是 vh 进行 translate3D 转换(不是 translateY)。这在我的场景中解决了它。希望对你有用!
我在 IE 中遇到了类似的问题,将初始值设置为 0.1vh 而不是 0 帮助了我。
以字符串形式提供值,例如 "20vh"
而不是 20vh
。这对我有用。