加载css3过渡动画?

Jen*_*ell 172 css webkit css3 css-transitions css-animations

是否可以在不使用Javascript的情况下在页面加载时使用CSS3过渡动画?

这是我想要的,但在页面加载:

http://rilwis.googlecode.com/svn/trunk/demo/image-slider.html

到目前为止我发现了什么

Chr*_*les 408

可以在页面加载时运行CSS动画而无需使用任何JavaScript; 你只需要使用CSS3关键帧.

我们来看一个例子......

以下是仅使用CSS3滑动到位的导航菜单的演示:

@keyframes slideInFromLeft {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(0);
  }
}

header {  
  /* This section calls the slideInFromLeft animation we defined above */
  animation: 1s ease-out 0s 1 slideInFromLeft;
  
  background: #333;
  padding: 30px;
}

/* Added for aesthetics */ body {margin: 0;font-family: "Segoe UI", Arial, Helvetica, Sans Serif;} a {text-decoration: none; display: inline-block; margin-right: 10px; color:#fff;}
Run Code Online (Sandbox Code Playgroud)
<header>
  <a href="#">Home</a>
  <a href="#">About</a>
  <a href="#">Products</a>
  <a href="#">Contact</a>
</header>
Run Code Online (Sandbox Code Playgroud)

分解......

这里的重要部分是关键帧动画,我们称之为slideInFromLeft......

@keyframes slideInFromLeft {
    0% {
        transform: translateX(-100%);
    }
    100% {
        transform: translateX(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

...基本上说"在开始时,标题将从屏幕的左边缘以其全宽度离开,并且最后将到位".

第二部分是调用slideInFromLeft动画:

animation: 1s ease-out 0s 1 slideInFromLeft;
Run Code Online (Sandbox Code Playgroud)

以上是速记版本,但为了清晰起见,这里是详细版本:

animation-duration: 1s; /* the duration of the animation */
animation-timing-function: ease-out; /* how the animation will behave */
animation-delay: 0s; /* how long to delay the animation from starting */
animation-iteration-count: 1; /* how many times the animation will play */
animation-name: slideInFromLeft; /* the name of the animation we defined above */
Run Code Online (Sandbox Code Playgroud)

你可以做各种有趣的事情,比如滑动内容,或引起对区域的注意.

这就是W3C所说的.

  • 什么使这个页面加载运行,而不是更早? (20认同)
  • 只是为了回答上面的问题,默认情况下,动画在应用后开始显示为0,没有延迟.还有一个额外的属性,动画延迟,可以设置来控制它.请参阅:http://www.w3.org/TR/css3-animations/#animation-delay-property (2认同)
  • 为确保动画在文档加载后开始,请将动画代码放置在body元素下方的样式表或body元素底部的样式标签中。 (2认同)
  • 很好的答案,对我的2019年很有帮助! (2认同)
  • 它不是“onload”,但您可以通过向关键帧添加一个步骤并增加动画时间来延迟开始:@keyframeslideInFromLeft {0%{transform:translateX(-100%); } 50% { 变换:translateX(-100%); } 100% { 变换:translateX(0); } } header { /* 这部分调用了我们上面定义的slideInFromLeft动画 */animation: 10s escape-out 0s 1 slipInFromLeft; 背景:#333;内边距:30px;} (2认同)

Rol*_*olf 25

很少有Javascript是必要的:

window.onload = function() {
    document.body.className += " loaded";
}
Run Code Online (Sandbox Code Playgroud)

现在的CSS:

.fadein {
    opacity: 0;
    -moz-transition: opacity 1.5s;
    -webkit-transition: opacity 1.5s;
    -o-transition: opacity 1.5s;
    transition: opacity 1.5s;
}

body.loaded .fadein {
    opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)

我知道问题是"没有Javascript",但我认为值得指出的是,有一个简单的解决方案涉及一行Javascript.

它甚至可以是内联Javascript,类似的东西:

<body onload="document.body.className += ' loaded';" class="fadein">
Run Code Online (Sandbox Code Playgroud)

这就是所有需要的JavaScript.

  • 要避免覆盖现有的`body`类,请使用:`document.body.classList.add('loaded)` (5认同)
  • 一点修复:<body onload ="document.body.setAttribute('class','loaded')"> (2认同)

小智 20

我觉得我已经找到了OP问题的一种解决方法 - 而不是从页面的'on.load'开始的过渡 - 我发现使用动画来实现不透明效果的效果相同,(我一直在寻找与OP相同的事情.

所以我希望在页面加载时将正文文本从白色(与网站背景相同)淡入到黑色文本颜色 - 而且我从星期一开始只编码所以我正在寻找'on.load'样式的事物代码,但是还不知道JS - 所以这里的代码对我来说效果很好.

#main p {
  animation: fadein 2s;
}
@keyframes fadein {
  from { opacity: 0}
  to   { opacity: 1}
}
Run Code Online (Sandbox Code Playgroud)

而无论出于何种原因,这并不对工作.class#id的(至少不是我的)

希望这会有所帮助 - 我知道这个网站对我有很大的帮助!


Cla*_*diu 9

CSS仅延迟3s

这里需要注意几点:

  • 一次调用多个动画
  • 我们创建一个等待动画,它只是延迟实际的动画(在我们的例子中是第二个动画)。

代码:

header {
    animation: 3s ease-out 0s 1 wait, 0.21s ease-out 3s 1 slideInFromBottom;
}

@keyframes wait {
    from { transform: translateY(20px); }
    to { transform: translateY(20px); }
}

@keyframes slideInFromBottom {
  from { transform: translateY(20px); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}
Run Code Online (Sandbox Code Playgroud)


fox*_*oxy 5

嗯,这是一个棘手的问题.

答案是"不是真的".

CSS不是功能层.它没有任何意识到发生了什么或何时发生.它仅用于向不同的"标志"(类,ID,状态)添加表示层.

默认情况下,CSS/DOM不提供任何类型的"on load"状态供CSS使用.如果你想/能够使用JavaScript,你可以分配一个类body来激活一些CSS.

话虽这么说,你可以为此创建一个hack.我会在这里给出一个例子,但它可能适用于你的情况,也可能不适用.

我们的假设是"接近"是"足够好":

<html>
<head>
<!-- Reference your CSS here... -->
</head>
<body>
    <!-- A whole bunch of HTML here... -->
    <div class="onLoad">OMG, I've loaded !</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是我们的CSS样式表的摘录:

.onLoad
{
    -webkit-animation:bounceIn 2s;
}
Run Code Online (Sandbox Code Playgroud)

我们还假设现代浏览器逐步渲染,因此我们的最后一个元素将最后呈现,因此最后将激活此CSS.