← CSS3 文本溢出处理 CSS3 2D变换 →

CSS3 阴影效果

原创 2025-09-19 CSS3 已有人查阅

CSS3 阴影效果解析:box-shadow与text-shadow实战指南

阴影效果是提升视觉层次感和立体感的重要手段。CSS3之前,开发者只能通过切割图片来实现阴影效果,这种方式既繁琐又不利于维护。CSS3引入了原生阴影属性,让我们能够直接通过代码实现各种阴影效果。

一、box-shadow属性详解

box-shadow属性用于为元素添加盒子阴影效果,其基本语法结构为:

选择器 {
    box-shadow: offset-x offset-y blur-radius spread color inset;
}

参数说明:

  • offset-x:水平偏移量,正值表示向右偏移,负值向左

  • offset-y:垂直偏移量,正值向下偏移,负值向上

  • blur-radius:模糊半径(可选),值越大边缘越模糊

  • spread:阴影扩展尺寸(可选),正值扩大阴影,负值缩小

  • color:阴影颜色(可选),默认使用当前文本颜色

  • inset:内阴影关键字(可选),默认为外阴影

基础示例演示

.代码号学习卡片 {
    width: 300px;
    padding: 20px;
    background: #f8f9fa;
    border-radius: 8px;
    box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.1);
}

这个示例创建了一个柔和的外部阴影效果,适合用于卡片式设计。我个人建议在使用box-shadow时,尽量使用rgba颜色值,这样可以更好地控制阴影的透明度,实现更自然的视觉效果。

二、多重阴影效果实现

CSS3允许我们为单个元素添加多个阴影效果,只需用逗号分隔不同的阴影值:

.高级阴影效果 {
    width: 250px;
    height: 150px;
    background: #fff;
    box-shadow: 
        0 2px 4px rgba(0,0,0,0.1),
        0 8px 16px rgba(0,0,0,0.1),
        0 16px 32px rgba(0,0,0,0.15);
}

这种多层阴影技术可以创建出更加立体和真实的深度感。在我的项目经验中,使用2-3层阴影通常能达到效果,过多层数反而会导致性能下降。

三、内阴影效果应用

inset关键字可以创建内阴影效果,非常适合制作凹陷按钮或输入框:

.凹陷效果按钮 {
    padding: 12px 24px;
    background: #e9ecef;
    border: none;
    border-radius: 6px;
    box-shadow: inset 2px 2px 5px rgba(0,0,0,0.1),
                inset -2px -2px 5px rgba(255,255,255,0.8);
}

四、text-shadow文本阴影

text-shadow属性用于为文本内容添加阴影效果,语法与box-shadow类似:

.突出标题 {
    font-size: 2.5rem;
    color: #333;
    text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}

.霓虹灯效果 {
    color: #fff;
    text-shadow: 0 0 5px #0ff,
                 0 0 10px #0ff,
                 0 0 15px #0ff,
                 0 0 20px #0ff;
}

五、实际应用案例

卡片组件阴影设计

.代码号编程卡片 {
    max-width: 400px;
    margin: 20px auto;
    padding: 25px;
    background: white;
    border-radius: 12px;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07),
                0 5px 15px rgba(0, 0, 0, 0.1);
    transition: box-shadow 0.3s ease;
}

.代码号编程卡片:hover {
    box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15),
                0 15px 30px rgba(0, 0, 0, 0.2);
}

按钮阴影效果

.代码号学习按钮 {
    display: inline-block;
    padding: 12px 28px;
    background: #4361ee;
    color: white;
    border: none;
    border-radius: 8px;
    font-size: 1rem;
    cursor: pointer;
    box-shadow: 0 4px 6px rgba(67, 97, 238, 0.3);
    transition: all 0.2s ease;
}

.代码号学习按钮:active {
    box-shadow: 0 2px 3px rgba(67, 97, 238, 0.4);
    transform: translateY(2px);
}

六、项目应用示例

