0

0

CSS怎样制作卡片悬浮立体效果?box-shadow多层投影叠加

絕刀狂花

絕刀狂花

发布时间:2025-08-13 15:29:01

|

552人浏览过

|

来源于php中文网

原创

要实现css卡片悬浮立体效果,核心是利用box-shadow多层叠加模拟光影变化,并结合transform创造位移与旋转的3d感,具体步骤为:1. 使用多层box-shadow,通过不同偏移、模糊和扩散值模拟近景与远景阴影;2. 悬浮时增大阴影的模糊与偏移,同时配合transform: translatey(-10px)使卡片上浮;3. 添加轻微rotatex和rotatey增强立体倾斜感;4. 应用transition实现平滑动画;5. 在父容器设置perspective营造3d透视环境;6. 使用transform-style: preserve-3d确保3d空间渲染;7. 优化性能时避免重排属性动画,优先使用gpu加速的transform和box-shadow;8. 添加will-change: transform, box-shadow提示浏览器优化;9. 考虑可访问性,通过@media (prefers-reduced-motion: reduce)关闭或简化动画;10. 在实际项目中通过测试平衡视觉效果与性能,最终实现既真实又流畅的悬浮立体感。

CSS怎样制作卡片悬浮立体效果?box-shadow多层投影叠加

CSS中制作卡片悬浮立体效果,特别是利用

box-shadow
的多层叠加,核心在于模拟光影变化和位移感。这不单单是视觉上的花哨,更是为了给用户一种可交互的反馈,让界面显得更有层次和活力。

解决方案

要实现一个带有立体感的卡片悬浮效果,我们主要依赖

box-shadow
来模拟不同深度的阴影,配合
transform
进行位移和透视变化。

我们先来一个基本的HTML结构:

立即学习前端免费学习笔记(深入)”;

卡片标题

这是一张具有悬浮立体效果的卡片。

了解更多

接着是CSS部分。关键在于

box-shadow
的巧妙运用和
transition
的平滑过渡。

.card-container {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background-color: #f0f2f5;
    perspective: 1000px; /* 为3D变换提供透视深度 */
}

.card {
    width: 300px;
    padding: 25px;
    background-color: #fff;
    border-radius: 12px;
    /* 初始状态的阴影,通常是轻微的 */
    box-shadow: 
        0 4px 8px rgba(0, 0, 0, 0.08), /* 基础阴影 */
        0 10px 20px rgba(0, 0, 0, 0.05); /* 稍微扩散的远景阴影 */
    transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); /* 平滑过渡 */
    position: relative; /* 为可能添加的伪元素或更复杂效果做准备 */
    transform-style: preserve-3d; /* 确保子元素在3D空间中 */
}

.card:hover {
    /* 悬浮时,卡片“浮”起来,阴影也随之加深和变化 */
    transform: 
        translateY(-10px) /* 向上抬升 */
        rotateX(2deg) /* 轻微的X轴旋转,增加立体感 */
        rotateY(-2deg); /* 轻微的Y轴旋转 */
    box-shadow: 
        0 14px 28px rgba(0, 0, 0, 0.25), /* 更深、更广的阴影 */
        0 10px 10px rgba(0, 0, 0, 0.22), /* 模拟近距离的强烈阴影 */
        0 0 0 3px rgba(0, 0, 0, 0.03) inset; /* 甚至可以尝试内阴影,虽然不常用 */
    /* 还可以考虑添加一个更远的、模糊的阴影来模拟光线扩散 */
    /* 0 30px 60px rgba(0, 0, 0, 0.1); */
}

.card h3 {
    margin-top: 0;
    color: #333;
}

.card p {
    color: #666;
    line-height: 1.6;
}

.card .btn {
    display: inline-block;
    background-color: #007bff;
    color: #fff;
    padding: 10px 20px;
    border-radius: 5px;
    text-decoration: none;
    margin-top: 15px;
    transition: background-color 0.2s ease;
}

.card .btn:hover {
    background-color: #0056b3;
}

这里我用了多层

box-shadow
来制造深度。第一层通常是比较柔和、扩散的,模拟物体与背景之间的基础阴影;第二层可以更集中、颜色稍深,模拟更接近物体的阴影。悬浮时,这些阴影的参数会发生变化,同时卡片本身也进行微小的
transform
位移和旋转,这样就有了“浮起来”的真实感。

如何通过box-shadow模拟光影营造更真实的立体感?

要让

box-shadow
看起来更真实,不仅仅是叠加几层那么简单,它背后涉及的是对光线和物体关系的理解。我个人觉得,最关键的是要模拟出“光源”的存在。

首先,阴影的颜色选择。纯黑的阴影在很多情况下会显得生硬。更自然的做法是选择一个与背景色或主色调略微相关的深色,或者直接使用

rgba
,通过调整透明度来控制阴影的“浓度”。比如,如果背景是浅蓝色,阴影可以稍微带一点蓝调的深灰。

其次是阴影的偏移量(offset-x, offset-y)。这直接决定了“光源”的方向。如果你希望光源从左上方来,那么阴影就应该偏向右下方,即

offset-x
为正值,
offset-y
为正值。反之亦然。在悬浮效果中,卡片“抬升”,理论上它与背景的距离变大,阴影应该变得更模糊、更扩散,同时偏移量也可能略微增大,因为它离光源更近了(或者说,光线更容易从它下方穿过)。

