我们有时看到一些网站有的照片,当我们将鼠标移入的时候,会有个放大的动画效果,今天我就来讲讲这个效果是如何实现的。
HTML的基本结构
我们需要一个 pic 来作为 3D 场景,里面有一个 img 标签作为图片的容器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>放大镜效果</title> <style>
</style> </head> <body> <div id="pic"> <img src="img/pic.jpg"> </div> </body> </html>
|
#pic 的基本 CSS
设定高、宽、居中效果、背景颜色(实际上图片会覆盖掉),同时超出部分hidden。
1 2 3 4 5 6 7
| #pic{ height:480px; width:480px; margin:0 auto; background-color: #ccc; overflow: hidden; }
|
设置 img 的初始样式
由于要保证放大后的清晰度,所以往往做这个效果的照片在鼠标未移入前会缩小显示,而hover后才恢复正常比例。
我使用的照片是 960px × 960px 的,初始时设置照片缩小到原来的 0.5 倍(这也是为什么上面的#pic我设置高和宽都为480px)。
图片默认是中心放大/缩小的,所以初始化时我们缩小到 0.5 倍时图片四周会有一定的“空隙”,我们可以使用 margin 的方法来解决这个问题。
1 2 3 4
| #pic img{ margin:-240px 0 0 -240px; -webkit-transform: scale(.5); }
|
为了有渐渐放大的动画效果,可以使用 transition 属性:
css-webkit-transition: 1s;
设置 img 的移入效果
通过 :hover 这个伪类来改变 transform 属性以实现放大效果。
1 2 3
| #pic img:hover{ -webkit-transform: scale(.6); }
|
所有代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>放大镜效果</title> <style> #pic{ height:480px; width:480px; margin:0 auto; background-color: #ccc; overflow: hidden; } #pic img{ margin:-240px 0 0 -240px; -webkit-transform: scale(.5); -webkit-transition: 1s;} #pic img:hover{ -webkit-transform: scale(.6); } </style> </head> <body> <div id="pic"> <img src="img/pic.jpg"> </div> </body> </html>
|
Ps : demo 以 Webkit 为例,其它浏览器内核请自行加上如 -moz- 等前缀。
查看演示