CSS 响应式设计(补充)——WEB开发系列36
随着移动设备的普及,网页设计的焦点逐渐转向了响应式设计。响应式设计不仅要求网页在各种屏幕尺寸上良好展示,还要适应不同设备的特性。
一、响应式设计之前的灵活布局
在响应式设计流行之前,网页布局通常是固定的或流动的。固定布局使用固定的像素宽度,而流动布局使用相对单位(如百分比)来调整页面的宽度。这些方法在移动设备上表现得并不理想,因为它们没有考虑到屏幕尺寸的多样性。
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。这是响应式设计的基本设置。
如有表述错误及欠缺之处敬请指正补充。
相关文章:

CSS 响应式设计(补充)——WEB开发系列36
随着移动设备的普及,网页设计的焦点逐渐转向了响应式设计。响应式设计不仅要求网页在各种屏幕尺寸上良好展示,还要适应不同设备的特性。 一、响应式设计之前的灵活布局 在响应式设计流行之前,网页布局通常是固定的或流动的。固定布局使用固定…...

Qt常用控件——QDateTimeEdit
文章目录 QDateTimeEdit核心属性及信号时间计算器 QDateTimeEdit核心属性及信号 QDateEdit作为日期的微调框QTimeEdit作为时间的微调框QDateTimeEdit作为时间日期的微调框 它们的使用方式都是类似的,本篇以QDateTimeEdit作为示例 核心属性: 属性说明…...

什么是上拉,下拉?
上拉就是将引脚通过一个电阻连接到电源,作用:1.使IO口的不确定电平稳定在高点平,2、为了增加IO口拉电流的能力。 下拉就是将引脚通过一个电阻与GND相连,作用:1.从器件输出电流 2.当IO口为输入状态时,引脚的…...

76-mysql的聚集索引和非聚集索引区别
MySQL中的聚集索引和非聚集索引的主要区别在于它们的存储方式和使用方式。 聚集索引(Clustered Index): 聚集索引的叶子页包含了行的全部数据。 每个表只能有一个聚集索引,因为一个表中的数据只能按照一种方式存储。 当你查询的…...

每日一题——第八十八题
题目:输入一个9位的无符号整数,判断其是否有重复数字 #include<stdio.h> #include<stdbool.h> #include<string.h> int main() {char num_str[10];printf("请输入一个9位数的无符号数:");scanf_s("%9d&quo…...

【创作活动】学习使用哪个编程工具让你的工作效率翻倍?
学习使用哪个编程工具让你的工作效率翻倍? 在日益繁忙的工作环境中,选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度,甚至让团队协作更加顺畅。那么,哪款编程…...

基于STM32C8T6的CubeMX:HAL库点亮LED
三个可能的问题和解决方法: 大家完成之后回来看,每一种改错误都是一种成长,不要畏惧,要快乐,积极面对,要耐心对待 STMCuBeMX新建项目的两种匪夷所思的问题https://mp.csdn.net/mp_blog/creation/editor/1…...

职业院校数据科学与大数据技术专业人工智能实训室建设方案
一、引言 随着人工智能(AI)技术的迅猛发展,其在全球范围内的应用日益广泛,从智能交通、环境保护到公共安全、智能家居等多个领域均展现出巨大的潜力。然而,我国在人工智能领域的人才储备仍显不足,这已成为…...

JavaScript网页设计案例分析
JavaScript网页设计案例分析 随着互联网技术的发展,JavaScript 已经成为现代网页设计中不可或缺的一部分。从简单的页面交互到复杂的应用程序开发,JavaScript 都发挥着至关重要的作用。本文将探讨几个运用 JavaScript 进行网页设计的经典案例࿰…...

2024.9.15周报
一、题目信息 题目:Physics-informed neural networks for solving flow problems modeled by the 2D Shallow Water Equations without labeled data 链接:物理信息神经网络用于解决由二维浅水方程建模的流动问题,无需标记数据- ScienceDi…...

QT模型视图结构1
文章目录 Qt 模型视图结构概述(一)1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图结构概述(一) 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据,视图组件显示模型中的数据,在视图组件里修改的数据会…...

Ubuntu20+Noetic+cartographer_ros编译部署
1 准备工作 (1)准备Ubuntu20系统。 (2)安装ROS系统,参考 https://blog.csdn.net/weixin_46123033/article/details/139527141(3)Cartographer相关软件包和源码下载: https://gitee.com/mrwan…...

linux-L3-linux 复制文件
linux 中要将文件file1.txt复制到目录dir中,可以使用以下命令 cp file1.txt dir/复制文件 cp /path/to/source/file /path/to/destination移动 mv /path/to/source/file /path/to/destination复制文件夹内的文件 cp -a /path/to/source/file /path/to/destinati…...

Kotlin:1.9.0 的新特性
一、概述 Kotlin 1.9.0版本英语官方文档 Kotlin 1.9.0 中文官方文档 The Kotlin 1.9.0 release is out and the K2 compiler for the JVM is now in Beta. Additionally, here are some of the main highlights: Kotlin 1.9.0版本已经发布,用于JVM的K2编译器现在…...

