Skip to content

Foundation 图片

Foundation 提供了多种处理图片的工具和类,帮助你创建响应式、美观的图片展示。本章将介绍 Foundation 图片相关的各种用法。

响应式图片

默认情况下,Foundation 让图片具有响应式特性:

html
<img src="https://via.placeholder.com/800x400" alt="响应式图片">

图片会自动缩放以适应容器宽度,不会超出容器边界。

图片缩略图

使用 .thumbnail 类创建带边框的缩略图:

html
<img class="thumbnail" src="https://via.placeholder.com/200x200" alt="缩略图">

链接缩略图

html
<a href="#">
    <img class="thumbnail" src="https://via.placeholder.com/200x200" alt="可点击的缩略图">
</a>

图片形状

圆角图片

html
<style>
    .rounded-image {
        border-radius: 10px;
    }
</style>

<img class="rounded-image" src="https://via.placeholder.com/200x200" alt="圆角图片">

圆形图片

html
<style>
    .circle-image {
        border-radius: 50%;
    }
</style>

<img class="circle-image" src="https://via.placeholder.com/200x200" alt="圆形图片">

图片浮动

html
<p>
    <img class="float-left" src="https://via.placeholder.com/150x150" alt="左浮动"
         style="margin-right: 15px; margin-bottom: 10px;">
    这是一段文字,图片在左侧浮动。Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>

<p style="clear: both;">
    <img class="float-right" src="https://via.placeholder.com/150x150" alt="右浮动"
         style="margin-left: 15px; margin-bottom: 10px;">
    这是一段文字,图片在右侧浮动。Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>

图片网格

使用网格系统创建图片画廊:

html
<div class="grid-x grid-margin-x small-up-2 medium-up-3 large-up-4">
    <div class="cell">
        <img class="thumbnail" src="https://via.placeholder.com/300x200" alt="图片1">
    </div>
    <div class="cell">
        <img class="thumbnail" src="https://via.placeholder.com/300x200" alt="图片2">
    </div>
    <div class="cell">
        <img class="thumbnail" src="https://via.placeholder.com/300x200" alt="图片3">
    </div>
    <div class="cell">
        <img class="thumbnail" src="https://via.placeholder.com/300x200" alt="图片4">
    </div>
</div>

图片居中

html
<!-- 使用 text-center -->
<div class="text-center">
    <img src="https://via.placeholder.com/300x200" alt="居中图片">
</div>

<!-- 使用 margin auto -->
<img src="https://via.placeholder.com/300x200" alt="居中图片"
     style="display: block; margin: 0 auto;">

Orbit 轮播图

Foundation 提供了 Orbit 组件用于创建图片轮播:

html
<div class="orbit" role="region" aria-label="图片轮播" data-orbit>
    <div class="orbit-wrapper">
        <div class="orbit-controls">
            <button class="orbit-previous">
                <span class="show-for-sr">上一张</span>&#9664;
            </button>
            <button class="orbit-next">
                <span class="show-for-sr">下一张</span>&#9654;
            </button>
        </div>
        <ul class="orbit-container">
            <li class="is-active orbit-slide">
                <figure class="orbit-figure">
                    <img class="orbit-image" src="https://via.placeholder.com/800x400/1779ba/ffffff?text=Slide+1" alt="幻灯片1">
                    <figcaption class="orbit-caption">幻灯片 1 的说明文字</figcaption>
                </figure>
            </li>
            <li class="orbit-slide">
                <figure class="orbit-figure">
                    <img class="orbit-image" src="https://via.placeholder.com/800x400/3adb76/ffffff?text=Slide+2" alt="幻灯片2">
                    <figcaption class="orbit-caption">幻灯片 2 的说明文字</figcaption>
                </figure>
            </li>
            <li class="orbit-slide">
                <figure class="orbit-figure">
                    <img class="orbit-image" src="https://via.placeholder.com/800x400/cc4b37/ffffff?text=Slide+3" alt="幻灯片3">
                    <figcaption class="orbit-caption">幻灯片 3 的说明文字</figcaption>
                </figure>
            </li>
        </ul>
    </div>
    <nav class="orbit-bullets">
        <button class="is-active" data-slide="0">
            <span class="show-for-sr">第一张幻灯片</span>
        </button>
        <button data-slide="1">
            <span class="show-for-sr">第二张幻灯片</span>
        </button>
        <button data-slide="2">
            <span class="show-for-sr">第三张幻灯片</span>
        </button>
    </nav>
</div>

Orbit 配置选项

html
<div class="orbit"
     data-orbit
     data-auto-play="true"
     data-timer-delay="5000"
     data-infinite-wrap="true"
     data-swipe="true"
     data-pause-on-hover="true">
    <!-- 轮播内容 -->
</div>
选项说明默认值
data-auto-play自动播放true
data-timer-delay切换间隔(毫秒)5000
data-infinite-wrap无限循环true
data-swipe启用滑动true
data-pause-on-hover悬停暂停true

图片覆盖层

创建带有文字覆盖层的图片:

