CSS 响应式设计(补充)——WEB开发系列36

news2024/9/25 1:25:51

随着移动设备的普及,网页设计的焦点逐渐转向了响应式设计。响应式设计不仅要求网页在各种屏幕尺寸上良好展示,还要适应不同设备的特性。


一、响应式设计之前的灵活布局

在响应式设计流行之前,网页布局通常是固定的或流动的。固定布局使用固定的像素宽度,而流动布局使用相对单位(如百分比)来调整页面的宽度。这些方法在移动设备上表现得并不理想,因为它们没有考虑到屏幕尺寸的多样性。

1.1 固定布局

固定布局的网页使用像素作为宽度单位,这意味着无论屏幕宽度如何,网页的宽度都是固定的。这种布局方式在桌面设备上效果良好,但在小屏幕设备上则可能导致内容溢出或无法正常显示。

示例:固定布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>固定布局示例</title>
    <style>
        .container {
            width: 800px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f0f0f0;
        }
        .content {
            background-color: #ffffff;
            padding: 20px;
            border: 1px solid #ddd;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="content">
            <h1>固定布局示例</h1>
            <p>This is a fixed width layout. The content width remains constant regardless of the screen size.</p>
        </div>
    </div>
</body>
</html>

​.container​​ 类设置了一个固定宽度的容器,无论屏幕的宽度如何,容器的宽度都保持在800px,这会导致在小屏幕设备上出现水平滚动条。

1.2 流动布局

流动布局使用相对单位(如百分比)来设置宽度。这种布局方式可以根据屏幕宽度自动调整内容的尺寸,从而适应不同的屏幕。

示例:流动布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>流动布局示例</title>
    <style>
        .container {
            width: 80%;
            margin: 0 auto;
            padding: 20px;
            background-color: #f0f0f0;
        }
        .content {
            background-color: #ffffff;
            padding: 20px;
            border: 1px solid #ddd;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="content">
            <h1>流动布局示例</h1>
            <p>This is a fluid width layout. The container width adjusts according to the screen size.</p>
        </div>
    </div>
</body>
</html>

​.container​​ 类的宽度设置为80%,使其能够根据屏幕宽度自动调整。虽然这种布局在不同屏幕上表现得更好,但它仍然无法完全适应各种设备。


二、响应式设计

响应式设计旨在创建能够适应各种设备和屏幕尺寸的网页。它通过灵活的网格系统、媒体查询和其他技术来实现页面的自适应布局。

2.1 响应式设计的原则

响应式设计有几个核心原则:

  • 流式布局:使用相对单位(如百分比)来定义布局的宽度。
  • 弹性图片:图片和其他媒体内容应该根据容器的大小自动调整。
  • 媒体查询:通过媒体查询来应用不同的样式规则,以适应不同的屏幕尺寸和设备特性。

2.2 使用媒体查询

媒体查询是响应式设计的关键技术之一,它允许我们根据设备的特性(如屏幕宽度、分辨率等)应用不同的样式规则。通过媒体查询,我们可以为不同的设备和屏幕尺寸定义不同的CSS规则,从而实现更加灵活的布局。

示例:基本的媒体查询
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>媒体查询示例</title>
    <style>
        .container {
            width: 80%;
            margin: 0 auto;
            padding: 20px;
            background-color: #f0f0f0;
        }
        .content {
            background-color: #ffffff;
            padding: 20px;
            border: 1px solid #ddd;
        }

        /* 媒体查询:屏幕宽度小于600px */
        @media (max-width: 600px) {
            .container {
                width: 100%;
                padding: 10px;
            }
            .content {
                padding: 10px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="content">
            <h1>媒体查询示例</h1>
            <p>This layout adjusts based on the screen size. On small screens, the container width is 100% and padding is reduced.</p>
        </div>
    </div>
</body>
</html>

媒体查询用于检测屏幕宽度是否小于600px,如果是,​​.container​​ 的宽度将变为100%,并且内边距将减少。这确保了在小屏幕设备上内容仍然可读。


三、灵活网格

灵活网格系统(也称为栅格系统)是响应式设计的核心组件之一。它允许我们通过定义网格的行和列来创建灵活的布局。

3.1 使用CSS网格布局

CSS网格布局是一种强大的布局工具,允许我们创建复杂的网格布局。通过定义网格的行和列,我们可以轻松地创建响应式布局。

示例:基本的CSS网格布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS网格布局示例</title>
    <style>
        .container {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 20px;
            padding: 20px;
            background-color: #f0f0f0;
        }
        .item {
            background-color: #ffffff;
            padding: 20px;
            border: 1px solid #ddd;
        }

        /* 媒体查询:屏幕宽度小于800px */
        @media (max-width: 800px) {
            .container {
                grid-template-columns: repeat(2, 1fr);
            }
        }

        /* 媒体查询:屏幕宽度小于500px */
        @media (max-width: 500px) {
            .container {
                grid-template-columns: 1fr;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2</div>
        <div class="item">Item 3</div>
        <div class="item">Item 4</div>
        <div class="item">Item 5</div>
    </div>
</body>
</html>

​.container​​ 使用CSS网格布局创建了一个三列的网格,通过媒体查询,我们调整了网格的列数以适应不同的屏幕尺寸。当屏幕宽度小于800px时,列数变为2;当屏幕宽度小于500px时,列数变为1。


3.2 使用Flexbox布局

Flexbox是一种用于创建一维布局的CSS布局模型。它允许我们在水平或垂直方向上对元素进行灵活的排列和对齐。

示例:基本的Flexbox布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox布局示例</title>
    <style>
        .container {
            display: flex;
            flex-wrap: wrap;
            gap: 20px;
            padding: 20px;
            background-color: #f0f0f0;
        }
        .item {
            flex: 1 1 30%;
            background-color: #ffffff;
            padding: 20px;
            border: 1px solid #ddd;
        }

        /* 媒体查询:屏幕宽度小于600px */
        @media (max-width: 600px) {
            .item {
                flex: 1 1 100%;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2</div>
        <div class="item">Item 3</div>
        <div class="item">Item 4</div>
        <div class="item">Item 5</div>
    </div>
</body>
</html>

​.container​​ 使用Flexbox布局创建了一个流式的布局,​​.item​​ 元素在大屏幕上占据约30%的宽度,而在小屏幕上占据100%的宽度。通过 ​​flex-wrap​​ 属性,我们允许子元素换行,从而适应不同的屏幕尺寸。


四、现代布局技术

除了CSS网格布局和Flexbox,现代CSS布局技术还有许多其他有用的工具,如CSS多列布局和CSS变量。它们可以进一步增强响应式设计的灵活性。

4.1 CSS多列布局

CSS多列布局允许我们将内容分成多列,以适应不同的屏幕宽度。

示例:CSS多列布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS多列布局示例</title>
    <style>
        .container {
            column-count: 3;
            column-gap: 20px;
            padding: 20px;
            background-color: #f0f0f0;
        }
        .item {
            background-color: #ffffff;
            padding: 20px;
            border: 1px solid #ddd;
        }

        /* 媒体查询:屏幕宽度小于800px */
        @media (max-width: 800px) {
            .container {
                column-count: 2;
            }
        }

        /* 媒体查询:屏幕宽度小于500px */
        @media (max-width: 500px) {
            .container {
                column-count: 1;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2</div>
        <div class="item">Item 3</div>
        <div class="item">Item 4</div>
        <div class="item">Item 5</div>
    </div>
</body>
</html>

​.container​​ 使用CSS多列布局将内容分成多列,通过媒体查询,我们根据屏幕宽度调整列数,以确保内容在各种设备上都能良好展示。


4.2 CSS变量

CSS变量(或自定义属性)允许我们在CSS中定义可重用的值,并在整个文档中使用它们。这在响应式设计中非常有用,因为我们可以根据不同的屏幕尺寸调整这些变量的值。

示例:使用CSS变量
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS变量示例</title>
    <style>
        :root {
            --container-width: 80%;
            --padding: 20px;
            --bg-color: #f0f0f0;
        }

        .container {
            width: var(--container-width);
            margin: 0 auto;
            padding: var(--padding);
            background-color: var(--bg-color);
        }
        .content {
            background-color: #ffffff;
            padding: var(--padding);
            border: 1px solid #ddd;
        }

        /* 媒体查询:屏幕宽度小于600px */
        @media (max-width: 600px) {
            :root {
                --container-width: 100%;
                --padding: 10px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="content">
            <h1>CSS变量示例</h1>
            <p>This layout adjusts based on the screen size. CSS variables allow us to change values globally with media queries.</p>
        </div>
    </div>
</body>
</html>

我们使用CSS变量定义了一些全局值(如容器宽度和内边距),通过媒体查询,我们可以在不同的屏幕尺寸下调整这些变量的值,从而实现响应式布局。


五、响应式图像

响应式图像是响应式设计的重要组成部分。它们能够根据设备的屏幕尺寸和分辨率调整自身的尺寸,从而提高页面加载速度并改善用户体验。

5.1 使用​​max-width​​属性

使用 ​​max-width​​ 属性可以确保图像不会超出其容器的宽度,从而实现响应式效果。

示例:响应式图像
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>响应式图像示例</title>
    <style>
        .container {
            width: 80%;
            margin: 0 auto;
            padding: 20px;
            background-color: #f0f0f0;
        }
        img {
            max-width: 100%;
            height: auto;
        }
    </style>
</head>
<body>
    <div class="container">
        <img src="example.jpg" alt="示例图片">
    </div>
</body>
</html>

​img​​ 标签使用 ​​max-width: 100%;​​ 确保图像在其容器中自适应缩放,保持其宽度不超过容器的宽度,同时保持高度的自动调整。


5.2 使用​​srcset​​​和​​sizes​​属性

​srcset​​ 和 ​​sizes​​ 属性允许我们为不同的屏幕分辨率和屏幕尺寸提供不同的图像资源,以优化图像加载性能。

示例:使用​​srcset​​​和​​sizes​
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>响应式图像示例</title>
</head>
<body>
    <div class="container">
        <img src="01.jpg" 
             srcset="01.jpg 600w, example-medium.jpg 1200w, example-large.jpg 1800w" 
             sizes="(max-width: 600px) 100vw, (max-width: 1200px) 50vw, 33vw" 
             alt="示例图片">
    </div>
</body>
</html>

​srcset​​ 属性提供了不同分辨率的图像源,而 ​​sizes​​ 属性定义了在不同视口宽度下使用的图像尺寸。这样可以根据设备的屏幕特性选择合适的图像,从而优化加载性能和显示效果。


六、响应式排版

响应式排版确保文本在不同设备上可读且美观。这涉及到字体大小、行高和文本对齐等方面的调整。

6.1 使用相对单位

使用相对单位(如 ​​em​​ 和 ​​rem​​)来定义字体大小和行高可以使文本在不同屏幕尺寸下保持良好的可读性。

示例:响应式排版
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>响应式排版示例</title>
    <style>
        body {
            font-size: 16px;
            line-height: 1.5;
            margin: 0;
            padding: 0;
            background-color: #f0f0f0;
        }
        h1 {
            font-size: 2rem;
        }
        p {
            font-size: 1rem;
            margin-bottom: 1em;
        }

        /* 媒体查询:屏幕宽度小于600px */
        @media (max-width: 600px) {
            body {
                font-size: 14px;
            }
            h1 {
                font-size: 1.5rem;
            }
            p {
                font-size: 0.875rem;
            }
        }
    </style>
</head>
<body>
    <h1>响应式排版示例</h1>
    <p>This text adjusts based on the screen size. Using relative units allows text to scale properly on different devices.</p>
</body>
</html>

​body​​ 元素使用了 ​​rem​​ 单位来定义字体大小,使其能够根据屏幕宽度进行调整。通过媒体查询,我们在小屏幕设备上减少了字体大小,以确保文本在不同设备上保持良好的可读性。


七、视口元标签

视口元标签用于控制网页在移动设备上的显示方式。它允许我们设置视口的宽度和缩放级别,从而确保页面在不同设备上能够正确渲染。

7.1 基本视口设置

设置视口宽度为设备宽度,可以确保页面在移动设备上按照预期显示。

示例:视口元标签
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>视口元标签示例</title>
</head>
<body>
    <h1>视口元标签示例</h1>
    <p>This page uses the viewport meta tag to control the layout on mobile devices. The content will be properly scaled and displayed on various screen sizes.</p>
</body>
</html>

视口元标签设置了 ​​width=device-width​​ 和 ​​initial-scale=1.0​​,确保页面在移动设备上使用设备宽度,并初始缩放级别为1。这是响应式设计的基本设置。


如有表述错误及欠缺之处敬请指正补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vc-upload源码分析 -- ant-design-vue系列

vc-upload源码分析 – ant-design-vue系列 1 整体结构 上传组件的使用分两种&#xff1a;点击上传和拖拽上传。 点击的是组件或者是卡片&#xff0c;这个是用户通过插槽传递的。除上传外的其他功能&#xff0c;比如预览、自定义文件渲染等功能&#xff0c;也不是上传的核心功…

2. 变量和指令(omron 机器自动化控制器)——1

机器自动化控制器——第二章 变量和指令 1 2-1 变量一览表MC通用变量轴变量▶ 轴组变量 运动控制指令的输入变量输入变量的有效范围▶ 枚举体一览表 运动控制指令的输出变量运动控制指令的输入输出变量 2-1 变量一览表 MC功能模块使用的变量分为两类。 一类是监视轴等的状态及…

【SQL】百题计划:SQL对于空值的比较判断。

[SQL]百题计划 方法&#xff1a; 使用 <> (!) 和 IS NULL [Accepted] 想法 有的人也许会非常直观地想到如下解法。 SELECT name FROM customer WHERE referee_Id <> 2;然而&#xff0c;这个查询只会返回一个结果&#xff1a;Zach&#xff0c;尽管事实上有 4 个…

关于使用HAWQ量化框架执行训练前推理的性能崩溃问题

问题描述 今天debug量化模型遇到一个比较奇怪的问题&#xff0c;之前从来没有注意过&#xff1a; 现在量化模型的流程是&#xff1a; 1&#xff09;加载预训练好的浮点数权重模型&#xff1b; 2&#xff09;将模型架构替换成量化架构&#xff08;逐模块替换&#xff09;&#…

Linux和C语言(Day11)

一、学习内容 讲解有参函数 形参 和 实参 形参——定义时的参数&#xff0c;形式上的参数&#xff0c;没有实际意义&#xff0c;语法上必须带有数据类型 void fun(int a,int b); void fun(int a[],int n); void fun(char *s); 可以是&#xff1a;变量、数组、指针 实参——调用…

【笔记】物理化学绪论

文章目录 1. 物理化学的目的和研究内容什么是物理化学&#xff1f;目的内容 2. 物理化学的学习方法3. 物理量的表示和运算&#xff08;1&#xff09;物理量的表示&#xff08;2&#xff09;量值计算 4. 课程安排 1. 物理化学的目的和研究内容 用物理变化 P、V、T热效应电效应…

【数据结构】排序算法系列——序言(附源码+图解)

作为基础算法的中流砥柱部分&#xff0c;排序算法一直都是计算机学习者们不可忽略的一部分。而其中的算法思想也蕴含着许多在今后的算法学习甚至是整个计算机技术的学习之中仍然熠熠生辉的算法思想&#xff0c;它们引领着我们不断探索算法的奥秘之处。所以&#xff0c;学习排序…

黑神话悟空大圣残躯怎么打 头目大圣残躯攻略

​面对《黑神话&#xff1a;悟空》中的终极挑战——大圣残躯&#xff0c;掌握其打法要点&#xff0c;是通往胜利的关键。下面&#xff0c;就让我们一步步解析如何战胜这位强大的最终BOSS吧。 一、BOSS位置 随主线流程必解锁。击败石猿后&#xff0c;齐天大圣的真身——大圣残躯…

IIC通信中设备的交互流程

本文主要叙述&#xff0c;当两个设备进行 IIC 通信时&#xff0c;两个设备的交互流程&#xff0c;即主机的动作和从机的动作。当通过软件编程的方式实现设备间的 IIC 通信时&#xff0c;我们就是按照主机的动作或从机的动作来编写对应的代码。实际上&#xff0c;主机和从机是按…

小怡分享之栈和队列

前言&#xff1a; &#x1f308;✨前面小怡给大家分享了顺序表和链表&#xff0c;今天小怡给大家分享一下栈和队列。 1.栈 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#x…

聚焦:clicOH 借助 NVIDIA cuOpt 实现最后一英里交付速度 20 倍提升

受消费者行为转变和疫情影响&#xff0c;电子商务继续呈爆炸式增长和转型。因此&#xff0c;物流和运输公司发现自己处于包裹配送革命的前沿。这新的现实情况在最后一英里配送中尤为明显&#xff0c;而后者现在已经成为供应链物流中成本最高的要素&#xff0c;占从零售到制造等…

Learn ComputeShader 13 Adding a mesh to each particle

这次要给每个粒子加上网格。 添加的网格只是一个简单的四边形&#xff0c;它需要分成两个三角形。并且三角形的顶点必须按照顺时针排列&#xff0c;同时每个顶点都应该有UV信息。 所以接下来就要添加顶点结构体以及相关的compute buffer struct Vertex{public Vector3 positi…

大数据新视界 --大数据大厂之 Spark 性能优化秘籍:从配置到代码实践

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

数据结构————栈的讲解(超详细!!!)

1 栈的概念和结构 1.1 栈的概念 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作&#xff0c;进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵循后进先出&#xff08;先进后出&#xff09;原则。特性与栈的…

杂七杂八-必备软件下载

必备软件下载 学术软件工作软件tips软件 仅个人笔记使用&#xff0c;后续持续更新&#xff0c;感谢点赞关注 学术软件 幕布&#xff1a;记录各种笔记&#xff0c;文本和思维导图快捷互换边界AIchat&#xff1a;集成了多个最新大模型工具&#xff0c;功能丰富&#xff0c;推荐使…

html加载页面

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>算数模一体化</title> </head><b…

GPT-4论文阅读

GPT-4 Technical Report论文阅读 文章目录 GPT-4 Technical Report论文阅读 Abstract训练的稳定性Training processPredictable scaling训练的稳定性多么难能可贵 Capabilities考试成绩传统的benchmark语言方面的能力Visual inputsSteerability LimitationsRisks & mitigat…

初识Linux · 进程(2)

目录 前言&#xff1a; 有关进程的相关理解 前言&#xff1a; 本文会开始慢慢切入进程了&#xff0c;当然&#xff0c;切入进程之前&#xff0c;我们需要再次复习一下操作系统&#xff0c;后面接着是介绍什么是进程&#xff0c;如何查看进程&#xff0c;在Linux中对应的文件…

你真的了解电阻吗

电阻通常有下面几种表示符号。 我们用的最多的还是定值电阻。 ESP32参考设计原理图用的是折线。 GD32中参考设计原理图用的是小方框。 包括我们画原理图的时候用的基本也是小方框。 折线符号属于ANSI&#xff08;美国标准&#xff09;矩形符号属于DIN标准&#xff08;德国工业…

Linux基本

一、安装 &#xff08;一&#xff09;bios basic input / output system cpu虚拟化技术需要开启 intel amd 不同品牌进入bios快捷键不一样 &#xff08;二&#xff09;vmware 新建 配置硬件 硬盘 建议单个虚拟硬盘文件&#xff0c;比较好管理 r如果有转移的需求&#xff…