这是一个包含块问题。要修复它,您需要在元素内保留 transform 属性,因为 transform 更改包含绝对定位元素的块:
* {
font-family: Sans-serif;
}
section {
width:1200px;
margin:0 auto;
-webkit-animation: fadein 1s; /* Safari, Chrome and Opera > 12.1 */
-moz-animation: fadein 1s; /* Firefox < 16 */
-o-animation: fadein 1s; /* Opera < 12.1 */
animation: fadein 1s;
transform: translate(0);
}
@keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-moz-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-webkit-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-o-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
article * {
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
article p {
margin: 19px auto 19px auto;
}
article h1 {
position: absolute;
top: 150px;
max-width: 250px;
margin: 0 auto;
}
<section>
<article>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<h1>
Lorem Impsum
</h1>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
</article>
</section>
或添加position:relative到部分:
* {
font-family: Sans-serif;
}
section {
width:1200px;
margin:0 auto;
-webkit-animation: fadein 1s; /* Safari, Chrome and Opera > 12.1 */
-moz-animation: fadein 1s; /* Firefox < 16 */
-o-animation: fadein 1s; /* Opera < 12.1 */
animation: fadein 1s;
position:relative;
}
@keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-moz-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-webkit-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-o-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
article * {
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
article p {
margin: 19px auto 19px auto;
}
article h1 {
position: absolute;
top: 150px;
max-width: 250px;
margin: 0 auto;
}
<section>
<article>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<h1>
Lorem Impsum
</h1>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
</article>
</section>
或者添加forwards到动画中以保持最后一个状态并保持应用变换属性:
* {
font-family: Sans-serif;
}
section {
width:1200px;
margin:0 auto;
-webkit-animation: fadein 1s forwards; /* Safari, Chrome and Opera > 12.1 */
-moz-animation: fadein 1s forwards; /* Firefox < 16 */
-o-animation: fadein 1s forwards; /* Opera < 12.1 */
animation: fadein 1s forwards;
}
@keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-moz-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-webkit-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
@-o-keyframes fadein {
from { opacity: 0; transform: translate(100px);}
to { opacity: 1; transform: translate(0);}
}
article * {
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
article p {
margin: 19px auto 19px auto;
}
article h1 {
position: absolute;
top: 150px;
max-width: 250px;
margin: 0 auto;
}
<section>
<article>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<h1>
Lorem Impsum
</h1>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.</p>
</article>
</section>
为什么 ?
最初,您的元素相对于视口定位,因为没有位置与静态不同的父元素。将变换属性应用于其父级会更改包含块,因此您的元素相对于它定位,这会产生跳跃效果,因为有一些默认边距应用于主体(以及来自 的边距折叠p)
换句话说,当您删除/添加动画时,您正在更改位置的参考。
通过添加position:relative或保持,transform即使在动画完成后,您也可以保持引用始终相同。
从文档中:
绝对定位元素是其计算位置值是绝对或固定的元素。top、right、bottom 和 left 属性指定从元素包含
块的边缘的偏移量。参考
和
识别包含块的过程完全取决于元素位置属性的值:
...
如果位置属性是绝对的,则包含块由最近的祖先元素的填充框的边缘形成,该祖先元素的位置值不是静态的(固定的、绝对的、相对的或粘性的)。
- ..
如果位置属性是绝对的或固定的,则包含块也可以由最近的祖先元素的填充框的边缘形成,该元素具有以下内容:
除无以外的变换或透视值
...
...参考