Product Hunt
Product Hunt

Product Hunt每天都在寻找最好的新产品。

下载

再者是模糊半径(blur-radius)和扩散半径(spread-radius)。模糊半径越大,阴影边缘越柔和。扩散半径则决定了阴影的实际大小。一个真实物体的阴影,通常是越靠近物体越清晰、越深,离物体越远则越模糊、越扩散。所以,我们可以叠加多层阴影:一层小的、模糊度较低的,模拟近处的阴影;一层大的、模糊度较高的,模拟远处的扩散阴影。悬浮时,远处的阴影会变得更明显。

举个例子,可以这样组合:

box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.1), /* 基础、柔和的远景阴影 */ 0px 2px 5px rgba(0, 0, 0, 0.15); /* 更近、更清晰的近景阴影 */
悬浮时,这两个值都可以相应调整,比如:
box-shadow: 0px 15px 30px rgba(0, 0, 0, 0.2), 0px 7px 15px rgba(0, 0, 0, 0.25);
这种变化就模拟了卡片“浮起”后,与背景的距离变化导致阴影的形态也随之改变。

除了box-shadow,还有哪些CSS属性可以增强卡片悬浮的立体效果?

box-shadow
确实是核心,但它并非孤军奋战。要让卡片真正“活”起来,我们还得请出一些好帮手:

  • transform
    属性:
    这是制造立体感和动态效果的利器。
    • translateY(-Npx)
      :最直观的,让卡片向上平移,模拟“浮起”的效果。
    • rotateX(Ndeg)
      /
      rotateY(Ndeg)
      :轻微的X轴或Y轴旋转,能极大地增强立体感。想象一下,你从侧面看一个物体被抬起,它通常会有一个微小的倾斜。这种微小的旋转,配合阴影的变化,能让卡片看起来真的在三维空间中移动。
    • scale(N)
      :虽然不常用在“立体”效果中,但微小的放大也能增加“靠近”的感觉。
  • transition
    属性:
    没有它,所有的变化都会显得生硬。它负责让属性值在一定时间内平滑过渡。
    • transition: all 0.3s ease-out;
      是一个不错的起点。
      cubic-bezier
      函数可以提供更精细的动画曲线,比如我上面示例中用的
      cubic-bezier(0.25, 0.8, 0.25, 1)
      ,它会让动画开始时加速,结束时减速,显得更自然。
  • perspective
    属性(应用于父元素):
    如果你想让卡片有真正的3D旋转效果,而不是简单的2D平面上的倾斜,那么父元素上设置
    perspective
    至关重要。它定义了用户与3D场景的距离,距离越小,透视效果越明显。
  • transform-style: preserve-3d
    (应用于卡片本身):
    当你在卡片内部有子元素,并且希望这些子元素也能参与到卡片的3D变换中时,这个属性是必须的。它确保子元素在3D空间中渲染,而不是扁平化。

我有时候会考虑用

::before
::after
伪元素来创建额外的层,比如在卡片下方再加一个半透明的、模糊的“光晕”或“反射”效果,这样卡片看起来就像真的被光线照射着,或者下方有反射光。不过,这会增加DOM复杂度,需要权衡。

在实际项目中,如何优化卡片悬浮效果的性能和用户体验?

漂亮的动画效果固然吸引人,但性能和用户体验是不能妥协的。我在项目里遇到过不少因为过度追求效果导致页面卡顿的情况。

首先,减少不必要的属性动画

box-shadow
transform
是少数几个浏览器能高效处理的属性动画,因为它们通常由GPU加速。尽量避免在悬浮时改变
width
height
margin
padding
等会触发页面重排(layout)的属性,这些操作对性能影响很大。

其次,使用

will-change
属性。这个属性是给浏览器一个“预警”,告诉它某个元素在未来可能会发生哪些变化,让浏览器提前做好优化准备。对于卡片悬浮效果,可以在卡片元素上添加
will-change: transform, box-shadow;
。但要注意,不要滥用
will-change
,因为它也可能消耗资源,只应用于那些确实会频繁或显著变化的元素。

再者,动画时长和缓动函数要适中。太长的动画会让人觉得迟钝,太短又显得生硬。0.2s到0.4s通常是个比较舒适的范围。缓动函数(

ease-out
,
cubic-bezier
)的选择也很重要,它能让动画更自然,避免“跳跃感”。

另外,考虑用户偏好和可访问性。有些用户可能不喜欢复杂的动画,甚至会因为动画而感到不适。我们可以利用媒体查询

@media (prefers-reduced-motion: reduce)
来检测用户是否开启了“减少动态效果”的系统设置。如果开启了,我们可以提供一个简化版的悬浮效果,比如只改变阴影,不进行位移和旋转,或者直接取消动画。

最后,测试和迭代。在不同设备和浏览器上测试你的效果。一个在桌面端流畅的动画,可能在移动端就显得卡顿。根据实际测试结果进行调整,比如减少

box-shadow
的层数,或者降低模糊半径,都是优化性能的手段。我通常会从一个比较简单的效果开始,然后逐步增加复杂性,直到找到性能和视觉效果的最佳平衡点。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

524

2023.06.15

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

268

2023.07.27

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

761

2023.07.28

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

542

2023.08.01

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

765

2023.08.10

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

606

2023.08.10

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

561

2023.08.21

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

397

2023.08.22

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

95

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 23.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号