纯CSS实现图片百叶窗展示效果示例

yizhihongxing

下面我将详细讲解“纯CSS实现图片百叶窗展示效果”的完整攻略。

什么是百叶窗效果

百叶窗,顾名思义就是由许多个竖向的条条组成的一种窗形式。在网站设计中,可以将百叶窗效果用于图片展示,使页面更具有视觉冲击力。

CSS实现百叶窗效果步骤

  1. HTML结构搭建

为了方便CSS样式的实现,我们需要先搭建好HTML结构。这里我们以展示3张图片为例:

<div class="wrapper">
  <div class="blinds">
    <div class="blind"></div>
    <div class="blind"></div>
    <div class="blind"></div>
  </div>
  <img class="image" src="image1.jpg" />
  <img class="image" src="image2.jpg" />
  <img class="image" src="image3.jpg" />
</div>

在结构中,.wrapper是一个包裹所有内容的容器,.blinds是为百叶窗生成的容器,.blind是各个条状体的容器,.image是需要展示的图片。

  1. CSS样式实现

在HTML结构搭建好后,我们需要修改CSS样式。下面是一个完整的实现百叶窗效果的CSS样式:

.wrapper {
  position: relative;
  overflow: hidden;
  padding: 0;
  margin: 0;
}

.blinds {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: space-between;
  overflow: hidden;
  background-color: white;
  box-shadow: 0px 0px 5px rgba(0,0,0,0.5);
}

.blind {
  width: 33%;
  height: 100%;
  background-color: white;
  transform-origin: left;
  transform: skew(-45deg);
  box-shadow: 0px 0px 5px rgba(0,0,0,0.2);
}

.image {
  position: relative;
  width: 100%;
  height: auto;
  object-fit: cover;
  z-index: -1;
}

在上面的CSS样式中,.wrapper设置为相对定位并且设置了四个方向的边距和边框,在.blinds的样式中,设置了绝对定位以及所在位置的左上角,宽高为100%,同时使用了flex布局,因此.blind中的高度和.blinds一致。

.blind的样式中,设置了宽为33%,高为100%,并使用transform: skew(-45deg)方法将竖直的条条变为斜线条,transform-origin: left;是用来设置每个百叶窗平均分配高度。

在最后一个.image的样式中,使用了z-index: -1;,让图片在实现百叶窗效果的时候不被覆盖。

  1. JavaScript实现交互效果(可选)

在上述步骤完成后,我们可以得到一个静态的百叶窗效果展示,为了让效果更加生动,我们也可以使用JavaScript来实现交互效果。

例如,我们可以使用setInterval()方法,让百叶窗条条依次打开和关闭,实现动态的展示效果。下面是一个示例代码:

let blinds = document.querySelectorAll(".blind");

let speed = 200;
let delay = 4000;
let isOpen = false;

setInterval(() => {
  if (isOpen) {
    blinds.forEach((blind) => {
      blind.style.transform = "skew(-45deg)";
    });
    isOpen = false;
  } else {
    for (let i = 0; i < blinds.length; i++) {
      setTimeout(() => {
        blinds[i].style.transform = "skew(-45deg) translateY(-100%)";
      }, speed * i);
    }
    isOpen = true;
  }
}, delay);

在上述代码中,我们使用了setInterval()方法,每隔一段时间触发一次交互效果。

setInterval()方法的中,我们使用了一个开关变量isOpen来记录是否已经打开状态,并使用if else语句来切换百叶窗的状态。打开和关闭的方法都在.blind的样式中设置完成,所以这里直接修改了transform的值即可。

另外,我们还使用了setTimeout(() => {...}, speed * i),在每个盲板切换时都会调用该方法,因此它们会分别在不同的时间点打开。

示例1

这是一个通过纯CSS实现的简单的百叶窗图片展示效果:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
  <meta charset="UTF-8">
  <title>纯CSS实现百叶窗效果</title>
  <style>
    .wrapper {
      position: relative;
      overflow: hidden;
      padding: 0;
      margin: 0;
    }
    .blinds {
      height: 200px;
      display: flex;
      flex-direction: row;
      flex-wrap: nowrap;
    }
    .blind {
      width: 30px;
      background-color: white;
      box-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
      transform-origin: left;
      transform: skew(-45deg);
      margin-right: -15px;
    }
    .image {
      width: 200px;
      height: 200px;
      object-fit: cover;
    }
    .image:nth-child(2) {
      transform: translateX(30px);
    }
    .image:nth-child(3) {
      transform: translateX(60px);
    }
  </style>
</head>
<body>
  <div class="wrapper">
    <div class="blinds">
      <div class="blind"></div>
      <div class="blind"></div>
      <div class="blind"></div>
    </div>
    <img class="image" src="https://picsum.photos/id/100/200/200" alt="image1">
    <img class="image" src="https://picsum.photos/id/101/200/200" alt="image2">
    <img class="image" src="https://picsum.photos/id/102/200/200" alt="image3">
  </div>
</body>
</html>

示例2

这是一个更复杂的通过CSS实现的百叶窗效果,在例子中还包含了交互效果:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
  <meta charset="UTF-8">
  <title>纯CSS实现百叶窗动画效果</title>
  <style>
    .wrapper {
      position: relative;
      overflow: hidden;
      padding: 0;
      margin: 0;
    }
    .blinds {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      display: flex;
      flex-direction: row;
      flex-wrap: nowrap;
      justify-content: space-between;
      overflow: hidden;
      background-color: white;
      box-shadow: 0px 0px 5px rgba(0,0,0,0.5);
    }
    .blind {
      width: 33%;
      height: 100%;
      background-color: white;
      transform-origin: left;
      transform: skew(-45deg);
      box-shadow: 0px 0px 5px rgba(0,0,0,0.2);
    }
    .image {
      position: relative;
      width: 100%;
      height: auto;
      object-fit: cover;
      z-index: -1;
    }
  </style>
