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;
}
相关推荐
IT_陈寒12 分钟前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
Blanche150022 分钟前
利用 RAG 为答疑机器人扩展知识范围
前端
天若有情67328 分钟前
【纯前端小工具】公历生日转农历,批量查询每年农历生日对应的公历日期(GitHub Pages在线直接用)
前端·javascript·github pages·农历转换·lunisolar·网页小工具
SoonITer29 分钟前
怎样构建一个 Agent-friendly 的网站
前端·agent
颜进强1 小时前
01 · NestJS 是什么:用途、解决什么问题、与热门框架对比
前端·后端·ai编程
wendZzoo1 小时前
前端工程师的 3D 第一课:一个模型如何进入网页
前端
颜进强1 小时前
04 · NestJS 依赖注入:你在 `@Module` 写的 providers,和构造参数里那个类型,是怎么"对上"的?
前端·后端·ai编程
肆仲冬1 小时前
不用框架,用 TypeScript 从零搭一个 Agent 框架
前端
林语琛1 小时前
我写的 switch…break 被 Babel 偷偷吞了
前端·javascript·babel
烈风逍遥1 小时前
第六篇:RAG 知识库构建与检索全链路
前端·人工智能·后端