构建响应式网站知识点大全(二)

简介: 教程来源 https://dnuhf.cn/ 本文系统讲解响应式Web开发核心技巧:涵盖弹性图片(max-width、srcset、picture)、流体字体(rem/vw/clamp)、多模式导航(汉堡菜单、下拉/底部切换)等实战方案,兼顾兼容性与现代特性,助力构建高性能自适应网页。

四、响应式图片

4.1 弹性图片

/* 基础弹性图片 */
img {
    max-width: 100%;
    height: auto;
}

/* 背景图片响应式 */
.hero {
    background-image: url('hero-mobile.jpg');
    background-size: cover;
    background-position: center;
}

@media (min-width: 768px) {
    .hero {
        background-image: url('hero-desktop.jpg');
    }
}

4.2 srcset 属性

<!-- 基于设备像素比 -->
<img src="image-1x.jpg" 
     srcset="image-1x.jpg 1x, image-2x.jpg 2x, image-3x.jpg 3x" 
     alt="响应式图片">

<!-- 基于宽度描述符 -->
<img src="image-small.jpg" 
     srcset="image-small.jpg 480w,
             image-medium.jpg 768w,
             image-large.jpg 1200w"
     sizes="(max-width: 480px) 100vw,
            (max-width: 768px) 90vw,
            1200px"
     alt="响应式图片">

4.3 picture 元素

<!-- 根据媒体条件切换图片 -->
<picture>
    <source media="(min-width: 1200px)" srcset="image-large.jpg">
    <source media="(min-width: 768px)" srcset="image-medium.jpg">
    <source media="(min-width: 480px)" srcset="image-small.jpg">
    <img src="image-default.jpg" alt="响应式图片">
</picture>

<!-- 根据格式支持切换 -->
<picture>
    <source type="image/webp" srcset="image.webp">
    <source type="image/avif" srcset="image.avif">
    <img src="image.jpg" alt="图片">
</picture>

<!-- 组合使用:格式 + 尺寸 -->
<picture>
    <source type="image/webp" 
            srcset="image-large.webp 1200w,
                    image-medium.webp 768w,
                    image-small.webp 480w"
            sizes="(max-width: 480px) 100vw,
                   (max-width: 768px) 90vw,
                   1200px">
    <img src="image.jpg" alt="图片">
</picture>

4.4 图片懒加载

<!-- 原生懒加载 -->
<img src="image.jpg" loading="lazy" alt="懒加载图片">
<iframe src="video.html" loading="lazy"></iframe>

<!-- 自定义懒加载实现 -->
<img data-src="image.jpg" class="lazy" alt="懒加载图片">
<script>
    const lazyImages = document.querySelectorAll('.lazy');

    const imageObserver = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const img = entry.target;
                img.src = img.dataset.src;
                img.classList.remove('lazy');
                imageObserver.unobserve(img);
            }
        });
    });

    lazyImages.forEach(img => imageObserver.observe(img));
</script>

五、响应式字体

5.1 相对单位

/* em - 相对于父元素字体大小 */
.parent {
    font-size: 16px;
}
.child {
    font-size: 1.5em;  /* 24px */
    margin: 1em;       /* 24px */
}

/* rem - 相对于根元素字体大小 */
html {
    font-size: 16px;
}
.element {
    font-size: 1rem;   /* 16px */
    margin: 2rem;      /* 32px */
}

/* vw/vh - 相对于视口 */
h1 {
    font-size: 5vw;    /* 视口宽度的5% */
}
.hero {
    height: 100vh;     /* 视口高度的100% */
}

/* 响应式字体组合 */
html {
    font-size: 16px;
}

@media (min-width: 768px) {
    html {
        font-size: 18px;
    }
}

@media (min-width: 1200px) {
    html {
        font-size: 20px;
    }
}

/* 使用 clamp() 实现流体字体 */
h1 {
    font-size: clamp(24px, 5vw, 48px);
    /* 最小24px,理想5vw,最大48px */
}

p {
    font-size: clamp(14px, 3vw, 18px);
}

5.2 视口单位详解

/* 视口单位 */
.element {
    width: 100vw;      /* 视口宽度的100% */
    height: 100vh;     /* 视口高度的100% */
    min-height: 100vh; /* 常用于全屏布局 */
}

/* 动态视口单位(现代浏览器) */
.element {
    width: 100dvw;     /* 动态视口宽度(考虑地址栏) */
    height: 100dvh;    /* 动态视口高度 */
    width: 100svw;     /* 小视口宽度 */
    width: 100lvw;     /* 大视口宽度 */
}

/* 视口最小/最大单位 */
.element {
    width: 100vmin;    /* 视口宽度和高度的最小值 */
    height: 100vmax;   /* 视口宽度和高度的最大值 */
}

5.3 字体缩放策略

/* 移动优先字体方案 */
body {
    font-size: 14px;
    line-height: 1.5;
}

h1 {
    font-size: 1.5rem;   /* 21px */
    margin: 0.5em 0;
}

h2 {
    font-size: 1.25rem;  /* 17.5px */
}

@media (min-width: 768px) {
    body {
        font-size: 16px;
    }

    h1 {
        font-size: 2rem;    /* 32px */
    }

    h2 {
        font-size: 1.5rem;  /* 24px */
    }
}

/* 使用 clamp 实现流体字体系统 */
:root {
    --font-xs: clamp(10px, 2vw, 12px);
    --font-sm: clamp(12px, 3vw, 14px);
    --font-base: clamp(14px, 4vw, 16px);
    --font-lg: clamp(16px, 5vw, 18px);
    --font-xl: clamp(18px, 6vw, 20px);
    --font-2xl: clamp(20px, 7vw, 24px);
    --font-3xl: clamp(24px, 8vw, 32px);
    --font-4xl: clamp(32px, 10vw, 48px);
}

