您现在的位置是:网站首页 > <header>-页眉或区块头文章详情

<header>-页眉或区块头

<header> 是 HTML5 中用于定义文档或区块头部的语义化标签。它通常包含标题、导航、LOGO 或其他与页面头部相关的内容。这个标签不仅提升了代码的可读性,还对 SEO 和可访问性有积极影响。

<header> 的基本用法

<header> 标签可以出现在文档的多个位置,不仅限于页面顶部。它可以作为整个页面的页眉,也可以作为某个区块(如 <article><section>)的头部。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>示例网站</title>
</head>
<body>
    <header>
        <h1>网站主标题</h1>
        <nav>
            <ul>
                <li><a href="#">首页</a></li>
                <li><a href="#">产品</a></li>
                <li><a href="#">关于我们</a></li>
            </ul>
        </nav>
    </header>
    
    <main>
        <article>
            <header>
                <h2>文章标题</h2>
                <p>作者:张三 | 发布日期:2023-05-15</p>
            </header>
            <p>这里是文章内容...</p>
        </article>
    </main>
</body>
</html>

<header> 的嵌套规则

<header> 可以包含多种元素,但通常不嵌套另一个 <header><footer>。常见的包含元素包括:

  • 标题标签 (<h1>-<h6>)
  • 导航 (<nav>)
  • 搜索表单
  • Logo 图片
  • 作者信息
  • 发布日期
<header>
    <div class="logo">
        <img src="logo.png" alt="公司Logo">
    </div>
    <h1>公司名称</h1>
    <nav>
        <ul>
            <li><a href="#services">服务</a></li>
            <li><a href="#about">关于</a></li>
            <li><a href="#contact">联系</a></li>
        </ul>
    </nav>
    <form action="/search" method="get">
        <input type="search" name="q" placeholder="搜索...">
        <button type="submit">搜索</button>
    </form>
</header>

<header> 的样式处理

虽然 <header> 是语义化标签,但默认情况下它没有特殊样式。通常需要添加 CSS 来定义其外观:

