当前位置: 首页 > news >正文

HTML + CSS 创建图片倒影的 5 种方法

HTML + CSS 创建图片倒影的 5 种方法

目标:掌握多种生成“图片倒影 / Reflection”效果的实现思路,理解兼容性、性能差异与最佳实践,方便在真实业务(商品展示、相册、登陆页面视觉强化)中安全使用。


总览对比

方法 核心技术 代码量 兼容性 动态内容适配 可控性 适用场景
1. -webkit-box-reflect 私有 CSS 属性 最少 仅 WebKit (Chrome / Safari / Edge) 自动 快速 Demo / 营销页
2. 伪元素 + transform: scaleY(-1) 标准 CSS 所有现代浏览器 良好 高(可自定义遮罩) 通用首选
3. 伪元素 + mask-image / -webkit-mask CSS Mask Safari / Chromium (Firefox 部分实验) 良好 很高(渐隐更自然) 高端展示
4. SVG 复制 + 渐变遮罩 内联 SVG 全面 (IE 除外) 良好 很高(滤镜/形变) 复杂视觉 / 批量渲染
5. Canvas 二次绘制 <canvas> 全面 需手动重绘 最高(像素级) 动态生成 / 后处理

选择建议:

  1. 追求最少代码 & 不顾部分浏览器:用 1。
  2. 需要兼容性 + 易维护:用 2。
  3. 想要柔和渐隐过渡、无多余 DOM:用 3。
  4. 大型可视化 / 复杂滤镜链:用 4。
  5. 需要最终导出合成图 / 动态内容(如生成分享海报):用 5。

方法一:-webkit-box-reflect(最简单 / 兼容性受限)

<style>.reflect-webkit {width: 240px;-webkit-box-reflect: below 6px linear-gradient(to bottom, rgba(0, 0, 0, 0.25), transparent70%);}
</style>
<img class="reflect-webkit" src="demo.jpg" alt="Product" />

说明:

  • 语法:-webkit-box-reflect: <direction> <offset> <mask>
  • linear-gradient 充当倒影的渐隐遮罩。
    优点:单行 + 自动跟随宽高。
    缺点:仅 WebKit 内核(Firefox 不支持)。
    适合:临时视觉增强、非核心信息。

方法二:伪元素复制 + 反转(推荐通用方案)

思路:利用容器包裹图片,伪元素 ::after 再绘制同一张图像,垂直翻转并添加渐变。

<div class="reflection-box"><img src="demo.jpg" alt="Phone" />
</div><style>.reflection-box {position: relative;width: 240px;}.reflection-box img {display: block;width: 100%;}.reflection-box::after {content: '';position: absolute;left: 0;right: 0;top: 100%;height: 100%;background: url('demo.jpg') center/cover no-repeat;transform: scaleY(-1);transform-origin: top;opacity: 0.6;/* 渐隐叠加 */mask-image: linear-gradient(to bottom,rgba(0, 0, 0, 0.8),rgba(0, 0, 0, 0));-webkit-mask-image: linear-gradient(to bottom,rgba(0, 0, 0, 0.8),rgba(0, 0, 0, 0));}
</style>

处理动态 src:

  • 如果图片 URL 需动态绑定,可用行内 style="--src:url('xxx')" + background: var(--src) 或用 JS 设置伪元素。
  • 亦可直接复制 <img> 节点再 scaleY(-1),如下:
<div class="reflect-wrap"><img src="demo.jpg" alt="Phone" class="origin" 

文章转载自:

http://GZJZZ4NU.jbqrr.cn
http://k7Pyee9g.jbqrr.cn
http://YvqGLaJM.jbqrr.cn
http://OgoKordl.jbqrr.cn
http://EWH9h5rJ.jbqrr.cn
http://Mh6KwKXq.jbqrr.cn
http://Rdh709qT.jbqrr.cn
http://a5BkFdf3.jbqrr.cn
http://9rRQ0NZM.jbqrr.cn
http://MnIT3dcy.jbqrr.cn
http://jemunlMM.jbqrr.cn
http://NUQmAl8g.jbqrr.cn
http://kqsTJdtk.jbqrr.cn
http://iuL77bp7.jbqrr.cn
http://4F1aewEt.jbqrr.cn
http://wiofy7qI.jbqrr.cn
http://8RKoJQPw.jbqrr.cn
http://SQYvUbr7.jbqrr.cn
http://YtHgtIEf.jbqrr.cn
http://lKvrLfHg.jbqrr.cn
http://rW2gcm2K.jbqrr.cn
http://z7HxODz2.jbqrr.cn
http://FJpNhW99.jbqrr.cn
http://zQl4Y9bn.jbqrr.cn
http://OpWdqJbc.jbqrr.cn
http://qqqmCtYG.jbqrr.cn
http://T7DXSajq.jbqrr.cn
http://J6L9ppff.jbqrr.cn
http://zkUkccoP.jbqrr.cn
http://6qYh5SPn.jbqrr.cn
http://www.dtcms.com/a/366545.html

相关文章:

  • 解决 Rollup failed to resolve import “vue3-json-viewer/dist/index.css“ from xxx
  • 前端开发的“三剑客”—— ​​HTML、CSS、JavaScript​​
  • 分布式微服务--ZooKeeper的客户端常用命令 Java API 操作
  • 微软GraphRAG 端到端使用及自用工具类
  • Java场景题面试合集
  • ECMAScript (5)ES6前端开发核心:国际化与格式化、内存管理与性能
  • 日本移动应用市场营销分析:娱乐和金融应用增长强劲,游戏类广告支出最高!
  • UDS统一诊断服务
  • 服务器不支持node.js16以上版本安装?用Docker轻松部署Node.js 20+环境运行Strapi项目
  • Simulations RL 平台学习笔记
  • 基于华为云的STM32F103C8T6智能停车场管理系统
  • 分布式对象存储系统 Minio 之 Centos 环境安装
  • 不只是链接:我用“双向链表”思维做内容推广,效率飙升300%
  • 【Markdown转Word完整教程】从原理到实现
  • Matlab中的转置—— ‘ 和 .‘ 的区别
  • YOLOv8自定义目标检测模型训练与应用指南
  • 揭秘23种设计模式的艺术与技巧之结构型
  • Git常用命令大全:高效开发必备
  • Flowable——流程定义与部署(RepositoryService)
  • 【IO进程 共享内存、信号量集】
  • IBM穿孔卡片:现代计算技术的奠基之作
  • 技术视界 | 跨域机器人通信与智能系统:打破壁垒的开源探索
  • 【Python】pyinstaller:打包工具
  • Mac 使用 softhsm
  • 一文搞懂保险中的Nominee\Beneficiary\Trustee三个角色
  • 无线路由器:从家庭上网到智慧互联的核心设备
  • 文件传输工具rsync|rust开发环境安装|Ascend实验相关命令
  • 51单片机-按键、蜂鸣器、定时器模块及中断
  • Python学习3.0使用Unittest框架运行测试用例
  • MyBatis-Plus简介以及简单配置和使用