golang实现从服务器下载文件到本地指定目录
一、连接服务器,采用sftp连接模式 package middlewaresimport ("fmt""time""github.com/pkg/sftp""golang.org/x/crypto/ssh" )// 建立服务器连接 func Connect(user, password, host string, port int) (*sftp.Client, e…...

C++数据结构-树的概念及分类介绍(基础篇)
1.什么是树 树是数据结构中的一种,其属于非线性数据结构结构的一种,我们前文所提到的数据结构多数都是线性的,这也是较为简单的数据结构,而接下来的树与图均属于非线性数据结构,也是概念极多的一类。 树是由结点或顶…...

职场 Death Note
场景一 测试:哎,怎么会这样呢?时间没到,他怎么就变成这个样子了呢?一副大惊小怪,整个办公室都是他的声音 开发:对对对,我代码问题,别BB了。 你直接说这个地方不对&#…...

Vue3.0组合式API:computed计算属性、watch监听器、watchEffect高级监听器
1、computed() 计算属性 在模板中绑定表达式只能用于简单的运算。如果运算比较复杂,可以使用 Vue.js 提供的计算属性,通过计算属性可以处理比较复杂的逻辑。 1.1 计算属性的应用 通过计算属性可以实现各种复杂的逻辑,包括运算、函数调用等…...

RAII 与 std::lock_guard 在 C++ 中的应用:自动化互斥锁管理与线程安全
目录 1. RAII(资源获取即初始化)概述 RAII 的优点 2. std::lock_guard 的工作原理 2.1 构造函数 2.2 析构函数 2.3 关键特性 3. 为什么 std::lock_guard 能自动管理锁的生命周期 3.1 RAII 原则的应用 3.2 异常安全 3.3 简化代码和减少错误 4.…...

风格汇:奢华风格在UI设计中如何被定义的。
在UI设计中,奢华风格通常指的是一种高端、豪华、精致的设计风格,旨在营造出奢华、豪华的视觉效果,给用户带来高品质、高档次的感受。 奢华风格的UI设计通常会运用一些富丽堂皇的元素和效果,例如金色、银色、贵族紫、华丽的字体、华…...

Vue2 qrcode+html2canvas 实现二维码的生成和保存
1.安装 npm install qrcode npm install html2canvas 2.引用 import QRCode from qrcode import html2canvas from html2canvas 效果: 1. 二维码生成: 下载二维码图片: 二维码的内容: 实现代码: <template>…...

GEE 教程:利用Google Dynamic数据进行逐月指定区域的土地分类数据提取分析
目录 简介 数据 代码 结果 简介 利用Google Dynamic数据进行逐月指定区域的土地分类数据提取分析 数据 Google Dynamic数据是指由Google自动生成、自动更新的数据,它不需要人工干预,而是通过算法和机器学习技术从各种来源获取并解析数据。这些数据可以是来自互联网上的…...

Nginx 负载均衡:优化网站性能与可扩展性的利器
在当今高流量的互联网时代,网站的性能和可扩展性成为了衡量其成功与否的关键因素之一。随着用户量的不断增加,单一服务器往往难以承受巨大的访问压力,这时就需要引入负载均衡技术来分散请求,提高系统的整体性能和可靠性。Nginx&am…...

【Python基础】Python错误和异常处理(详细实例)
本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、Python中的错误类型三、Python异常处理机制3.1 try-except语句3.2 try-except-else语句3.3 try-fi…...

如何查看串口被哪个程序占用?截止目前最方便的方法
痛点:串口因为某种原因被占用,如何找到罪魁祸首? 做开发的小伙伴们,经常会遇到这样的问题:串口因为某种原因被占用,导致无法通讯,但是又找不到被哪个程序占用。只有重启电脑,才能解…...

深入理解SpringBoot(一)----SpringBoot的启动流程分析
1、SpringApplication 对象实例化 SpringApplication 文件 public static ConfigurableApplicationContext run(Object[] sources, String[] args) {// 传递的source其实就是类Bootstrapreturn new SpringApplication(sources).run(args);// 实例化一个SpringApplication对象执…...

MySql基础-单表操作
1. MYSQL概述 1.1 数据模型 关系型数据库 关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: 使用表存储数据,格式统一,便于维护 使用SQL语言操作,标准统一&…...

【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载
基于STM32设计的SD卡数据读取与上位机显示系统 演示视频: 基于STM32设计的SD卡数据读取与上位机显示系统 简介:本研究的主要目的是基于STM32F103微控制器,设计一个能够读取SD卡数据并显示到上位机的系统。SD卡的数据扇区读取不仅是为了验证存…...

SpringBoot开发——整合Redis
文章目录 1、创建项目,添加Redis依赖2、创建实体类Student3、创建Controller4、配置application.yml5、整合完成 Redis ( Remote Dictionary Server )是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值(…...

OpenCV结构分析与形状描述符(17)判断轮廓是否为凸多边形的函数isContourConvex()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 测试轮廓的凸性。 该函数测试输入的轮廓是否为凸的。轮廓必须是简单的,即没有自相交。否则,函数的输出是不确定的。 cv:…...