body {
    font-size: var(--font-base);
}

六、响应式导航

6.1 汉堡菜单

<!DOCTYPE html>
<html>
<head>
<style>
/* 基础样式 */
.nav {
    background: #333;
    position: relative;
}

.nav-container {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 1rem;
    max-width: 1200px;
    margin: 0 auto;
}

.logo {
    color: white;
    font-size: 1.5rem;
    text-decoration: none;
}

.nav-toggle {
    display: none;
    background: none;
    border: none;
    cursor: pointer;
}

.nav-toggle span {
    display: block;
    width: 25px;
    height: 3px;
    background: white;
    margin: 5px 0;
    transition: 0.3s;
}

.nav-menu {
    display: flex;
    gap: 2rem;
    list-style: none;
    margin: 0;
    padding: 0;
}

.nav-menu a {
    color: white;
    text-decoration: none;
    padding: 0.5rem 1rem;
}

/* 移动端样式 */
@media (max-width: 768px) {
    .nav-toggle {
        display: block;
    }

    .nav-menu {
        display: none;
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        background: #333;
        flex-direction: column;
        gap: 0;
        padding: 1rem 0;
    }

    .nav-menu.active {
        display: flex;
    }

    .nav-menu li {
        text-align: center;
    }

    .nav-menu a {
        display: block;
        padding: 1rem;
    }

    /* 汉堡菜单动画 */
    .nav-toggle.active span:nth-child(1) {
        transform: rotate(45deg) translate(5px, 5px);
    }

    .nav-toggle.active span:nth-child(2) {
        opacity: 0;
    }

    .nav-toggle.active span:nth-child(3) {
        transform: rotate(-45deg) translate(7px, -6px);
    }
}
</style>
</head>
<body>
    <nav class="nav">
        <div class="nav-container">
            <a href="/" class="logo">Logo</a>
            <button class="nav-toggle" id="navToggle">
                <span></span>
                <span></span>
                <span></span>
            </button>
            <ul class="nav-menu" id="navMenu">
                <li><a href="/">首页</a></li>
                <li><a href="/about">关于</a></li>
                <li><a href="/services">服务</a></li>
                <li><a href="/contact">联系</a></li>
            </ul>
        </div>
    </nav>

    <script>
        const navToggle = document.getElementById('navToggle');
        const navMenu = document.getElementById('navMenu');

        navToggle.addEventListener('click', () => {
            navToggle.classList.toggle('active');
            navMenu.classList.toggle('active');
        });
    </script>
</body>
</html>

6.2 响应式导航模式

/* 模式1:水平导航变垂直 */
.horizontal-nav {
    display: flex;
    justify-content: center;
    gap: 2rem;
}

@media (max-width: 768px) {
    .horizontal-nav {
        flex-direction: column;
        align-items: center;
        gap: 1rem;
    }
}

/* 模式2:下拉菜单 */
.dropdown {
    position: relative;
}

.dropdown-menu {
    position: absolute;
    top: 100%;
    left: 0;
    background: white;
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);
    min-width: 200px;
    display: none;
}

.dropdown:hover .dropdown-menu {
    display: block;
}

@media (max-width: 768px) {
    .dropdown-menu {
        position: static;
        box-shadow: none;
        padding-left: 20px;
    }
}

/* 模式3:顶部导航变底部导航 */
@media (max-width: 768px) {
    .bottom-nav {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        background: white;
        box-shadow: 0 -2px 10px rgba(0,0,0,0.1);
        display: flex;
        justify-content: space-around;
        padding: 10px;
    }

    .main-content {
        padding-bottom: 70px;
    }
}

来源:
https://dnuhf.cn/

相关文章
|
8天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
11068 95
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
8天前
|
人工智能 IDE API
2026年国内 Codex 安装教程和使用教程:GPT-5.4 完整指南
Codex已进化为AI编程智能体,不仅能补全代码,更能理解项目、自动重构、执行任务。本文详解国内安装、GPT-5.4接入、cc-switch中转配置及实战开发流程,助你从零掌握“描述需求→AI实现”的新一代工程范式。(239字)
5032 131
|
5天前
|
人工智能 自然语言处理 供应链
【最新】阿里云ClawHub Skill扫描:3万个AI Agent技能中的安全度量
阿里云扫描3万+AI Skill,发现AI检测引擎可识别80%+威胁,远高于传统引擎。
1359 3
|
6天前
|
人工智能 并行计算 Linux
本地私有化AI助手搭建指南:Ollama+Qwen3.5-27B+OpenClaw阿里云/本地部署流程
本文提供的全流程方案,从Ollama安装、Qwen3.5-27B部署,到OpenClaw全平台安装与模型对接,再到RTX 4090专属优化,覆盖了搭建过程的每一个关键环节,所有代码命令可直接复制执行。使用过程中,建议优先使用本地模型保障隐私,按需切换云端模型补充功能,同时注重显卡温度与显存占用监控,确保系统稳定运行。
1732 5
|
14天前
|
人工智能 JavaScript API
解放双手!OpenClaw Agent Browser全攻略(阿里云+本地部署+免费API+网页自动化场景落地)
“让AI聊聊天、写代码不难,难的是让它自己打开网页、填表单、查数据”——2026年,无数OpenClaw用户被这个痛点困扰。参考文章直击核心:当AI只能“纸上谈兵”,无法实际操控浏览器,就永远成不了真正的“数字员工”。而Agent Browser技能的出现,彻底打破了这一壁垒——它给OpenClaw装上“上网的手和眼睛”,让AI能像真人一样打开网页、点击按钮、填写表单、提取数据,24小时不间断完成网页自动化任务。
2912 6

热门文章

最新文章