html
<style>
    .image-overlay {
        position: relative;
        display: inline-block;
    }
    .image-overlay img {
        display: block;
    }
    .overlay-content {
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        background: rgba(0, 0, 0, 0.7);
        color: white;
        padding: 15px;
    }
    .overlay-full {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.5);
        color: white;
        display: flex;
        align-items: center;
        justify-content: center;
        opacity: 0;
        transition: opacity 0.3s ease;
    }
    .image-overlay:hover .overlay-full {
        opacity: 1;
    }
</style>

<!-- 底部覆盖层 -->
<div class="image-overlay">
    <img src="https://via.placeholder.com/300x200" alt="图片">
    <div class="overlay-content">
        <h5 style="margin: 0;">图片标题</h5>
        <p style="margin: 0;">图片描述文字</p>
    </div>
</div>

<!-- 悬停覆盖层 -->
<div class="image-overlay">
    <img src="https://via.placeholder.com/300x200" alt="图片">
    <div class="overlay-full">
        <div class="text-center">
            <h4>悬停显示</h4>
            <a class="button small" href="#">查看详情</a>
        </div>
    </div>
</div>

响应式背景图

html
<style>
    .hero-banner {
        background-image: url('https://via.placeholder.com/1920x600');
        background-size: cover;
        background-position: center;
        height: 400px;
        display: flex;
        align-items: center;
        justify-content: center;
        color: white;
        text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
    }
</style>

<div class="hero-banner">
    <div class="text-center">
        <h1>欢迎来到我们的网站</h1>
        <p>这是一个响应式背景图片示例</p>
        <a class="button large" href="#">了解更多</a>
    </div>
</div>

延迟加载

使用 Interchange 实现响应式图片加载:

