纯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日

相关文章

  • SpringBoot无法访问/static下静态资源的解决

    当使用SpringBoot开发web应用时,我们可以把静态资源文件放在项目中的“/static”或“/public”或“/resources”或“/META-INF/resources”目录下,在应用运行时就可以通过相应的URL来访问静态资源。然而,有时候我们会遇到这样的问题:通过URL访问静态资源时,却发现无法获取到资源,出现404错误,这通常是因为Spr…

    css 2023年6月10日
    00
  • html css 控制div或者table等固定在指定位置的实现方法

    要让div或者table等固定在指定位置,需要使用CSS的position属性。 position属性 CSS的position属性控制元素在文档中的定位方式,并允许你使用top、right、bottom和left属性进行微调。 值: 值 描述 static 默认值。元素通常在文档中按照其自然位置进行排列 relative 相对定位。元素相对于其正常位置进行…

    css 2023年6月9日
    00
  • Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)

    Vue过渡效果之CSS过渡详解 Vue.js是一种流行的JavaScript框架,它具有许多强大的功能,其中一个是过渡效果。Vue的过渡效果可以帮助我们实现平滑的动画效果,使得用户体验更加流畅。本文将详细讲解Vue过渡效果之CSS过渡,包括transition过渡、animation过渡和animate.css库。 transition过渡 在Vue中,tr…

    css 2023年6月9日
    00
  • 微信小程序scroll-view的滚动条设置实现

    下面是详细的讲解: 1. scroll-view的基本使用 scroll-view是微信小程序提供的一个可以滚动的视图容器组件,在小程序开发中比较常用,通常用来实现长列表、无限滚动等功能。下面是scroll-view的使用方法: <scroll-view scroll-y="true" style="height: 300…

    css 2023年6月9日
    00
  • Vue中实现过渡动画效果实例详解

    下面是“Vue中实现过渡动画效果实例详解”的攻略。 1. 什么是Vue过渡动画 Vue的过渡动画,指的是在Vue组件的进入、离开、出现、消失等状态的转换过程中,添加如淡入淡出、滑动等动画效果,从而增强用户体验。Vue提供了<transition>组件和<transition-group>组件来实现过渡动画。 2. 如何实现Vue过渡动…

    css 2023年6月10日
    00
  • JavaScript实现下拉列表

    请看下面的文章,我将为您讲解如何使用JavaScript实现下拉列表的完整攻略。 1. 什么是下拉列表 下拉列表也被称为“下拉菜单”,它通常是在网页中展示多个选项的最佳方式之一。下拉列表最常见的用途是在网页中显示选项供用户选择,一旦用户选择其中一个选项,选择就会被自动填充到输入框或文本框中。 2. 实现下拉列表的步骤 2.1. 创建HTML结构 创建下拉列表…

    css 2023年6月10日
    00
  • css3实现一个div设置多张背景图片及background-image属性实例演示

    下面是“css3实现一个div设置多张背景图片及background-image属性实例演示”的攻略: 背景 在CSS中背景可以使用background或background-image属性来设置,如果想设置多张背景图片,可以利用CSS3中的background-image属性来实现。该属性允许我们设置多个背景图片,而且还可以对它们进行一些定位、大小和重复的…

    css 2023年6月9日
    00
  • 使用CSS改变图片颜色的100种方法(值得收藏)

    该攻略主要介绍了使用 CSS 语法进行图片颜色修改的一百种方式,旨在帮助开发者们快速了解并掌握这些方法。 使用 CSS 改变图片颜色的 100 种方法 为了更好地阐述这些方法,我们先准备一张待处理的图片,该图片会在接下来的示例中被反复引用。下面是对该图片的描述和代码: 待处理图片 描述:一张黑色的背景,上面有一些紫色的图案。 代码: <img src=…

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