您已经知道内联样式是“不好的做法”。 内联样式不像单独文件中的 CSS 那样可重用,因此会造成效率低下的膨胀。 当然,除非并非如此。 在某些情况下,内联样式非常合理。 也许您有一个应用程序,用户可以在其中选择他们喜欢的颜色,然后您将身体的背景设置为该颜色。 在这种情况下,使用内联样式实际上比外部 CSS 更有效,因为它特定于一个用户和一个元素。
现在,假设您要动画到内联样式中设置的值。 假设您要动画一个进度条。 您从零开始,需要上升到任意值。 也许对服务器的调用告诉您上传的完成程度,并且您根据该程度设置值。
在我将近一年前发表的一篇文章中,我抱怨说您不能动画到内联样式。 您不能在内联样式中声明关键帧,并且您不知道要动画到的外部 CSS 中的最终值。 唉,我错了,因为我不知道这个货真价实的 CSS 小技巧。
<div class="progress-bar">
<div style="width: 75%">Upload is 75% complete.</div>
</div>
诀窍是:只需从 @keyframes 中省略 to
或 100%
声明
@-webkit-keyframes progress-bar {
0% { width: 0; }
}
@-moz-keyframes progress-bar {
0% { width: 0; }
}
keyframes progress-bar {
0% { width: 0; }
}
然后,您在进度条上调用动画
.progress-bar > div {
-webkit-animation: progress-bar 2s;
-moz-animation: progress-bar 2s;
animation: progress-bar 2s;
}
就这样,进度条将动画到内联样式设置的值。
查看 Pen 动画到内联样式 by Chris Coyier (@chriscoyier) on CodePen.
特别感谢 Michael Paryna,他给我发邮件告诉我这件事,让我尝试了一下。
很酷。
我将在某个地方找到它的用途。
你知道吗,我还以为我知道关于 CSS 动画的一切! Chris,您发现这一点真棒!
我正在玩您的 Dabblet 链接,当您将内联样式设置为 width: 100% 时,动画会突破包含的 div。 我尝试将其设置为 width: auto,但这不会触发动画。 我还尝试设置 body padding:0px,但仍然会突破... 有什么想法吗?
如果您将进度元素的宽度设置为 100%,则必须更改进度元素的填充,而不是主体上的填充。 问题是,“width: 100%” 并没有真正做到我们想要的效果。 我在 这里 谈到了这个问题。
但是,在这种情况下,在删除填充后,文本看起来很奇怪,因此我通过添加一个可以安全地添加填充的段落元素来解决这个问题(因为段落没有设置宽度)
http://dabblet.com/gist/1687523
在键入此评论时,我意识到您可以使用
box-sizing
更快地解决此问题,因此一行可以解决这里的问题,而无需段落元素http://dabblet.com/gist/1687552
这是由于盒子模型(填充是罪魁祸首)。 您可以使用
box-sizing: border-box;
轻松修复它(这将在 IE7 及更高版本中起作用,但您需要使用 webkit 和 moz 前缀)。这也提供了一种方法,可以在页面的初始加载时对某物进行动画,而无需任何其他状态更改,例如点击或悬停。 我记得最近研究过这个问题,一般共识是您不能这样做。 但您可能已经知道答案了...
那不应该是一个进度元素吗? 尽管如此,这是一个很棒的技巧。
我会说是的,但对 <meter> 和 <progress> 进行样式设置和动画仍然太难了。 何时能为它获得合适的阴影 DOM? ;)
请看这里
http://blog.oldworld.fr/index.php?post/2011/07/The-HTML5-progress-element-in-Firefox
http://www.useragentman.com/blog/2012/01/03/cross-browser-html5-progress-bars-in-depth/
也许可以与 jquery 和“on.load”一起使用,例如
只有在我们知道页面加载时间的情况下...
来自 developphp.com 的 Adam Khoury 最近做了一些关于这方面的工作,他将 JavaScript 和 HTML5 结合在一起创建了一个动画上传器。 这是他的视频课的链接 http://www.developphp.com/view.php?tid=1228
糟糕,那是 developphp.com
对不起,链接错了! :P
这很好,但一直都是这样做的。 这里很酷的地方在于它是纯 CSS。
太棒了,解释得很好... 感谢分享!
太棒了。
我喜欢您将一年前犯下的错误变成另一篇很棒的博文 :)
除了 CSS Tricks 之外,我还从您那里学到了更多东西。
嗨,Chris,我也在 几天前发布了一些类似的东西 ^_^
哦!
看起来真棒! 已收藏。
虽然... 我在 Chrome 中发现了一个小故障。 条纹覆盖层“在”圆形条的“上方”。 所以遮罩坏了,我想。
是的,我不知道为什么。 我添加了
overflow:hidden
,但仍然不起作用 T_T我必须使用
relative
定位而不是absolute
吗?编辑: 我只在伪元素上应用了绝对定位,而其中的元素没有被修改。 这就是让我困惑为什么
overflow:hidden
不起作用的原因。这并不有趣.. 请学习如何使用 PHP 和 JS 制作上传进度... 或者类似的东西...
很棒的分享,我以后要尝试一下。 CSS 动画太棒了。
很酷,我喜欢它,谢谢
我对它进行了一些样式设置,并获得了这个
Dabblet
对
.progress-bar
使用overflow: hidden;
http://dabblet.com/gist/1697531这部分可能对添加到内部 div 有用
非常酷。 谢谢你的帮助!
嗨 Chris,几个月前我也发布了一些类似的东西...
进度条 CSS3
过程略有不同。
这些都不错。 不过,这正是我所说的那种情况。 在您的情况下,您必须知道外部 CSS 中要动画到哪个百分比。 相反,将该值设置为内联样式有点酷。
非常感谢您提供这个教程! 我确实学到了一些很棒的新技巧。
我喜欢您的教程和简洁的布局。
哇... 真的很棒... 但是 IE 浏览器呢? 可以吗?
微软将开始在 IE10 Windows 8 上支持 CSS3 动画。
对于不支持 CSS3 动画的旧浏览器,您可以使用 JavaScript 反馈。 不提供 CSS3 动画支持
真的很棒,我喜欢它。我非常喜欢你的教程和简洁的布局。
我喜欢你在 CSS 演示中到处使用 dabblet 的方式。非常棒的应用!
是否可以将动画效果设置在动画进行到 50% 时应用到内联样式?