html
<img data-interchange="
    [https://via.placeholder.com/400x200, small],
    [https://via.placeholder.com/800x400, medium],
    [https://via.placeholder.com/1200x600, large]
" alt="响应式图片">

原生懒加载

html
<img src="https://via.placeholder.com/800x400" alt="懒加载图片" loading="lazy">

Figure 和 Figcaption

使用语义化标签:

html
<figure>
    <img src="https://via.placeholder.com/400x300" alt="示例图片">
    <figcaption>图片说明:这是一张示例图片</figcaption>
</figure>

样式化 Figure

html
<style>
    figure.styled {
        margin: 0;
        padding: 0;
        background: #f4f4f4;
        border-radius: 4px;
        overflow: hidden;
    }
    figure.styled img {
        width: 100%;
        display: block;
    }
    figure.styled figcaption {
        padding: 15px;
        font-style: italic;
        color: #666;
    }
</style>

<figure class="styled">
    <img src="https://via.placeholder.com/400x300" alt="示例图片">
    <figcaption>图片说明:这是一张示例图片</figcaption>
</figure>

完整示例

html
<!DOCTYPE html>
<html class="no-js" lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Foundation 图片示例</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.5/dist/css/foundation.min.css">
    <style>
        .demo-section {
            margin-bottom: 40px;
        }
        .demo-section h3 {
            margin-bottom: 20px;
            padding-bottom: 10px;
            border-bottom: 1px solid #ddd;
        }

        .circle-image { border-radius: 50%; }
        .rounded-image { border-radius: 10px; }

        .image-overlay {
            position: relative;
            display: inline-block;
            margin: 10px;
        }
        .image-overlay img { display: block; }
        .overlay-content {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: rgba(0, 0, 0, 0.7);
            color: white;
            padding: 15px;
        }
        .overlay-full {
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: rgba(0, 0, 0, 0.5);
            color: white;
            display: flex;
            align-items: center;
            justify-content: center;
            opacity: 0;
            transition: opacity 0.3s ease;
        }
        .image-overlay:hover .overlay-full { opacity: 1; }

        .hero-banner {
            background-image: url('https://via.placeholder.com/1920x400/1779ba/ffffff');
            background-size: cover;
            background-position: center;
            height: 300px;
            display: flex;
            align-items: center;
            justify-content: center;
            color: white;
            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
            margin-bottom: 30px;
        }

        figure.styled {
            margin: 0;
            background: #f4f4f4;
            border-radius: 4px;
            overflow: hidden;
        }
        figure.styled img { width: 100%; display: block; }
        figure.styled figcaption {
            padding: 15px;
            font-style: italic;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="hero-banner">
        <div class="text-center">
            <h1>图片展示</h1>
            <p>Foundation 图片处理示例</p>
        </div>
    </div>

    <div class="grid-container">
        <div class="demo-section">
            <h3>缩略图</h3>
            <img class="thumbnail" src="https://via.placeholder.com/200x150" alt="缩略图1">
            <img class="thumbnail" src="https://via.placeholder.com/200x150" alt="缩略图2">
            <img class="thumbnail" src="https://via.placeholder.com/200x150" alt="缩略图3">
        </div>

        <div class="demo-section">
            <h3>图片形状</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell medium-4 text-center">
                    <img src="https://via.placeholder.com/200x200" alt="默认">
                    <p>默认(方形)</p>
                </div>
                <div class="cell medium-4 text-center">
                    <img class="rounded-image" src="https://via.placeholder.com/200x200" alt="圆角">
                    <p>圆角</p>
                </div>
                <div class="cell medium-4 text-center">
                    <img class="circle-image" src="https://via.placeholder.com/200x200" alt="圆形">
                    <p>圆形</p>
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>图片网格</h3>
            <div class="grid-x grid-margin-x small-up-2 medium-up-3 large-up-4">
                <div class="cell">
                    <img class="thumbnail" src="https://via.placeholder.com/300x200/1779ba/ffffff" alt="图片1">
                </div>
                <div class="cell">
                    <img class="thumbnail" src="https://via.placeholder.com/300x200/3adb76/ffffff" alt="图片2">
                </div>
                <div class="cell">
                    <img class="thumbnail" src="https://via.placeholder.com/300x200/ffae00/ffffff" alt="图片3">
                </div>
                <div class="cell">
                    <img class="thumbnail" src="https://via.placeholder.com/300x200/cc4b37/ffffff" alt="图片4">
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>图片覆盖层</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell medium-6">
                    <div class="image-overlay">
                        <img src="https://via.placeholder.com/400x250" alt="图片">
                        <div class="overlay-content">
                            <h5 style="margin: 0; color: white;">底部覆盖层</h5>
                            <p style="margin: 0;">这是图片的说明文字</p>
                        </div>
                    </div>
                </div>
                <div class="cell medium-6">
                    <div class="image-overlay">
                        <img src="https://via.placeholder.com/400x250" alt="图片">
                        <div class="overlay-full">
                            <div class="text-center">
                                <h4>悬停显示</h4>
                                <a class="button small" href="#">查看详情</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>Figure 元素</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell medium-6">
                    <figure class="styled">
                        <img src="https://via.placeholder.com/500x300" alt="示例图片">
                        <figcaption>这是使用 figure 和 figcaption 的语义化图片展示</figcaption>
                    </figure>
                </div>
                <div class="cell medium-6">
                    <figure class="styled">
                        <img src="https://via.placeholder.com/500x300" alt="示例图片">
                        <figcaption>另一张带有说明的图片示例</figcaption>
                    </figure>
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>轮播图 (Orbit)</h3>
            <div class="orbit" role="region" aria-label="图片轮播" data-orbit>
                <div class="orbit-wrapper">
                    <div class="orbit-controls">
                        <button class="orbit-previous"><span class="show-for-sr">上一张</span>&#9664;</button>
                        <button class="orbit-next"><span class="show-for-sr">下一张</span>&#9654;</button>
                    </div>
                    <ul class="orbit-container">
                        <li class="is-active orbit-slide">
                            <figure class="orbit-figure">
                                <img class="orbit-image" src="https://via.placeholder.com/1000x400/1779ba/ffffff?text=Slide+1" alt="幻灯片1">
                                <figcaption class="orbit-caption">第一张幻灯片说明</figcaption>
                            </figure>
                        </li>
                        <li class="orbit-slide">
                            <figure class="orbit-figure">
                                <img class="orbit-image" src="https://via.placeholder.com/1000x400/3adb76/ffffff?text=Slide+2" alt="幻灯片2">
                                <figcaption class="orbit-caption">第二张幻灯片说明</figcaption>
                            </figure>
                        </li>
                        <li class="orbit-slide">
                            <figure class="orbit-figure">
                                <img class="orbit-image" src="https://via.placeholder.com/1000x400/cc4b37/ffffff?text=Slide+3" alt="幻灯片3">
                                <figcaption class="orbit-caption">第三张幻灯片说明</figcaption>
                            </figure>
                        </li>
                    </ul>
                </div>
                <nav class="orbit-bullets">
                    <button class="is-active" data-slide="0"><span class="show-for-sr">第一张</span></button>
                    <button data-slide="1"><span class="show-for-sr">第二张</span></button>
                    <button data-slide="2"><span class="show-for-sr">第三张</span></button>
                </nav>
            </div>
        </div>
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.5/dist/js/foundation.min.js"></script>
    <script>$(document).foundation();</script>
</body>
</html>

图片最佳实践

  1. 响应式图片:始终使用响应式图片或 srcset
  2. Alt 属性:为所有图片提供有意义的 alt 文本
  3. 懒加载:对非首屏图片使用懒加载
  4. 压缩优化:使用适当的图片格式和压缩
  5. 宽高比:保持图片的宽高比,避免变形
html
<!-- 使用 srcset 响应式图片 -->
<img src="image-800.jpg"
     srcset="image-400.jpg 400w,
             image-800.jpg 800w,
             image-1200.jpg 1200w"
     sizes="(max-width: 600px) 400px,
            (max-width: 1000px) 800px,
            1200px"
     alt="响应式图片示例">

总结

本章我们学习了:

  • 响应式图片的基本用法
  • 缩略图和各种图片形状
  • 图片网格布局
  • Orbit 轮播图组件
  • 图片覆盖层效果
  • 响应式背景图

下一章,我们将学习 Foundation 下拉菜单


提示:图片是网页中重要的视觉元素,但也可能影响页面加载速度,务必进行适当的优化。