header {
    background-color: #333;
    color: white;
    padding: 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

header h1 {
    margin: 0;
    font-size: 1.5em;
}

header nav ul {
    display: flex;
    list-style: none;
    margin: 0;
    padding: 0;
}

header nav li {
    margin-left: 20px;
}

header a {
    color: white;
    text-decoration: none;
}

<header> 在响应式设计中的应用

在移动设备上,<header> 的布局可能需要调整。常见的做法是使用媒体查询来改变布局:

@media (max-width: 768px) {
    header {
        flex-direction: column;
        text-align: center;
    }
    
    header nav ul {
        flex-direction: column;
    }
    
    header nav li {
        margin: 10px 0 0 0;
    }
}

<header> 与 ARIA 角色

虽然 <header> 本身具有语义,但在某些情况下可能需要明确其角色:

<header role="banner">
    <!-- 主要内容 -->
</header>

注意:对于文档级 <header>role="banner" 是合适的;而对于区块级 <header>,则不需要添加此角色。

<header> 的 SEO 考虑

搜索引擎会特别关注 <header> 中的内容,尤其是:

  1. 主标题 (<h1>) 应该包含重要的关键词
  2. 导航结构应该清晰
  3. Logo 图片应该包含适当的 alt 文本
<header>
    <a href="/">
        <img src="logo.png" alt="ABC公司 - 专业网站建设服务" width="200" height="60">
    </a>
    <h1>ABC公司 - 专业网站建设与数字营销解决方案</h1>
    <nav aria-label="主导航">
        <ul>
            <li><a href="/services">服务项目</a></li>
            <li><a href="/portfolio">案例展示</a></li>
            <li><a href="/blog">行业资讯</a></li>
        </ul>
    </nav>
</header>

<header> 的常见错误用法

  1. 过度使用:不是每个区块都需要 <header>,只有当内容确实代表头部时才使用
  2. 嵌套错误:避免将 <header> 嵌套在另一个 <header>
  3. 忽略标题:通常 <header> 应该包含至少一个标题元素
  4. 用作装饰:不要仅仅为了样式而使用 <header>

错误示例:

<!-- 错误:嵌套header -->
<header>
    <header>
        <h1>标题</h1>
    </header>
</header>

<!-- 错误:没有标题 -->
<header>
    <div class="banner-image"></div>
</header>

<header><head> 的区别

初学者常混淆这两个概念:

  • <head> 是 HTML 文档的元数据容器,包含 <title><meta><link> 等不可见元素
  • <header> 是文档内容的一部分,包含可见的页面头部内容
<!DOCTYPE html>
<html>
<head>
    <!-- 元数据 -->
    <title>页面标题</title>
    <meta charset="UTF-8">
</head>
<body>
    <header>
        <!-- 可见的页面头部内容 -->
        <h1>网站主标题</h1>
    </header>
</body>
</html>

<header> 的历史演变

在 HTML5 之前,开发者通常使用 <div id="header"> 来创建页面头部。HTML5 引入 <header> 标签后,这种做法已被语义化标签取代:

<!-- HTML4/XHTML 方式 -->
<div id="header">
    <h1>网站标题</h1>
</div>

<!-- HTML5 方式 -->
<header>
    <h1>网站标题</h1>
</header>

<header> 的可访问性最佳实践

  1. 确保 <header> 中的导航有适当的 ARIA 标签
  2. 为 Logo 图片提供有意义的 alt 文本
  3. 保持标题层次结构合理
  4. 确保颜色对比度符合 WCAG 标准
<header>
    <a href="/" aria-label="返回首页">
        <img src="logo.png" alt="XYZ公司" width="120" height="40">
    </a>
    <nav aria-label="主要导航">
        <ul>
            <li><a href="/about" aria-current="page">关于我们</a></li>
            <li><a href="/services">服务</a></li>
        </ul>
    </nav>
    <button id="search-toggle" aria-expanded="false" aria-label="打开搜索">搜索</button>
</header>

<header> 在单页应用(SPA)中的使用

在单页应用中,<header> 通常是静态的,而内容区域动态变化:

<div id="app">
    <header>
        <h1>我的SPA应用</h1>
        <nav>
            <ul>
                <li><a href="#/" data-route="home">首页</a></li>
                <li><a href="#/about" data-route="about">关于</a></li>
            </ul>
        </nav>
    </header>
    <main id="content">
        <!-- 动态内容将在这里渲染 -->
    </main>
</div>

对应的 JavaScript 可能如下:

document.querySelectorAll('[data-route]').forEach(link => {
    link.addEventListener('click', (e) => {
        e.preventDefault();
        const route = e.target.getAttribute('data-route');
        loadContent(route);
    });
});

function loadContent(route) {
    const content = document.getElementById('content');
    // 根据路由加载不同内容
    if(route === 'home') {
        content.innerHTML = '<h2>欢迎来到首页</h2>';
    } else if(route === 'about') {
        content.innerHTML = '<h2>关于我们</h2><p>公司简介...</p>';
    }
}

<header> 与 CSS 框架的集成

使用 Bootstrap 或 Foundation 等 CSS 框架时,<header> 通常与框架的导航组件结合:

<header class="navbar navbar-expand-lg navbar-dark bg-primary">
    <div class="container">
        <a class="navbar-brand" href="#">网站Logo</a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
            <span class="navbar-toggler-icon"></span>
        </button>
        <nav class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav">
                <li class="nav-item">
                    <a class="nav-link active" href="#">首页</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">产品</a></li>
            </ul>
        </nav>
    </div>
</header>

<header> 中的微数据标记

可以使用 schema.org 微数据增强 <header> 的语义:

<header itemscope itemtype="http://schema.org/WPHeader">
    <div itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
        <meta itemprop="name" content="ABC公司">
        <img itemprop="logo" src="logo.png" alt="ABC公司Logo">
    </div>
    <h1 itemprop="headline">最新产品发布</h1>
    <p>发布日期: <time itemprop="datePublished" datetime="2023-05-20">2023年5月20日</time></p>
</header>

<header> 在打印样式中的处理

可以专门为打印媒体调整 <header> 的样式:

@media print {
    header {
        display: flex;
        flex-direction: column;
        border-bottom: 1px solid #000;
    }
    
    header nav {
        display: none;
    }
    
    header::after {
        content: "网址: example.com";
        font-size: 0.8em;
        margin-top: 10px;
    }
}

<header> 的交互效果示例

<header> 添加滚动效果:

<header id="main-header">
    <!-- 内容 -->
</header>

<style>
    #main-header {
        position: fixed;
        top: 0;
        width: 100%;
        transition: all 0.3s ease;
    }
    
    #main-header.scrolled {
        background-color: rgba(0,0,0,0.9);
        padding: 10px 0;
        box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    }
</style>

<script>
    window.addEventListener('scroll', function() {
        const header = document.getElementById('main-header');
        if(window.scrollY > 100) {
            header.classList.add('scrolled');
        } else {
            header.classList.remove('scrolled');
        }
    });
</script>

<header> 中的多语言支持

对于多语言网站,<header> 中的语言切换器可以这样实现:

<header>
    <div class="language-switcher">
        <ul>
            <li><a href="?lang=zh" hreflang="zh" lang="zh">中文</a></li>
            <li><a href="?lang=en" hreflang="en" lang="en">English</a></li>
        </ul>
    </div>
    <!-- 其他内容 -->
</header>

对应的 CSS 可以这样设计:

.language-switcher {
    position: absolute;
    top: 10px;
    right: 10px;
}

.language-switcher ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
}

.language-switcher li {
    margin-left: 10px;
}

.language-switcher a {
    text-decoration: none;
    color: #333;
    font-size: 0.9em;
}

.language-switcher a[aria-current="true"] {
    font-weight: bold;
    text-decoration: underline;
}

我的名片

网名:~川~

岗位:console.log 调试员

坐标:重庆市-九龙坡区

邮箱:cc@qdcc.cn

沙漏人生

站点信息

  • 建站时间:2013/03/16
  • 本站运行
  • 文章数量
  • 总访问量
微信公众号
每次关注
都是向财富自由迈进的一步