44-闪烁效果
背景知识:基本的 css 动画,“逐帧动画”
介绍:以前有一个 blink
标签可以达到文字闪烁的效果,但是被滥用和诟病,现在主流浏览器都不在支持了,不过闪烁效果在某些场景下还是对可用性有益的。
/** * Blinking */ @keyframes blink-1 { 50% { color: transparent } } @keyframes blink-2 { to { color: transparent } } p { padding: 1em; background: gold; } .blink-smooth-1 { animation: 1s blink-1 3; } .blink-smooth-2 { animation: .5s blink-2 6; animation-direction: alternate; } .blink { animation: 1s blink-1 3 steps(1); }
45-打字动画
介绍:使用 css 模拟打字效果
<h1>CSS is awesome!</h1> /** * Typing animation */ @keyframes typing { from { width: 0 } } @keyframes caret { 50% { border-right-color: transparent; } } h1 { font: bold 200% Consolas, Monaco, monospace; /*width: 8.25em;*/ width: 15ch; white-space: nowrap; overflow: hidden; border-right: .05em solid; animation: typing 8s steps(15), caret 1s steps(1) infinite; }
46-状态平滑的动画
背景知识:基本的 css 动画, animation-direction
(在 “闪烁效果”中曾简要提及)
介绍:本案例实现了,当动画终止时,不会僵硬的回到初始状态而是停留在当前帧。
<div class="panoramic"></div> /** * Smooth state animations * Photo credits: https://www.flickr.com/photos/employtheskinnyboy/3904743709 */ @keyframes panoramic { to { background-position: 100% 0; } } .panoramic { width: 150px; height: 150px; background: url('http://c3.staticflickr.com/3/2671/3904743709_74bc76d5ac_b.jpg'); background-size: auto 100%; animation: panoramic 10s linear infinite alternate; animation-play-state: paused; } .panoramic:hover, .panoramic:focus { animation-play-state: running; }
47-沿环形路径平移的动画
背景知识: css 动画,css 变形, “平行四边形”, “菱形图片”, "闪烁效果"
介绍:一个实用的案例,元素沿环形路径移动的两种方案
需要两个元素的解决方案
<div class="path"> <div class="avatar"> <img src="http://lea.verou.me/book/adamcatlace.jpg" /> </div> </div> /** * Animation along a circular path - Solution 1 */ @keyframes spin { to { transform: rotate(1turn); } } .avatar { animation: spin 3s infinite linear; transform-origin: 50% 150px; } .avatar > img { animation: inherit; animation-direction: reverse; } /* Anything below this is just styling */ .avatar { width: 50px; margin: 0 auto; border-radius: 50%; overflow: hidden; } .avatar > img { display: block; width: inherit; } .path { width: 300px; height: 300px; padding: 20px; border-radius: 50%; background: #fb3; }
单个元素的解决方案
<div class="path"> <img src="http://lea.verou.me/book/adamcatlace.jpg" class="avatar" /> </div> /** * Animation along a circular path - Solution 2 */ @keyframes spin { from { transform: rotate(0turn) translateY(-150px) translateY(50%) rotate(1turn) } to { transform: rotate(1turn) translateY(-150px) translateY(50%) rotate(0turn); } } .avatar { animation: spin 3s infinite linear; } /* Anything below this is just styling */ .avatar { display: block; width: 50px; margin: calc(50% - 25px) auto 0; border-radius: 50%; overflow: hidden; } .path { width: 300px; height: 300px; padding: 20px; margin: 100px auto; border-radius: 50%; background: #fb3; }
总结
我在本篇文章中整理了《css揭秘中》47个有趣的css 技巧案例 20-47 部分,通过温习这本书,学习到了很多 css 技巧,这本书是 6 年前出版的,但是里面很多知识到现在都还是令人眼前一亮,非常值得阅读。