整理自阮一峰的网络日志
1
2
3
4
5
6
a
心跳
c
d
e
f
g
h
A
B
.
1 /* IE 10和Firefox(>= 16)支持没有前缀的animation,而chrome不支持,所以必须使用webkit前缀。 */ 2 3 .hov div{ 4 display: inline-block; 5 color: #f33; 6 text-align: center; 7 font-size: 1.5em; 8 width: 100px; 9 height: 100px; 10 background-color: #ccc; 11 } 12 13 14 /* ========== transition ============ */ 15 .hov div:hover { 16 width: 200px; 17 height: 200px; 18 color: #3f3; 19 } 20 21 .anim2 { 22 transition: 1s; 23 /* 加上以后样式为渐变式, 而不是立刻有效 */ 24 } 25 26 .anim3 { 27 transition: 1s width; 28 /* 只对宽度应用动画, 高度则立即变化. 所以transition: 1s height, 1s width; 等价与 transition: 1s */ 29 } 30 31 .anim4 { 32 transition: 1s width, 1s 1s height; 33 /* 在宽度动画完成以后延迟1s再执行高度动画 */ 34 } 35 36 .anim5 { 37 transition: 1s cubic-bezier(.83,.97,.05,1.44); 38 39 /* 40 ease:默认, 逐渐放慢; linear:匀速; ease-in:加速; ease-out:减速; cubic-bezier函数:自定义速度模式 41 42 ease: cubic-bezier(0.25, 0.1, 0.25, 1.0) 43 linear: cubic-bezier(0.0, 0.0, 1.0, 1.0) 44 ease-in: cubic-bezier(0.42, 0, 1.0, 1.0) 45 ease-out: cubic-bezier(0, 0, 0.58, 1.0) 46 ease-in-out: cubic-bezier(0.42, 0, 0.58, 1.0) 47 48 http://www.w3.org/TR/css3-transitions/#transition-timing-function_tag 49 */ 50 } 51 52 .anim6 { 53 transition-property: height; 54 transition-duration: 1s; 55 transition-delay: 1s; 56 transition-timing-function: ease; 57 58 /* 等价于 transition: 1s 1s height ease; */ 59 } 60 61 62 63 /* ======= animation =============*/ 64 65 .auto div{ 66 display: inline-block; 67 color: #f33; 68 text-align: center; 69 font-size: 1.5em; 70 width: 100px; 71 height: 100px; 72 background-color: #ccc; 73 } 74 75 /* 可以插入更多状态, 10%,15%... */ 76 @keyframes gogogo { 77 0%{transform:scale(0.8,0.8);} 78 50%{transform:scale(1.2,1.2);} 79 100%{transform:scale(0.8,0.8);} 80 } 81 82 @-moz-keyframes gogogo { 83 0%{-moz-transform:scale(0.8,0.8);} 84 50%{-moz-transform:scale(1.2,1.2);} 85 100%{-moz-transform:scale(0.8,0.8);} 86 } 87 88 @-o-keyframes gogogo { 89 0%{-o-transform:scale(0.8,0.8);} 90 50%{-o-transform:scale(1.2,1.2);} 91 100%{-o-transform:scale(0.8,0.8);} 92 } 93 94 @-webkit-keyframes gogogo { 95 0%{-webkit-transform:scale(0.8,0.8);} 96 50%{-webkit-transform:scale(1.2,1.2);} 97 100%{-webkit-transform:scale(0.8,0.8);} 98 } 99 100 .anm1:hover { 101 -webkit-animation:gogogo 1s infinite linear; 102 -moz-animation:gogogo 1s infinite linear; 103 -ms-animation:gogogo 1s infinite linear; 104 -o-animation:gogogo 1s infinite linear; 105 animation:gogogo 1s infinite linear; 106 107 /* infinite: 无限次播放, 也可以指定具体播放次数, 如: 3 */ 108 } 109 110 111 @-webkit-keyframes pound{ 112 from { -webkit-transform: none; } 113 to { -webkit-transform: scale(0.7); } 114 } 115 116 .anm2, .anm4{ 117 border-radius:50%; 118 color:white !important; 119 background-color: #f33 !important; 120 121 -webkit-animation:pound 0.6s infinite; 122 } 123 124 125 @-webkit-keyframes radius { 126 from{} 127 to{ border-radius: 50%;} 128 } 129 .anm3 { 130 -webkit-animation:radius 1s forwards; 131 132 133 /* 动画结束以后,默认会立即从结束状态跳回到起始状态 134 forwards: 使得效果停留在结束状态上 135 none:默认值,回到动画没开始时的状态 136 backwards:让动画回到第一帧的状态 137 both: 根据animation-direction轮流应用forwards和backwards规则 138 */ 139 } 140 141 142 .anm4{ 143 -webkit-animation:pound 1s infinite alternate; 144 145 146 /* 默认动画循环播放时,每次都是从结束状态跳回到起始状态,再开始播放。 147 animation-direction属性,可以改变这种行为。 148 149 normal: 1-2-3(1)-2-3(1)-2-3 150 alternate: 1-2-3-2-1-2-3 151 reverse: 3-1-1(3)-2-1(3)-2-1 152 alternate-reverse: 3-2-1-2-3-2-1 153 154 最常用的值是normal和reverse, 浏览器对其他值的支持情况不佳 155 */ 156 } 157 158 159 @-webkit-keyframes rainbow { 160 0%{background: #ccc} 161 100%{background: orange} 162 163 /*keyframes写法很自由, 164 0% 可以用 from 代替 165 100% 可以用 to 代替 166 167 from或to可以不写, 浏览器会自动推算 168 169 甚至可以把多个状态写在一行 170 from,to { transform: none; } 171 50% { transform: scale(1.2); } 172 */ 173 } 174 .anm5{ 175 -webkit-animation-name: rainbow; 176 -webkit-animation-duration: 1s; 177 -webkit-animation-timing-function: linear; 178 -webkit-animation-delay: 3s; 179 -webkit-animation-fill-mode:forwards; 180 -webkit-animation-direction: normal; 181 -webkit-animation-iteration-count: 3; 182 183 /* 等价于 -webkit-animation: 1s 3s rainbow linear 3 forwards normal; */ 184 } 185 186 187 .anm6{ 188 -webkit-animation: 1s 3s rainbow 3 steps(4) forwards; 189 190 /* 浏览器从一个状态向另一个状态过渡,是平滑过渡。steps函数可以实现分步过渡 */ 191 } 192 193 194 @-webkit-keyframes bg { 195 50% {background: orange} 196 } 197 .anm7{ 198 -webkit-animation:pound 1s infinite alternate, bg 0.5s infinite alternate; 199 200 /* 多个动画叠加执行 */ 201 } 202 203 204 .anm8{ 205 -webkit-animation:gogogo 1s infinite alternate; 206 -webkit-animation-play-state: paused; 207 } 208 .anm8:hover{ 209 -webkit-animation-play-state: running; 210 211 /* 动画播放过程中动画可能会突然停止, 这时默认行为是跳回到动画的开始状态, 如a元素, 212 如果想让动画保持突然终止时的状态,就要使用animation-play-state属性。如h元素 213 */ 214 } 215 216 217 218 /*========== transform ========== */ 219 .trans div { 220 display: inline-block; 221 width: 100px; 222 height: 30px; 223 background: #ccc; 224 color: red; 225 text-align: center; 226 } 227 228 .trs1 { 229 -webkit-transform: rotate(-30deg) skew(45deg) scale(0.8) translate(50px,-30px); 230 } 231 232 233 .trs2{ 234 -webkit-transition:all 1s ease-in-out; 235 } 236 .trs2:hover { 237 -webkit-transform:rotate(360deg) skew(-20deg) scale(3.0) translate(100px,0); 238 } 239 240 241 @-webkit-keyframes spin{ 242 to{-webkit-transform:rotate(360deg)} 243 } 244 .trs3 { 245 height: 100px !important; 246 font-size:3em; 247 line-height: 3%; 248 border-radius: 50%; 249 250 -webkit-animation:spin 2s infinite linear; 251 } 252 253 254 255 /*============== loading demo ================*/ 256 .loading { 257 padding-left: 50px; 258 } 259 .loading div { 260 width: 30px; 261 height: 30px; 262 background: #ccc; 263 display: inline-block; 264 border-radius: 50%; 265 } 266 267 @-webkit-keyframes loading { 268 0%, 80%, 100% { -webkit-transform: scale(0.0) } 269 40% { -webkit-transform: scale(1.0) } 270 } 271 272 .ld1 { 273 -webkit-animation:loading 1.4s -0.32s infinite linear alternate; 274 } 275 .ld2 { 276 -webkit-animation:loading 1.4s -0.16s infinite alternate; 277 } 278 .ld3 { 279 -webkit-animation:loading 1.4s infinite alternate; 280 }