IT评测·应用市场-qidao123.com技术社区

标题: 前端练习<Html&CSS>——照片墙(附完整代码及实现结果) [打印本页]

作者: 李优秀    时间: 2024-8-18 22:42
标题: 前端练习<Html&CSS>——照片墙(附完整代码及实现结果)
这个小练习也泉源于b站up小K师兄,大家可以通过下面的链接学习哦~up讲的非常详细。
纯CSS写一个简单酷炫的照片墙结果~
先看一下这个照片墙的结果:
1.鼠标没有放到图片上时,照片同比例,每张照片都有倒影的结果。

2.然后是鼠标放置图片上的结果,图片被放大,其他照片旋转缩放,这里必要注意,左右双方的照片是对称倾斜的。


HTML结构


CSS样式


实现原理

这段代码通过CSS的transform属性和transition属性实现了3D翻转结果。当鼠标悬停在容器上时,除了悬停的图片容器之外的其他图片容器会向两侧移动,并添加阴影结果和3D旋转。当鼠标悬停在某个图片容器上时,该图片容器会放大并旋转。
完整的代码:

  1. <!DOCTYPE html>
  2. <html>
  3.         <head>
  4.                 <meta charset="utf-8">
  5.                 <title></title>
  6.                 <style type="text/css">
  7.                         /* 设置所有元素的边距和内边距为0,并设置box-sizing为border-box,使元素的宽度和高度包括边框和内边距 */
  8.                         * {
  9.                                 margin: 0;
  10.                                 padding: 0;
  11.                                 box-sizing: border-box
  12.                         }
  13.                         /* 设置body的居中显示,最小高度为100vh,背景颜色为#1a252c */
  14.                         body {
  15.                                 display: flex;
  16.                                 justify-content: center;
  17.                                 align-items: center;
  18.                                 min-height: 100vh;
  19.                                 background-color: #1a252c;
  20.                         }
  21.                         /* 设置容器的相对定位,居中显示,设置transform-origin为preserve-3d */
  22.                         .container {
  23.                                 position: relative;
  24.                                 display: flex;
  25.                                 justify-content: center;
  26.                                 align-items: center;
  27.                                 transform-origin: preserve-3d;
  28.                         }
  29.                         /* 设置box的宽度、高度、相对定位、过渡效果、设置-webkit-box-reflect为下方1px的线性渐变 */
  30.                         .container .box {
  31.                                 width: 300px;
  32.                                 height: 300px;
  33.                                 position: relative;
  34.                                 transition: .5s;
  35.                                 -webkit-box-reflect: below 1px linear-gradient(transparent, #0002);
  36.                         }
  37.                         /* 设置box的绝对定位,宽度、高度为100% */
  38.                         .container .box img {
  39.                                 position: absolute;
  40.                                 top: 0;
  41.                                 left: 0;
  42.                                 width: 100%;
  43.                                 height: 100%;
  44.                         }
  45.                         /* 设置鼠标悬停时,非悬停元素的边距为-20px,设置filter为drop-shadow(0 0 25px #000) drop-shadow(0 0 25px #000),设置transform为perspective(500px) rotateY(45deg) scale(0.95) */
  46.                         .container:hover> :not(:hover) {
  47.                                 margin: 0 -20px;
  48.                                 filter: drop-shadow(0 0 25px #000) drop-shadow(0 0 25px #000);
  49.                                 transform: perspective(500px) rotateY(45deg) scale(0.95);
  50.                         }
  51.                         /* 设置鼠标悬停时,box的兄弟元素的transform为perspective(500px) rotateY(-45deg) scale(0.95) */
  52.                         .container .box:hover~.box {
  53.                                 transform: perspective(500px) rotateY(-45deg) scale(0.95);
  54.                         }
  55.                         /* 设置鼠标悬停时,box的transform为perspective(500px) rotateY(0) scale(1.2) */
  56.                         .container .box:hover {
  57.                                 transform: perspective(500px) rotateY(0) scale(1.2);
  58.                         }
  59.                 </style>
  60.         </head>
  61.         <body>
  62.                 <!-- 设置容器的class为container -->
  63.                 <div class="container">
  64.                         <!-- 设置box的class为box,并设置img的src为1.webp -->
  65.                         <div class="box">
  66.                                 <img src="./1.webp" alt="" />
  67.                         </div>
  68.                         <!-- 设置box的class为box,并设置img的src为2.webp -->
  69.                         <div class="box">
  70.                                 <img src="./2.webp" alt="" />
  71.                         </div>
  72.                         <!-- 设置box的class为box,并设置img的src为3.webp -->
  73.                         <div class="box">
  74.                                 <div class="box">
  75.                                         <img src="./3.webp" alt="" />
  76.                                 </div>
  77.                         </div>
  78.                         <!-- 设置box的class为box,并设置img的src为4.webp -->
  79.                         <div class="box">
  80.                                 <img src="./4.webp" alt="" />
  81.                         </div>
  82.                         <!-- 设置box的class为box,并设置img的src为5.webp -->
  83.                         <div class="box">
  84.                                 <img src="./5.webp" alt="" />
  85.                         </div>
  86.                         <!-- 设置box的class为box,并设置img的src为6.webp -->
  87.                         <div class="box">
  88.                                 <img src="./6.webp" alt="" />
  89.                         </div>
  90.                 </div>
  91.         </body>
  92. </html>v>
  93.                         <!-- 设置box的class为box,并设置img的src为4.webp -->
  94.                         <div class="box">
  95.                                 <img src="./4.webp" alt="" />
  96.                         </div>
  97.                         <!-- 设置box的class为box,并设置img的src为5.webp -->
  98.                         <div class="box">
  99.                                 <img src="./5.webp" alt="" />
  100.                         </div>
  101.                         <!-- 设置box的class为box,并设置img的src为6.webp -->
  102.                         <div class="box">
  103.                                 <img src="./6.webp" alt="" />
  104.                         </div>
  105.                 </div>
  106.         </body>
  107. </html>
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4