为什么 translateX 对于 IE9、IE10 和 IE11 上的固定元素不能按预期工作?
Why doesn't translateX work as expected for fixed elements on IE9, IE10, and IE11?
我正在尝试在 IE9、IE10 和 IE11 中实现以下功能(在 Chrome 和 FF 上完美运行):
在移动模式下,我有一个包含整个网站内容的主要 #container
包装器和一个位于 #container
内部的导航侧边菜单 div(无法移出,顺便说一句),但不可见并且隐藏在屏幕外。当用户单击菜单打开切换按钮时,它应该向右滑动 #container
,显示直接位于其左侧的导航侧边菜单 div。 "sliding" 正在使用 translateX 发生,一旦通过切换将 "open" class 应用到它,它就会被分配。在 IE 中,我得到了预期的动画部分,但没有可见的侧导航(仅限空 space)。
#container {
height: 100%;
position: relative;
transition: transform ease .5s;
width: 100%;
}
#container.open {
position: fixed;
transform: translateX(300px);
}
#nav-side-menu {
left: -300px;
height: 100%;
overflow: scroll;
position: fixed;
top: 0;
width: 300px;
}
这里的问题在于 position: fixed
inside 转换元素的使用。根据规范,当使用 fixed-positioned 元素时 ...包含块由视口建立。 There is a debate 关于转换后的元素是否应该是包含块固定后代,但 Internet Explorer 目前不支持此功能。
在此特定实例中,您可以通过完全避免 CSS 转换来避免 cross-browser 并发症。相反,请尝试使用 left
属性 横向移动包含元素。下面是我的标记——我相信这是对你的合理反映:
<article>
<nav>
<p>This is the navigation portion.</p>
</nav>
<section>
<p>This is the content portion.</p>
</section>
</article>
如上所述,以下方法主要使用相对定位的容器,通过转换(自 IE10 起支持)left
属性 移动 side-to-side。我们还使用 calc
函数(从 IE9 开始支持)来确定更好的尺寸和偏移量:
body {
margin: 0;
overflow-x: hidden;
}
article {
left: -300px;
position: relative;
transition: left 2s;
box-sizing: border-box;
width: calc(100% + 300px);
padding: 0 1em 0 calc(300px + 1em);
}
article.open {
left: 0px;
}
nav {
position: fixed;
width: 300px; height: 100%;
margin: -1em auto auto calc(-300px - 1em);
}
这种方法在 Internet Explorer、Chrome 和 Firefox 中产生了更一致的体验。 end-result 可以在这里在线查看:http://jsfiddle.net/jonathansampson/vxntq8b1/
我正在尝试在 IE9、IE10 和 IE11 中实现以下功能(在 Chrome 和 FF 上完美运行):
在移动模式下,我有一个包含整个网站内容的主要 #container
包装器和一个位于 #container
内部的导航侧边菜单 div(无法移出,顺便说一句),但不可见并且隐藏在屏幕外。当用户单击菜单打开切换按钮时,它应该向右滑动 #container
,显示直接位于其左侧的导航侧边菜单 div。 "sliding" 正在使用 translateX 发生,一旦通过切换将 "open" class 应用到它,它就会被分配。在 IE 中,我得到了预期的动画部分,但没有可见的侧导航(仅限空 space)。
#container {
height: 100%;
position: relative;
transition: transform ease .5s;
width: 100%;
}
#container.open {
position: fixed;
transform: translateX(300px);
}
#nav-side-menu {
left: -300px;
height: 100%;
overflow: scroll;
position: fixed;
top: 0;
width: 300px;
}
这里的问题在于 position: fixed
inside 转换元素的使用。根据规范,当使用 fixed-positioned 元素时 ...包含块由视口建立。 There is a debate 关于转换后的元素是否应该是包含块固定后代,但 Internet Explorer 目前不支持此功能。
在此特定实例中,您可以通过完全避免 CSS 转换来避免 cross-browser 并发症。相反,请尝试使用 left
属性 横向移动包含元素。下面是我的标记——我相信这是对你的合理反映:
<article>
<nav>
<p>This is the navigation portion.</p>
</nav>
<section>
<p>This is the content portion.</p>
</section>
</article>
如上所述,以下方法主要使用相对定位的容器,通过转换(自 IE10 起支持)left
属性 移动 side-to-side。我们还使用 calc
函数(从 IE9 开始支持)来确定更好的尺寸和偏移量:
body {
margin: 0;
overflow-x: hidden;
}
article {
left: -300px;
position: relative;
transition: left 2s;
box-sizing: border-box;
width: calc(100% + 300px);
padding: 0 1em 0 calc(300px + 1em);
}
article.open {
left: 0px;
}
nav {
position: fixed;
width: 300px; height: 100%;
margin: -1em auto auto calc(-300px - 1em);
}
这种方法在 Internet Explorer、Chrome 和 Firefox 中产生了更一致的体验。 end-result 可以在这里在线查看:http://jsfiddle.net/jonathansampson/vxntq8b1/