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

下面我将详细讲解“纯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 布局中,实现垂直居中是一个常见的需求。本文将提供一些关于如何实现垂直居中的方法,包括使用 flexbox 和 transform 属性的示例说明。 使用 Flexbox Flexbox 是一种 CSS 布局模式,可以帮助开发者轻松地实现垂直居中。具体步骤如下: 将父元素的 display 属性设置为 flex。 将父元素的 justify-con…

    css 2023年5月18日
    00
  • 在CSS中使用when/else的方法

    在CSS中,没有像编程语言中的”if/else”和”switch/case”这样的流程控制结构。但是我们可以通过一些技巧和CSS的一些基本属性来实现类似于“when/else”的效果。 一、使用:root和变量 要实现“when/else”的效果可以使用:root伪类和CSS变量。:root会匹配文档根元素,并且我们可以在这里定义一些全局的CSS变量。不同的…

    css 2023年6月10日
    00
  • vue修改打包配置如何实现代码打包后的自定义命名

    要实现vue修改打包配置自定义命名,需要修改webpack的配置文件,具体步骤如下: 打开vue项目根目录下的vue.config.js文件(如果没有则需要创建),该文件用于覆盖webpack默认配置。在该文件中添加如下代码: module.exports = { configureWebpack: { output: { filename: ‘自定义文件名…

    css 2023年6月9日
    00
  • 详解微信小程序canvas圆角矩形的绘制的方法

    详解微信小程序canvas圆角矩形的绘制的方法 前言 canvas是HTML5新增的一个组件,它可以让我们直接在浏览器中绘制出图形、文字和图片等元素。在微信小程序中,我们也可以使用canvas来进行绘制,从而实现一些炫酷的效果。 本篇攻略将详细讲解如何在微信小程序中使用canvas绘制圆角矩形。 步骤 步骤一:创建canvas 我们需要在wxml模板文件中创…

    css 2023年6月10日
    00
  • vue+vue-router转场动画的实例代码

    下面就为你介绍一下如何使用Vue和Vue Router实现转场动画的实例代码。 1. 引入Vue和Vue Router 首先在你的项目中引入Vue和Vue Router。 <!– 引入Vue –> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"&g…

    css 2023年6月11日
    00
  • 从console.log说起(console.log详细介绍)

    从console.log说起,它是JavaScript中最基础的调试工具之一,常用于输出变量或调试信息。下面就来详细介绍一下。 什么是console.log console.log是JavaScript中一个用来输出信息的函数,其使用方式为console.log(输出内容),输出内容可以是字符串、数字、布尔值、数组、对象等等。控制台可以输出该函数所传递的参数…

    css 2023年6月10日
    00
  • jQuery实现参数自定义的文字跑马灯效果

    以下是关于“jQuery实现参数自定义的文字跑马灯效果”的攻略: 1. 简介 跑马灯效果是一种常见的UI交互效果,它可以使用户更加关注某一特定内容。在Web页面中,可以通过jQuery库实现文字跑马灯效果。 2. 实现步骤 2.1. HTML结构 首先,在HTML中需要定义一个容器,用来包裹跑马灯的文字内容,示例如下: <div class=&quot…

    css 2023年6月10日
    00
  • 推荐WEB开发者最佳HTML5和CSS3代码生成器

    当今,HTML5和CSS3已经成为Web开发者必备的技能,但有时为了开发一个简单的网站,我们也需要创建很多基本的HTML和CSS代码。为了提高开发效率,许多优秀的代码生成器应运而生,这里介绍一些推荐的HTML5和CSS3代码生成器。 1. HTML5代码生成器 1.1 HTML5 Drag and Drop Generator 这个生成器可以帮助您轻松地为任…

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