CSS 中的疯狂杂志折叠效果

在Mad Magazine工作了65年后,漫画家Al Jaffee宣布退休。Jaffee最出名的是他的Mad Fold-Ins,折叠页面会揭示艺术品中隐藏的信息。网上有很多例子。问题是,它们都静态地并排显示之前和之后,这削弱了魔力(见这里和这里)。整整一代人可能只见过这种格式的折叠。

当然,我必须为网络创建纸张折叠效果。有许多不同的方法可以实现这一点,但这种方法很好,因为:

  • 它只是CSS,不依赖于JavaScript。
  • 使用单个图像,而不是要求在 Photoshop 中对图像进行切片。
  • 可以通过在样式属性中设置 CSS 变量来仅使用 HTML 进行配置。

这是它的演示,使用约翰尼·桑普森(Johnny Sampson)在庆祝Jaffee98岁生日的一期中的作品。悬停或点击可折叠。

在线演示地址

点击查看

效果的 HTML 相当简单。您可能想知道独立图像元素 - 它是隐藏的,但用于设置组件的大小和纵横比。图像路径在此处指定,并再次作为CSS变量来设置其他元素的背景图像。

html 复制代码
<span class="jaffee" style="--bg: url('path/to/image.png');">
  <span class="a"></span>
  <span class="bc">
    <span class="b"></span>
    <span class="c"></span>
  </span>
  <img src="path/to/image.png">
</span>

这是用于设置定位、3D 变换和过渡的 CSS。

css 复制代码
.jaffee {
  position: relative;
  display: inline-flex;
  transform: rotateX(10deg); 
  transform-style: preserve-3d;
  cursor: grab;
}

.jaffee img {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 56vh;
  opacity: 0;
}

.jaffee .a,
.jaffee .b,
.jaffee .c {
  top: 0;
  display: inline-block;
  height: 100%;
  background-image: var(--bg);
  background-size: cover;
  background-repeat: no-repeat;
}

.jaffee .a {
  position: absolute;
  left: 0;
  width: 50%;
  background-position: 0 0;
}

.jaffee .bc {
  position: absolute;
  display: inline-flex;
  width: 50%;
  height: 100%;
  left: 50%;
  transform-origin: left;
  transition: transform 3s;
  transform-style: preserve-3d;
}

.jaffee .b,
.jaffee .c {
  position: relative;
  width: 50%;
  backface-visibility: hidden;
}

.jaffee .b {
  background-position: 66.666667% 0;
  transform-style: preserve-3d;
}

.jaffee .b:after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: #000;
  transform: rotateY(180deg) translateZ(1px);
  transform-style: preserve-3d;
  backface-visibility: hidden;
}

.jaffee .c {
  background-position: 100% 0;
  transform-origin: left;
  transition: transform 2s;
}

.jaffee:hover .bc,
.jaffee:active .bc {
  transform: rotateY(-180deg) translateZ(-1px);
  transition: transform 2s;
}

.jaffee:hover .c,
.jaffee:active .c {
  transform: rotateY(180deg) translateZ(2px);
  transition: transform 3s;
}
相关推荐
华玥作者7 小时前
[特殊字符] VitePress 对接 Algolia AI 问答(DocSearch + AI Search)完整实战(下)
前端·人工智能·ai
Mr Xu_7 小时前
告别冗长 switch-case:Vue 项目中基于映射表的优雅路由数据匹配方案
前端·javascript·vue.js
前端摸鱼匠7 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
lang201509287 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
好家伙VCC8 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
未来之窗软件服务9 小时前
未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·昭和仙君
嘿起屁儿整9 小时前
面试点(网络层面)
前端·网络
VT.馒头9 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
phltxy10 小时前
Vue 核心特性实战指南:指令、样式绑定、计算属性与侦听器
前端·javascript·vue.js
Byron070711 小时前
Vue 中使用 Tiptap 富文本编辑器的完整指南
前端·javascript·vue.js