css - css动画如何改变z-index?
问题描述
为什么动画改变了z-index?
如果您查看 jsfiddle,您会看到红色图像在顶部,但如果您注释掉动画,蓝色图像在顶部。即使有动画,如何让蓝色图像始终位于顶部?
HTML
<img class="blue" src="http://via.placeholder.com/200/0037ff">
<img class="red" src="http://via.placeholder.com/200/ff0010">
CSS
.red {
-webkit-animation-name: red;
-webkit-animation-duration: 2s;
-webkit-animation-iteration-count: infinite;
animation-name: red;
animation-duration: 2s;
animation-iteration-count: infinite;
}
.blue {
transform: translate(30%);
}
@keyframes red {
from {
transform: translate(50%);
}
to {
transform: translate(0);
}
}
任何帮助深表感谢!
解决方案
HTML 中的元素根据其堆叠上下文定位在 z 轴上。
默认情况下,一个页面有 1 个堆叠上下文——HTML 元素——并且堆叠上下文的所有子项都根据它们的 DOM 顺序进行定位。
但是,当应用某些 CSS 属性时,可以在元素上创建新的堆叠上下文。诸如position: absolute
或之类的属性position: relative
通常用于创建新的堆叠上下文,这就是您可以使用 将它们定位在 z 轴上的原因z-index
。创建新的堆叠上下文时,默认情况下它位于父堆叠上下文的上方。
transform
是另一个 CSS 属性,它将创建一个新的堆叠上下文(因为您可以在 z 轴上转换元素)。由于.blue
元素有 atransform
但当.red
您注释掉动画时元素没有,它会获得一个新的堆叠上下文,默认位于父堆叠上下文(包括.red
元素)之上。
因此,要使.blue
框始终保持在顶部,您需要添加position: relative
和z-index: 1
。
.blue {
position: relative;
z-index: 1;
transform: translate(30%);
}
推荐阅读
- android - 如何设置“返回按钮”,关闭 android 中除主要活动之外的活动?
- r - 如何总结从分类列中获取随机值?
- reactjs - 内在元素类型
- css - Ruby 中遗留应用程序中 CSS 的层次结构级别
- c++ - 避免溢出提升容器
- c# - 避免随机选择同一点来模仿“类人”行为
- asp.net-core - ASP.NET Core Web API - 列表/数组的路由约束
- java - 如何使用 Map 类型的元素集合更新实体
? - javascript - JavaScript Drag-n-Drop 在边缘浏览器上显示一个附加图标
- javascript - 无法在 React Redux 减速器中从购物车中删除商品