</head>
<body>
  <div class="wrapper">
    <div class="blinds">
      <div class="blind"></div>
      <div class="blind"></div>
      <div class="blind"></div>
    </div>
    <img class="image" src="https://picsum.photos/id/100/800/800" alt="">
    <img class="image" src="https://picsum.photos/id/101/800/800" alt="">
    <img class="image" src="https://picsum.photos/id/102/800/800" alt="">
  </div>

  <script>
    let blinds = document.querySelectorAll(".blind");

    let speed = 200;
    let delay = 4000;
    let isOpen = false;

    setInterval(() => {
      if (isOpen) {
        blinds.forEach((blind) => {
          blind.style.transform = "skew(-45deg)";
        });
        isOpen = false;
      } else {
        for (let i = 0; i < blinds.length; i++) {
          setTimeout(() => {
            blinds[i].style.transform = "skew(-45deg) translateY(-100%)";
          }, speed * i);
        }
        isOpen = true;
      }
    }, delay);
  </script>
</body>
</html>

如上图所示,当鼠标悬停在区域内时,会触发JavaScript事件,从而展示动态效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:纯CSS实现图片百叶窗展示效果示例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 巧用CSS属性值正则匹配选择器(小技巧)

    当我们在编写CSS时,选择器对于样式的作用非常重要。而有时候,由于一些特殊的需求,CSS选择器可能会非常复杂,这就需要我们掌握一些小技巧,以简化选择器的编写。其中,正则匹配选择器就是一种很好的选择。 正则匹配选择器即通过一些正则表达式匹配符号,来选择符合条件的元素。在CSS中,我们可以使用以下两种方式实现正则匹配选择器: 方式一:[attribute*=va…

    css 2023年6月9日
    00
  • 详解CSS伪元素的妙用单标签之美

    下面是“详解CSS伪元素的妙用单标签之美”完整攻略。 一、简介 CSS伪元素是CSS提供的一种简化HTML结构的方法,它可以让我们在不增加标签的情况下为元素添加装饰或内容。在伪元素出现之前,要实现这样的效果,通常需要增加额外的HTML标签,而伪元素的出现,使这个过程变得更加方便。本文将详细介绍CSS伪元素的用法,以及如何使用单标签实现一些复杂的效果。 二、C…

    css 2023年6月9日
    00
  • 浅谈CSS3 box-sizing 属性 有趣的盒模型

    CSS box-sizing属性用于确定设置元素大小的方式。在默认的CSS盒模型中,元素的宽度和高度仅包含内容部分,不包括边框(border)、内边距(padding)、外边距(margin)。而通过使用box-sizing,我们可以控制元素的大小的计算方式,使其包含某些或全部的边框、内边距和外边距。 1. box-sizing属性的取值 box-sizin…

    css 2023年6月10日
    00
  • css通过伪类来设置超链接样式附示例

    当我们使用CSS样式来设置超链接样式时,我们可以使用伪类来为不同状态下的超链接进行不同的样式设置。 一. 为普通状态下的链接设置样式我们可以使用a标签 + 冒号 + link伪类 来为普通状态下的链接设置样式。比如,我们要将链接的字体颜色设置为红色,代码如下: a:link { color: red; } 二. 为鼠标移到链接上时设置样式我们可以使用a标签 …

    css 2023年6月10日
    00
  • CSS 制作网页导航条(上)

    CSS 制作网页导航条(上) CSS制作网页导航条是前端开发中的基础技能之一,以下是制作网页导航条的基本步骤和示例说明: 基本步骤 创建HTML文件:在HTML文件中添加导航栏元素,例如: <!DOCTYPE html> <html> <head> <title>网页标题</title> <l…

    css 2023年5月18日
    00
  • springboot中的css样式显示不出了的几种情况

    Spring Boot中CSS样式无法显示的几种情况攻略 在Spring Boot项目中,CSS文件负责控制网页样式,让网页更加美观。然而,有时候我们会发现CSS样式无法显示,导致网页效果很奇怪,这是因为以下几种情况: 1. 路径问题 当CSS文件没有被正确地加载时,可能是因为路径设置不正确。在Spring Boot项目中,我们一般将CSS文件放在src/m…

    css 2023年6月9日
    00
  • jQuery 打造动态渐变按钮 详细图文教程

    jQuery打造动态渐变按钮详细图文教程 简介 本教程将带您详细了解如何使用jQuery和CSS打造一个动态渐变按钮。该按钮拥有鼠标悬停、点击等交互效果,并且可以自定义按钮的颜色和渐变方式。 准备工作 在开始之前,请确保您已经了解了以下知识: HTML / CSS 基础 JavaScript / jQuery 基础 了解如何使用CSS3渐变 HTML结构 首…

    css 2023年6月9日
    00
  • 让CSS代码更具有易维护性

    当我们的CSS样式文件变得越来越大时,维护代码就会变得越来越困难。因此,在编写CSS时,考虑代码的可维护性就显得非常重要。下面是让CSS代码更具有易维护性的完整攻略: 1. 方便选取、易于理解的类名 当编写CSS类名时,我们应该选择一些名称容易理解的词语,而不是只是简单的描述。比如,不要只是使用“yellow”或“big”这样的单词,要考虑使用更明确的类名,…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部