全部,
我希望能够使用 translateX
为子元素设置 100% 的动画(即从左边缘到右边缘)。
挑战在于 translateX
中的百分比指的是元素本身,而不是父元素。
因此,例如,如果我的 html 如下所示:
<div id="parent">
<div id="child">
</div>
我的 CSS 是这样的(省略了供应商前缀):
#parent {
position: relative;
width: 300px;
height: 100px;
background-color: black;
}
#child {
position: absolute;
width: 20px;
height: 100px;
background-color:red;
transform: translateX(100%);
}
这是行不通的——孩子只移动 20px(100% 自身),而不是一直穿过父级。 (你可以在 jsfiddle 上看到这个):
我可以做这个:
#child {
position: absolute;
width: 20px;
height: 100px;
background-color:red;
-webkit-transform: translateX(300px) translateX(-100%);
transform: translateX(300px) translateX(-100%);
}
这行得通( 在 jsfiddle 上再次看到这里),因为它首先将子项移动 300px(父项的全宽),减去 20px(子项的宽度)。但是,这取决于具有固定的已知像素尺寸的父级。
然而,在我的响应式设计中——我不知道父级的宽度,它会改变。
我知道我可以使用 left:0
和 right:0
,但是左/右的动画性能比 translateX 差得多( 感谢 Paul Irish! )。
有没有办法做到这一点?
提前致谢。
原文由 mattstuehler 发布,翻译遵循 CC BY-SA 4.0 许可协议
我最初没有发布我的想法,因为它涉及创建一个额外的 HTML 层,并期待更好的解决方案。
由于这还没有发生,我解释一下我的评论。我的意思是:
由于包装器是父级的 100% 宽度,因此将其转换为 100% 会按预期工作。
小提琴
请注意,正如您所说,包装器正在 100% 翻译。但是,似乎您真正想要的是将元素移动 100% - 宽度。为实现这一点,您必须将孩子也 100% 平移到相反方向(现在这适用于孩子的宽度)。
更正:孩子应该共享包装器的过渡属性: