当前位置: 首页 > 知识库问答 >
问题:

如何使盒影动画弹出侧面?我错在哪?

凌和悦
2023-03-14

我有一个分区(.animate),它的box-shadow属性正在被动画化。我希望它从右侧弹出,就像我应用于第二除法的那个(.animate2)。请运行代码段查看动画。所需的动画由第二部门展示。

对于第二部分,我已经用:before元素制作了所需的动画,方法是动画它的宽度和左边距。但我想要一种消除psuedo元素的方法。我有这样的代码,我试图将Widthani的动画关键帧复制到BoxShadowani的关键帧中,但是这两个部门的动画并不相同。我错过了什么?我的逻辑在哪里使我不及格?(关键帧后的评论解释了我的逻辑。)

这是我的代码:

null

body {
  background: #222;
  color: #ddd;
  height: 100vh;
  width: 100vw;
  margin: 0;
  padding: 0;
  font-family: monospace;
  font-size: 3em;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.Animate {
  box-shadow: 600px 0px #ddd inset;
  color: #222;
  padding: 0 0.5em;
  animation: BoxShadowAni 5.0s infinite linear;
}

.Animate2 {
  color: #222;
  padding: 0 0.5em;
  position: relative;
}

.Animate2:before {
  content: '';
  position: absolute;
  z-index: -1;
  background: #ddd;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  animation: WidthAni 5.0s infinite ease-in-out;
}

@-webkit-keyframes BoxShadowAni {
  0% {box-shadow: 0px 0px #ddd inset;}/*Starts from left edge*/
  10% {box-shadow: 600px 0px #ddd inset;}/*To grow upto the left edge*/
  20% {box-shadow: -5px 0px #ddd inset;}/*To reduce in length upto the right edge*/
  25% {box-shadow: -5px 0px #ddd inset;}/*To stay for a while and then bounce back*/
  35% {box-shadow: -600px 0px #ddd inset;}/*Grow upto the right edge*/
  45% {box-shadow: 0px 0px #ddd inset;}/*To reduce in length upto the left edge*/
  100% {box-shadow: 0px 0px #ddd inset;}/*To insert a pause b4 animation loops back*/
}

@-webkit-keyframes WidthAni {
  0% {width: 0px}
  10% {width: 100%;left: 0;right: 0}
  20% {width: 5%;left: 95%;}
  25% {width: 5%;left: 95%;}
  35% {width: 100%;left: 0%;}
  45% {width: 0%;}
  100% {width: 0%;}
}
<div class='Animate'>BoxShadow</div>
<div class='Animate2'>Width Ani</div>

null

共有1个答案

卢阳泽
2023-03-14

我想问题是当你把影子换成另一个的时候。我建议你依靠多个方框阴影来实现这一点,你会有一个更好的渲染。诀窍是要确保你总是覆盖整个区域时,改变阴影。

因此,不需要从300px0px#DDD Inset切换到-300px0px#DDD Inset,在这里您可以执行以下操作:

300px0px#DDD插入,0px0px#DDD插入300px0px#DDD插入,-300px0px#DDD插入再到0px0px#DDD插入,-300px0px#DDD插入

null

body {
  background: #222;
  color: #ddd;
  height: 100vh;
  width: 100vw;
  margin: 0;
  padding: 0;
  font-family: monospace;
  font-size: 3em;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.Animate {
  color: #222;
  padding: 0 0.5em;
  animation: BoxShadowAni 5.0s infinite linear;
}

.Animate2 {
  color: #222;
  padding: 0 0.5em;
  position: relative;
}

.Animate2:before {
  content: '';
  position: absolute;
  z-index: -1;
  background: #ddd;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  animation: WidthAni 5.0s infinite ease-in-out;
}

@-webkit-keyframes BoxShadowAni {
  0% {
    box-shadow: 0px 0px #ddd inset, 0px 0px #ddd inset;
  }
  10% {
    box-shadow: 300px 0px #ddd inset,0px 0px #ddd inset;
  }
  10.1% {
    box-shadow: 300px 0px #ddd inset,-300px 0px #ddd inset;
  }
  10.2% {
    box-shadow: 0px 0px #ddd inset,-300px 0px #ddd inset;
  }
  20% {
    box-shadow: 0px 0px #ddd inset,-5px 0px #ddd inset;
  }
  25% {
    box-shadow: 0px 0px #ddd inset,-5px 0px #ddd inset;
  }
  35% {
    box-shadow: 0px 0px #ddd inset,-300px 0px #ddd inset;
  }
  35.1% {
    box-shadow: 300px 0px #ddd inset,-300px 0px #ddd inset;
  }
  35.2% {
    box-shadow: 300px 0px #ddd inset,0px 0px #ddd inset;
  }
  45%,100% {
    box-shadow: 0px 0px #ddd inset,0px 0px #ddd inset;
  }
}

@-webkit-keyframes WidthAni {
  0% {
    width: 0px
  }
  10% {
    width: 100%;
    left: 0;
    right: 0
  }
  20% {
    width: 5%;
    left: 95%;
  }
  25% {
    width: 5%;
    left: 95%;
  }
  35% {
    width: 100%;
    left: 0%;
  }
  45% {
    width: 0%;
  }
  100% {
    width: 0%;
  }
}
<div class='Animate'>BoxShadow</div>
<div class='Animate2'>Width Ani</div>
 类似资料:
  • 问题内容: 以任何方式在左侧和右侧(水平?)上获得盒子阴影,而没有骇客或图像。我在用: 但它给周围的阴影。 我周围没有边界。 问题答案: 注意: 我建议在下面查看@Hamish的答案;它不涉及此处所述解决方案中不完善的“掩盖”。 您可以使用多个框阴影来接近;每一侧一个 编辑 在顶部和底部的顶部再添加2个阴影,以掩盖流血的阴影。

  • 自定义 AlertView 以及弹出动画,具有 iOS7 的扁平化风格。 [Code4App.com]

  • 问题内容: 我有一个带标签的导航栏,我希望在打开的标签上有一个阴影,以使其与其他标签区分开。我还希望整个选项卡部分上有一个阴影(请参阅底部的水平线),以阴影除打开的所有选项卡的底部。 我将使用CSS3的属性来执行此操作,但是我无法找出仅对所需部分进行着色的方法。 通常,我会用内容区域(较高)遮盖打开的选项卡的底部阴影,但是在这种情况下,内容区域本身会带有阴影,以便最终覆盖该选项卡。 标签布局 阴影

  • 问题内容: 用jQuery 动画 box-shadow 属性的正确语法是哪一种? 问题答案: 直接回答 使用埃德温·马丁的 jQuery插件影子动画,它扩展了方法,你可以简单地使用正常的语法与“boxShadow”的每一个方面- 颜色 ,在 x轴和y偏移 时, 模糊半径_和 _传播半径 -变得活跃起来。它包括多个阴影支持。 改用CSS动画 jQuery通过更改DOM元素的属性进行动画处理,这可能会

  • 问题内容: 任何方法都可以在左右两侧(水平?)获得箱形阴影,而没有任何骇客或图像。我在用: 但它给周围的阴影。 我周围没有边界。 问题答案: 注意: 我建议您在下面查看@Hamish的答案;它不涉及此处描述的解决方案中不完善的“掩盖”。 您可以使用多个框阴影来接近;每一面一个 编辑 在顶部和底部的顶部再添加2个阴影,以遮盖流血的阴影。

  • 默认情况下,一个盒子是没有阴影的,可以使用 box-shadow属性为盒子添加一个或多个阴影。语法格式为: box-shadow: [inset]  x-offset  y-offset  blur-radius  spread-distance  color 每个阴影由可选的 inset 关键字、2-4 个长度值、可选的颜色值来规定。如果省略可选的长度值,则使用默认值 0。各参数的含义见表表 4