Metro 风格核心特点

在开始编码前,我们先明确一下 Metro/Fluent Design 的视觉元素:

html5 metro 模板
(图片来源网络,侵删)
  1. 网格系统: 内容被整齐地排列在网格中,通常是等宽的方块或矩形。
  2. 大胆的色彩: 使用鲜艳、饱和的颜色作为背景,白色文字,形成强烈对比。
  3. 无衬线字体: 通常使用如 "Segoe UI" (Windows 默认字体) 或其他现代无衬线字体,如 Helvetica, Arial。
  4. 大量留白: 元素之间有充足的间距,界面显得干净、不拥挤。
  5. 内容优先: 设计服务于内容,没有多余的边框、阴影或纹理。
  6. 动态效果: 简单、流畅的悬停和点击效果,如轻微的缩放或颜色变化。

完整的 HTML5 Metro 模板代码

您可以直接将以下代码复制到一个 .html 文件中,然后在浏览器中打开即可看到效果。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">HTML5 Metro 风格模板</title>
    <!-- 引入 Metro 风格的 CSS -->
    <style>
        /* --- 全局样式和变量 --- */
        :root {
            --primary-color: #0078D7; /* Windows 蓝 */
            --secondary-color: #00BCF2; /* 浅蓝 */
            --accent-color-1: #FF6B35; /* 橙色 */
            --accent-color-2: #107C10; /* 绿色 */
            --accent-color-3: #FFD700; /* 黄色 */
            --text-color: #FFFFFF; /* 白色文字 */
            --background-color: #F3F2F1; /* 浅灰背景 */
            --font-family: 'Segoe UI', 'Helvetica Neue', Arial, sans-serif; /* Metro 风格字体 */
        }
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        body {
            font-family: var(--font-family);
            background-color: var(--background-color);
            color: #333; /* 深灰色用于正文 */
            line-height: 1.6;
        }
        /* --- 布局容器 --- */
        .container {
            max-width: 1200px;
            margin: 20px auto;
            padding: 0 15px;
        }
        /* --- 顶部导航栏 --- */
        .metro-header {
            background-color: var(--primary-color);
            color: var(--text-color);
            padding: 15px 0;
            text-align: center;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }
        .metro-header h1 {
            font-weight: 300;
            font-size: 2.5em;
            letter-spacing: 1px;
        }
        /* --- 网格系统 --- */
        .metro-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); /* 响应式网格 */
            gap: 20px; /* 网格间距 */
            margin-top: 30px;
        }
        /* --- Metro 磁贴/方块 --- */
        .metro-tile {
            background-color: var(--secondary-color);
            color: var(--text-color);
            padding: 30px;
            text-align: center;
            border-radius: 8px; /* 轻微圆角,更现代 */
            transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; /* 平滑过渡效果 */
            cursor: pointer;
            text-decoration: none; /* 如果是链接,去掉下划线 */
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            min-height: 200px; /* 统一高度 */
        }
        /* 为不同磁贴设置不同颜色 */
        .metro-tile.tile-1 { background-color: var(--accent-color-1); }
        .metro-tile.tile-2 { background-color: var(--accent-color-2); }
        .metro-tile.tile-3 { background-color: var(--accent-color-3); }
        .metro-tile.tile-4 { background-color: #9C27B0; /* 紫色 */ }
        .metro-tile.tile-5 { background-color: #607D8B; /* 蓝灰色 */ }
        .metro-tile.tile-6 { background-color: #E91E63; /* 粉色 */ }
        /* --- 悬停效果 --- */
        .metro-tile:hover {
            transform: translateY(-5px) scale(1.02); /* 轻微上移和放大 */
            box-shadow: 0 10px 20px rgba(0,0,0,0.2); /* 增加阴影 */
        }
        /* --- 磁贴内容样式 --- */
        .metro-tile h2 {
            font-size: 1.8em;
            font-weight: 400;
            margin-bottom: 10px;
        }
        .metro-tile p {
            font-size: 1em;
            opacity: 0.9;
        }
        .metro-tile .icon {
            font-size: 3em;
            margin-bottom: 15px;
        }
        /* --- 页脚 --- */
        .metro-footer {
            text-align: center;
            margin-top: 50px;
            padding: 20px;
            color: #777;
            font-size: 0.9em;
        }
        /* --- 响应式设计 --- */
        @media (max-width: 768px) {
            .metro-grid {
                grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
                gap: 15px;
            }
            .metro-header h1 {
                font-size: 2em;
            }
        }
        @media (max-width: 480px) {
            .metro-grid {
                grid-template-columns: 1fr; /* 在小屏幕上单列显示 */
            }
        }
    </style>
</head>
<body>
    <!-- 顶部导航栏 -->
    <header class="metro-header">
        <div class="container">
            <h1>Metro 风格界面</h1>
        </div>
    </header>
    <!-- 主要内容区 -->
    <main class="container">
        <div class="metro-grid">
            <!-- 磁贴 1 -->
            <a href="#" class="metro-tile tile-1">
                <div class="icon">📊</div>
                <h2>数据分析</h2>
                <p>查看详细的业务报告和数据洞察</p>
            </a>
            <!-- 磁贴 2 -->
            <a href="#" class="metro-tile tile-2">
                <div class="icon">👥</div>
                <h2>用户管理</h2>
                <p>管理所有账户和权限设置</p>
            </a>
            <!-- 磁贴 3 -->
            <a href="#" class="metro-tile tile-3">
                <div class="icon">📅</div>
                <h2>日历安排</h2>
                <p>查看和安排即将到来的事件</p>
            </a>
            <!-- 磁贴 4 -->
            <a href="#" class="metro-tile tile-4">
                <div class="icon">💬</div>
                <h2>消息中心</h2>
                <p>查看所有通知和系统消息</p>
            </a>
            <!-- 磁贴 5 -->
            <a href="#" class="metro-tile tile-5">
                <div class="icon">⚙️</div>
                <h2>系统设置</h2>
                <p>自定义您的应用程序偏好</p>
            </a>
            <!-- 磁贴 6 -->
            <a href="#" class="metro-tile tile-6">
                <div class="icon">📈</div>
                <h2>项目进度</h2>
                <p>跟踪所有项目的最新状态</p>
            </a>
        </div>
    </main>
    <!-- 页脚 -->
    <footer class="metro-footer">
        <p>&copy; 2025 HTML5 Metro 模板. 保留所有权利.</p>
    </footer>
</body>
</html>

代码结构解析

HTML 结构

  • <!DOCTYPE html>: 标准的 HTML5 文档声明。
  • <head>: 包含元数据、字符集、视口设置和最重要的 CSS 样式
    • <meta name="viewport"...>: 确保在移动设备上正确缩放。
    • <style>: 我们将所有 CSS 代码直接写在这里,便于管理和理解,在实际项目中,你可能会将其拆分为一个 .css 文件。
  • <body>: 页面的可见内容。
    • <header class="metro-header">: 顶部的蓝色标题栏。
    • <main class="container">: 主要内容区的包裹容器,用于居中和限制最大宽度。
    • <div class="metro-grid">: 这是实现网格布局的核心,它将所有磁贴整齐地排列起来。
    • <a class="metro-tile">: 每个可点击的方块都是一个 <a> 标签(链接),并应用了 .metro-tile 样式,我使用了不同的 tile-X 类来为每个磁贴设置独特的背景色。
    • <footer>: 页脚,通常放置版权信息。

CSS 样式

  • root 和 CSS 变量: 我在 root 选择器中定义了 CSS 变量,这样做的好处是,如果你想改变整个主题的颜色(比如从蓝色换成绿色),你只需要修改 root 中的变量值,而无需在代码中寻找并替换每一个颜色代码。
  • .container: 一个常用的类,用于将内容居中并设置最大宽度,避免在大屏幕上内容过宽。
  • .metro-grid:
    • display: grid;: 启用 Grid 布局。
    • grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));: 这是响应式网格的关键。
      • repeat(): 重复创建列。
      • auto-fit: 自动填充可用空间。
      • minmax(250px, 1fr): 每列的最小宽度为 250px,如果空间足够,则所有列平均分配剩余空间 (1fr 代表一个分数单位)。
    • gap: 20px;: 设置网格项之间的间距。
  • .metro-tile:
    • background-color, color: 定义背景和文字颜色。
    • padding, text-align, border-radius: 设置基本外观和布局。
    • transition: 定义了 transformbox-shadow 属性的变化效果,并设置了过渡时间,这样悬停效果才会平滑。
    • cursor: pointer: 鼠标悬停时显示手型光标,提示用户可点击。
  • .metro-tile:hover: 当鼠标悬停在磁贴上时应用的样式。
    • transform: translateY(-5px) scale(1.02);: 将磁贴向上移动 5px 并轻微放大 1.02 倍,产生“浮起”的立体感。
    • box-shadow: ...: 增加一个阴影,进一步增强立体感。
  • @media 查询: 这部分是响应式设计的核心。
    • 当屏幕宽度小于 768px (如平板) 时,减小网格间距和字体大小。
    • 当屏幕宽度小于 480px (如手机) 时,将网格布局改为单列 (grid-template-columns: 1fr;),确保在小屏幕上内容依然可读且易于点击。

如何使用和扩展这个模板

  1. 修改颜色: 只需修改 root 中的 --primary-color, --accent-color-x 等变量。
  2. 添加/删除磁贴: 在 .metro-grid <div> 内部或外部添加或移除 <a class="metro-tile"> 元素,Grid 布局会自动处理排列。
  3. 添加图标: 我使用了 Emoji 作为图标,因为它简单且无需额外依赖,你也可以使用 Font Awesome、Ionicons 或其他图标库,只需将 <div class="icon">📊</div> 替换成 <i class="fas fa-chart-bar"></i> 并引入相应的库即可。
  4. 改变布局: 你可以通过修改 .metro-gridgrid-template-columns 来改变列数。grid-template-columns: repeat(4, 1fr); 会强制创建 4 等分的列。
  5. : 在每个 .metro-tile<h2><p> 标签中填入你自己的标题和描述文字。

这个模板为你提供了一个坚实的基础,你可以根据项目的具体需求进行快速定制和扩展。

html5 metro 模板
(图片来源网络,侵删)