下面是一个完整的HTML页面,展示了CSS3的box-shadow和text-shadow属性在实际界面设计中的应用。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS3阴影效果实战 - 代码号编程学习</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
        
        body {
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            color: #333;
            line-height: 1.6;
            padding: 20px;
            min-height: 100vh;
        }
        
        .container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
        }
        
        header {
            text-align: center;
            margin-bottom: 40px;
            padding: 30px 20px;
            background: #fff;
            border-radius: 15px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
        }
        
        h1 {
            font-size: 2.8rem;
            color: #2c3e50;
            margin-bottom: 15px;
            text-shadow: 3px 3px 6px rgba(0, 0, 0, 0.15);
        }
        
        .subtitle {
            font-size: 1.2rem;
            color: #7f8c8d;
            max-width: 800px;
            margin: 0 auto;
        }
        
        .grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
            gap: 25px;
            margin-bottom: 40px;
        }
        
        .card {
            background: #fff;
            border-radius: 12px;
            padding: 25px;
            transition: transform 0.3s ease, box-shadow 0.3s ease;
        }
        
        .card:hover {
            transform: translateY(-5px);
        }
        
        .card h2 {
            color: #3498db;
            margin-bottom: 15px;
            font-size: 1.5rem;
        }
        
        .card p {
            color: #555;
            margin-bottom: 20px;
        }
        
        .example-1 {
            box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.1);
        }
        
        .example-1:hover {
            box-shadow: 8px 8px 20px rgba(0, 0, 0, 0.15);
        }
        
        .example-2 {
            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.05);
        }
        
        .example-2:hover {
            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.12), 0 5px 10px rgba(0, 0, 0, 0.08);
        }
        
        .example-3 {
            box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);
        }
        
        .example-3:hover {
            box-shadow: 0 18px 40px rgba(50, 50, 93, 0.15), 0 8px 20px rgba(0, 0, 0, 0.1);
        }
        
        .example-4 {
            box-shadow: inset 0 2px 5px rgba(0, 0, 0, 0.08);
            background: #f8f9fa;
        }
        
        .example-4:hover {
            box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.12);
        }
        
        .code-container {
            background: #2d3436;
            color: #f5f6fa;
            padding: 20px;
            border-radius: 10px;
            margin-top: 40px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
        }
        
        .code-container h2 {
            color: #dfe6e9;
            margin-bottom: 20px;
            text-align: center;
            text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
        }
        
        pre {
            background: #3e484b;
            padding: 15px;
            border-radius: 8px;
            overflow-x: auto;
            line-height: 1.5;
            box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.2);
        }
        
        .code-example {
            color: #fd7e14;
            margin: 15px 0;
        }
        
        .comment {
            color: #7f8c8d;
        }
        
        .property {
            color: #81ecec;
        }
        
        .value {
            color: #55efc4;
        }
        
        footer {
            text-align: center;
            margin-top: 50px;
            padding: 20px;
            color: #636e72;
            font-size: 0.9rem;
        }
        
        @media (max-width: 768px) {
            .grid {
                grid-template-columns: 1fr;
            }
            
            h1 {
                font-size: 2.2rem;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <h1>CSS3阴影效果实战</h1>
            <p class="subtitle">探索box-shadow和text-shadow属性在网页设计中的应用,提升用户界面视觉效果</p>
        </header>
        
        <div class="grid">
            <div class="card example-1">
                <h2>基础阴影效果</h2>
                <p>使用简单的偏移和模糊半径创建柔和的阴影效果,适合大多数卡片式设计。</p>
                <p>偏移值:5px 5px,模糊半径:15px</p>
            </div>
            
            <div class="card example-2">
                <h2>多层阴影效果</h2>
                <p>使用多个阴影层创建更复杂的视觉效果,增加深度感和立体感。</p>
                <p>两层阴影组合,创造更自然的深度效果</p>
            </div>
            
            <div class="card example-3">
                <h2>扩散阴影效果</h2>
                <p>使用扩散半径参数控制阴影的扩展范围,创建更明显的阴影效果。</p>
                <p>适合需要强调的交互元素和重要内容区域</p>
            </div>
            
            <div class="card example-4">
                <h2>内阴影效果</h2>
                <p>使用inset关键字创建内阴影,实现凹陷或压按效果。</p>
                <p>常用于输入框、按钮或需要凹陷效果的设计元素</p>
            </div>
        </div>
        
        <div class="code-container">
            <h2>阴影效果代码示例</h2>
            <pre><code><span class="comment">/* 基础阴影效果 */</span>
<span class="code-example">.card</span> {
    <span class="property">box-shadow</span>: <span class="value">5px 5px 15px rgba(0, 0, 0, 0.1)</span>;
}

<span class="comment">/* 多层阴影效果 */</span>
<span class="code-example">.card-layered</span> {
    <span class="property">box-shadow</span>: <span class="value">0 4px 20px rgba(0, 0, 0, 0.08), 
                0 2px 4px rgba(0, 0, 0, 0.05)</span>;
}

<span class="comment">/* 文本阴影效果 */</span>
<span class="code-example">h1</span> {
    <span class="property">text-shadow</span>: <span class="value">3px 3px 6px rgba(0, 0, 0, 0.15)</span>;
}

<span class="comment">/* 内阴影效果 */</span>
<span class="code-example">.input-field</span> {
    <span class="property">box-shadow</span>: <span class="value">inset 0 2px 5px rgba(0, 0, 0, 0.08)</span>;
}

<span class="comment">/* 带扩散半径的阴影 */</span>
<span class="code-example">.floating-element</span> {
    <span class="property">box-shadow</span>: <span class="value">0 10px 30px rgba(0, 0, 0, 0.15), 
                0 5px 10px rgba(0, 0, 0, 0.05)</span>;
}</code></pre>
        </div>
        
        <footer>
            <p>© 2025 代码号编程学习 | 更多CSS教程请访问:https://www.ebingou.cn/biancheng/</p>
        </footer>
    </div>
</body>
</html>

七、本节课程知识要点

  1. 阴影性能优化:过度使用阴影效果会影响页面渲染性能,特别是在移动设备上。建议合理控制阴影层数和模糊半径。

  2. 浏览器兼容性:虽然现在浏览器都支持阴影属性,但在一些旧版浏览器中可能需要使用前缀。可以使用Autoprefixer等工具自动处理。

  3. 阴影与对比度:确保文本阴影不会降低文本可读性,特别是在背景复杂的情况下。

  4. 阴影的语义化使用:阴影不仅用于美观,还可以提供视觉提示,如按钮的按下状态、元素的层次关系等。

根据2025年的网页设计趋势,微妙的阴影效果仍然广泛应用于扁平化设计和拟物化设计的结合中。通过合理运用阴影效果,可以显著提升用户体验和界面美观度。

← CSS3 文本溢出处理 CSS3 2D变换 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号