【发布时间】:2014-02-28 17:12:15
【问题描述】:
全部,
我希望能够使用 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%);
}
这不起作用 - 孩子只移动 20 像素(自身的 100%),而不是一直移动到父母身上。 (你可以在jsfiddle看到这个):
我可以这样做:
#child {
position: absolute;
width: 20px;
height: 100px;
background-color:red;
-webkit-transform: translateX(300px) translateX(-100%);
transform: translateX(300px) translateX(-100%);
}
这行得通(见here again on jsfiddle),因为它首先将孩子移动300px(父母的全宽),减去20px(孩子的宽度)。但是,这取决于具有固定的已知像素尺寸的父级。
但是,在我的响应式设计中 - 我不知道父级的宽度,它会改变。
我知道我可以使用left:0和right:0,但是left/right的动画性能比translateX差很多(Thanks Paul Irish!)。
有没有办法做到这一点?
提前致谢。
【问题讨论】:
-
我能想到的唯一方法是在孩子周围有一个包装器,宽度 = 100%,并为它而不是孩子设置动画
-
@vals 动画
width可能会遇到与动画left相同的性能缺陷,不是吗? -
@MurraySmith 正确,margin/width/left 不是 GPU 加速的,会影响性能。进行转换。
标签: html css css-transitions css-transforms