经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » CSS » 查看文章
纯CSS实现hover图片pop-out弹出效果的实例代码_CSS教程_CSS
来源:jb51  时间:2021/4/19 8:39:38  对本文有异议

实现原理

主要图形的组成元素由背景和前景图两个元素,以下示例代码中,背景元素使用伪元素 figure::before 表示, 前景元素使用 figure img 表示,当鼠标 hover 悬浮至 figure 元素时,背景元素产生变大效果,前景元素产生变大并向上移动效果,从而从视觉上实现弹出效果。

背景元素 figure::before

前景元素 figure img

1. 使用 overflow: hidden 方式

主体元素的 html 结构由一个 figure 元素包裹的 img 元素构成:

  1. <figure>
  2. <img src='./man.png' alt='Irma'>
  3. </figure>

css 中设置了两个变量 --hov--not-hov 用于控制 hover 元素时的放大以及位移效果。并对 figure 元素添加 overflow: hidden,设置 padding-top: 5% 用于前景元素超出背景元素时不被截断(非必需:并使用了 clamp() 函数用来动态设定 border-radius 以动态响应页面缩放)

  1. figure {
  2. --hov: 0;
  3. --not-hov: calc(1 - var(--hov));
  4. display: grid;
  5. place-self: center;
  6. margin: 0;
  7. padding-top: 5%;
  8. transform: scale(calc(1 - .1*var(--not-hov)));
  9. overflow: hidden;
  10. border-radius: 0 0 clamp(4em, 20vw, 15em) clamp(4em, 20vw, 15em);
  11. }
  12. figure::before, figure img {
  13. grid-area: 1/1;
  14. place-self: end center;
  15. }
  16. figure::before {
  17. content: "";
  18. padding: clamp(4em, 20vw, 15em);
  19. border-radius: 50%;
  20. background: url('./bg.png') 50%/cover;
  21. }
  22. figure:hover {
  23. --hov: 1;
  24. }
  25. img {
  26. width: calc(2*clamp(4em, 20vw, 15em));
  27. border-radius: clamp(4em, 20vw, 15em);
  28. transform: translateY(calc((1 - var(--hov))*10%)) scale(calc(1.25 + .05*var(--hov)));
  29. }

2. 使用 clip-path: inset() 方式

  1. <figure>
  2. <img src='./man.png' alt='Irma'>
  3. </figure>

样式基本上与第一种相同,使用 clip-path 来截取圆形背景区域。

  1. figure {
  2. --hov: 0;
  3. --not-hov: calc(1 - var(--hov));
  4. display: grid;
  5. place-self: center;
  6. margin: 0;
  7. padding-top: 5%;
  8. transform: scale(calc(1 - .1*var(--not-hov)));
  9. clip-path: inset(0 round 0 0 clamp(4em, 20vw, 15em) clamp(4em, 20vw, 15em));
  10. }
  11. figure::before, figure img {
  12. grid-area: 1/1;
  13. place-self: end center;
  14. }
  15. figure::before {
  16. content: "";
  17. padding: clamp(4em, 20vw, 15em);
  18. border-radius: 50%;
  19. background: url('./bg.png') 50%/cover;
  20. }
  21. figure:hover {
  22. --hov: 1;
  23. }
  24. figure:hover::before {
  25. box-shadow: 1px 1px 10px rgba(0, 0, 0, .3);
  26. }
  27. img {
  28. width: calc(2*clamp(4em, 20vw, 15em));
  29. border-radius: clamp(4em, 20vw, 15em);
  30. transform: translateY(calc((1 - var(--hov))*10%)) scale(calc(1.25 + .05*var(--hov)));
  31. }

完整示例

  1. <h2>使用overflow: hidden方式</h2>
  2. <figure>
  3. <img src='./man.png' alt='Irma'>
  4. </figure>
  5. <h2>使用clip-path: path()方式</h2>
  6. <figure>
  7. <img src='./man.png' alt='Irma'>
  8. </figure>
  1. body {
  2. display: grid;
  3. background: #FDFC47;
  4. background: -webkit-linear-gradient(to right, #24FE41, #FDFC47);
  5. background: linear-gradient(to right, #24FE41, #FDFC47);
  6. }
  7. figure {
  8. --hov: 0;
  9. --not-hov: calc(1 - var(--hov));
  10. display: grid;
  11. place-self: center;
  12. margin: 0;
  13. padding-top: 5%;
  14. transform: scale(calc(1 - .1*var(--not-hov)));
  15. }
  16. figure:nth-of-type(1) {
  17. overflow: hidden;
  18. border-radius: 0 0 clamp(4em, 20vw, 15em) clamp(4em, 20vw, 15em);
  19. }
  20. figure:nth-of-type(2) {
  21. clip-path: inset(0 round 0 0 clamp(4em, 20vw, 15em) clamp(4em, 20vw, 15em));
  22. }
  23. figure, figure img {
  24. transition: transform 0.2s ease-in-out;
  25. }
  26. figure::before, figure img {
  27. grid-area: 1/1;
  28. place-self: end center;
  29. }
  30. figure::before {
  31. padding: clamp(4em, 20vw, 15em);
  32. border-radius: 50%;
  33. background: url('./bg.png') 50%/cover;
  34. content: "";
  35. transition: .25s linear;
  36. }
  37. figure:hover {
  38. --hov: 1;
  39. }
  40. figure:hover::before {
  41. box-shadow: 1px 1px 10px rgba(0, 0, 0, .3);
  42. }
  43. img {
  44. width: calc(2*clamp(4em, 20vw, 15em));
  45. border-radius: clamp(4em, 20vw, 15em);
  46. transform: translateY(calc((1 - var(--hov))*10%)) scale(calc(1.25 + .05*var(--hov)));
  47. }

到此这篇关于纯CSS实现hover图片pop-out弹出效果的文章就介绍到这了,更多相关css内容请搜索w3xue以前的文章或继续浏览下面的相关文章,希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号