前端练习<Html&CSS>——照片墙(附完整代码及实现结果) ...

打印 上一主题 下一主题

主题 227|帖子 227|积分 681

这个小练习也泉源于b站up小K师兄,大家可以通过下面的链接学习哦~up讲的非常详细。
纯CSS写一个简单酷炫的照片墙结果~
先看一下这个照片墙的结果:
1.鼠标没有放到图片上时,照片同比例,每张照片都有倒影的结果。

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


HTML结构



  • <style>标签内包含了CSS样式,用于定义页面的样式。
  • <body>标签内包含了一个<div>元素,类名为container,这个容器包含了多个<div>元素,每个<div>元素类名为box,每个box元素内包含一个<img>元素,用于展示图片。
CSS样式



  • *选择器用于重置所有元素的默认样式,包括margin和padding,并设置box-sizing为border-box,这样元素的宽度和高度就包括了边框和内边距。
  • body选择器设置了display为flex,并使用justify-content和align-items属性将内容水平和垂直居中,同时设置了最小高度为100vh,背景颜色为#1a252c。
  • .container选择器设置了容器的样式,包括position、display、justify-content、align-items和transform-origin属性,用于实现3D翻转结果。
  • .container .box选择器设置了每个图片容器的样式,包括宽度、高度、位置、过渡结果和反射结果。
  • .container .box img选择器设置了图片的样式,包括绝对定位、宽度和高度。
  • .container:hover> :not(:hover)选择器用于在鼠标悬停在容器上时,除了悬停的图片容器之外的其他图片容器会向两侧移动,并添加阴影结果和3D旋转。
  • .container .box:hover~.box选择器用于在鼠标悬停在某个图片容器上时,其他图片容器会进行3D旋转。
  • .container .box:hover选择器用于在鼠标悬停在某个图片容器上时,该图片容器会放大并旋转。
实现原理

这段代码通过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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

高级会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表