《CSS 简易速速上手小册》第3章:CSS 响应式设计(2024 最新版)

在这里插入图片描述

文章目录

  • 3.1 媒体查询基础:网页的智能眼镜
    • 3.1.1 基础知识
    • 3.1.2 重点案例:适应三种设备的响应式布局
    • 3.1.3 拓展案例 1:改变字体大小
    • 3.1.4 拓展案例 2:暗模式适配
  • 3.2 响应式图片和视频:让内容自由呼吸
    • 3.2.1 基础知识
    • 3.2.2 重点案例:响应式图片画廊
    • 3.2.3 拓展案例 1:使用 `<picture>` 元素适配暗模式
    • 3.2.4 拓展案例 2:创建响应式视频
  • 3.3 移动优先与桌面优先策略:瑜伽大师的两种姿态
    • 3.3.1 基础知识
    • 3.3.2 重点案例:从移动到桌面的响应式博客布局
    • 3.3.3 拓展案例 1:移动优先的导航菜单
    • 3.3.4 拓展案例 2:响应式图片展示

3.1 媒体查询基础:网页的智能眼镜

在数字世界的时尚秀上,网页需要能够自如地切换它们的“服装”,以适应各种屏幕尺寸和环境。这就是媒体查询(Media Queries)发挥作用的地方,它们就像是网页的智能眼镜,帮助网页观察和适应周围的环境。通过使用媒体查询,我们可以为不同的屏幕尺寸、方向、分辨率等条件定义不同的CSS规则。

3.1.1 基础知识

  • 媒体类型:包括 allprintscreen 等,分别适用于所有设备、打印机和屏幕设备。
  • 媒体特性:例如 widthheightorientation(方向)等,用于描述媒体的特定特性。
  • 媒体查询语法:媒体查询允许我们根据媒体类型和一个或多个媒体特性的值来应用CSS规则。例如:@media (min-width: 600px) { ... } 表示屏幕宽度至少为600像素时应用的规则。

3.1.2 重点案例:适应三种设备的响应式布局

假设你正在设计一个简单的响应式布局,需要适应手机、平板和桌面三种不同的屏幕尺寸。

  • HTML 结构
<div class="container"><header>头部</header><main>主要内容</main><aside>侧边栏</aside><footer>页脚</footer>
</div>
  • CSS 样式
.container {display: grid;grid-template-columns: 1fr;gap: 10px;
}@media (min-width: 600px) {.container {grid-template-columns: 2fr 1fr;}
}@media (min-width: 1000px) {.container {grid-template-columns: 3fr 1fr;}
}

在这个案例中,我们使用了媒体查询来调整网格布局的列数,以适应不同的屏幕宽度。在宽度至少为600像素的屏幕上,布局变为两列;在宽度至少为1000像素的屏幕上,布局变为三列加上侧边栏。

3.1.3 拓展案例 1:改变字体大小

为了提高在小屏设备上的可读性,我们可能需要在屏幕尺寸较小的设备上减小字体大小。

  • CSS 样式
body {font-size: 16px;
}@media (max-width: 600px) {body {font-size: 14px;}
}

通过设置一个最大宽度为600像素的媒体查询,我们减小了小屏设备上的字体大小,使内容更易于阅读。

3.1.4 拓展案例 2:暗模式适配

许多用户喜欢在低光环境中使用暗模式,我们可以使用媒体查询来为这些用户提供更舒适的视觉体验。

  • CSS 样式
@media (prefers-color-scheme: dark) {body {background-color: #333;color: #fff;}
}

这个媒体查询检查用户的系统是否设置为暗模式,并相应地调整网页的背景颜色和文字颜色。

通过这些案例,我们可以看到媒体查询如何使得创建响应式网站变得简单而直观。无论是适应不同的设备尺寸、调整字体大小还是适配暗模式,媒体查询都是实现这些目标的强大工具。继绀实践和探索媒体查询的可能性,让你的网站在任何环境下都能完美展现。

在这里插入图片描述


3.2 响应式图片和视频:让内容自由呼吸

在响应式设计的舞台上,图片和视频是那些需要特别关照的明星。如果处理得当,它们可以在任何尺寸的屏幕上都展现出最佳状态,为用户带来视觉上的享受。让我们探索如何让这些内容元素在响应式网页设计中“自由呼吸”,无论是在宽敞的桌面显示器上,还是在紧凑的手机屏幕上。

3.2.1 基础知识

  • 使用 srcsetsizes 属性:HTML5 引入了 srcset 属性,让我们可以为 <img> 标签指定一系列的图片资源,浏览器会根据屏幕条件选择最合适的一张。sizes 属性则允许我们定义一系列的媒体条件(如屏幕宽度),并为每一条件指定一个图片大小。
  • 使用 <picture> 元素<picture> 元素允许更多的灵活性,通过包含零个或多个 <source> 元素以及一个 <img> 元素作为回退,可以根据不同的条件(包括媒体查询)来指定不同的图片资源。
  • 响应式视频:视频也可以是响应式的,通常通过设置视频容器的宽度为100%,高度自动调整来实现。

3.2.2 重点案例:响应式图片画廊

假设你需要创建一个图片画廊,其中的图片需要根据访问者的屏幕尺寸加载不同分辨率的图片。

  • HTML 结构
<img src="example-small.jpg"srcset="example-small.jpg 500w, example-medium.jpg 1000w, example-large.jpg 1500w"sizes="(max-width: 600px) 500px, (max-width: 900px) 1000px, 1500px"alt="示例图片">

在这个案例中,srcset 属性定义了三种不同宽度的图片资源,而 sizes 属性则根据屏幕宽度的不同条件来指定使用哪个资源。这样,浏览器会选择最适合当前屏幕尺寸的图片来显示。

3.2.3 拓展案例 1:使用 <picture> 元素适配暗模式

当网站支持暗模式时,我们可能希望根据用户的偏好显示不同风格的图片。

  • HTML 结构
<picture><source media="(prefers-color-scheme: dark)" srcset="example-dark.jpg"><source media="(prefers-color-scheme: light)" srcset="example-light.jpg"><img src="example-light.jpg" alt="在不支持 source 元素的浏览器中显示">
</picture>

使用 <picture><source> 元素,我们可以根据系统的颜色方案偏好来加载不同的图片,从而提升用户体验。

3.2.4 拓展案例 2:创建响应式视频

为了确保视频内容也能在不同设备上良好展示,我们需要使视频容器具有响应性。

  • HTML + CSS
<div class="responsive-video"><iframe src="https://www.youtube.com/embed/dQw4w9WgXcQ" frameborder="0" allowfullscreen></iframe>
</div>
.responsive-video {position: relative;padding-bottom: 56.25%; /* 16:9 比例 */height: 0;overflow: hidden;
}.responsive-video iframe {position: absolute;top: 0;left: 0;width: 100%;height: 100%;
}

通过创建一个包装器 div 并使用上述 CSS 规则,我们可以让视频自适应容器的宽度,同时保持正确的宽高比,确保视频在任何设备上都能完美播放。

通过这些案例,我们学会了如何使图片和视频在响应式网页设计中自由呼吸,确保它们在不同设备上都能以最佳状态展现。掌握了这些技巧后,你就能为你的网站访问者提供一个无论在哪种设备上都能享受的美好视觉体验。继续探索和实验吧,让你的内容在数字世界中自由呼吸!

在这里插入图片描述


3.3 移动优先与桌面优先策略:瑜伽大师的两种姿态

在响应式设计的世界里,“移动优先” 和 “桌面优先” 是两种常见的开发策略,它们就像瑜伽大师在展示不同姿态时的两种起始点。选择哪一种,取决于你的目标受众、内容策略以及设计理念。

3.3.1 基础知识

  • 移动优先(Mobile First):这种策略是从最小的屏幕尺寸(通常是手机)开始设计和开发,然后逐渐添加更多的特性和布局来适应更大的屏幕。它强调内容的优先级和核心功能,确保所有用户都能获得最优质的体验。
  • 桌面优先(Desktop First):相反,这种策略是从桌面尺寸的屏幕开始设计,然后通过逐步减少内容和布局复杂度来适应更小的屏幕。这种方法适合内容丰富、功能复杂的网站。
  • 断点(Breakpoints):无论采用哪种策略,断点都是关键概念。断点是在媒体查询中定义的,用于在不同屏幕尺寸下改变布局和样式。

3.3.2 重点案例:从移动到桌面的响应式博客布局

假设你正在设计一个博客网站,希望它在手机、平板和桌面上都能提供优秀的阅读体验。

  • HTML 结构
<div class="blog"><header>博客头部</header><main>博客文章</main><aside>侧边栏</aside><footer>页脚</footer>
</div>
  • CSS 样式
.blog {display: grid;grid-template-columns: 1fr;gap: 10px;
}@media (min-width: 600px) {.blog {grid-template-columns: 3fr 1fr;}
}@media (min-width: 1000px) {.blog {grid-template-columns: 4fr 1fr;grid-template-areas:"header header""main aside""footer footer";}
}

从移动优先的角度出发,我们首先为手机屏幕设计了一个单列布局。随后通过媒体查询逐步为平板和桌面屏幕引入更复杂的多列布局。

3.3.3 拓展案例 1:移动优先的导航菜单

对于导航菜单,移动优先的方法通常涉及到一个折叠式菜单,它在桌面上展开为水平菜单。

  • HTML 结构
<nav class="mobile-first-nav"><ul><li><a href="#">首页</a></li><li><a href="#">文章</a></li><li><a href="#">关于</a></li></ul>
</nav>
  • CSS 样式
.mobile-first-nav ul {list-style: none;padding: 0;margin: 0;display: flex;flex-direction: column;
}@media (min-width: 600px) {.mobile-first-nav ul {flex-direction: row;}
}

这个例子展示了如何使用移动优先策略来创建一个适应不同屏幕尺寸的导航菜单。

3.3.4 拓展案例 2:响应式图片展示

针对不同设备,展示不同尺寸的图片也是响应式设计的一部分。

  • HTML 结构
<img src="small.jpg"srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 1500w"sizes="(max-width: 600px) 500px, (max-width: 900px) 1000px, 1500px"alt="示例图片">

利用 srcsetsizes 属性,我们可以根据屏幕宽度为用户提供最合适的图片大小,从而优化加载时间和视觉体验。

通过这些案例,我们可以看到,无论是移动优先还是桌面优先策略,关键在于理解目标用户和内容优先级,以及如何利用CSS的强大功能来适应不同设备。这样的策略让我们的网站不仅仅能够在任何设备上工作,而且能够为每个用户提供最佳的体验。继续实践这些技巧,让你的网站成为真正的响应式瑜伽大师!

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

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

相关文章

数据分析基础之《pandas(7)—高级处理2》

四、合并 如果数据由多张表组成&#xff0c;那么有时候需要将不同的内容合并在一起分析 1、先回忆下numpy中如何合并 水平拼接 np.hstack() 竖直拼接 np.vstack() 两个都能实现 np.concatenate((a, b), axis) 2、pd.concat([data1, data2], axis1) 按照行或者列…

猜猜谁是凶手?

目录 一、题目二、思路三、完整代码 一、题目 日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff1a;C在胡说 已知3个人说了…

List stream的9种常用功能

1、List 转List List llla Arrays.asList(“1”,“2”).stream().map(Long::parseLong).collect(Collectors.toList()); 2、List转类型List、List、List //&#xff08;1&#xff09;、List中的String属性转List List userNameList list.stream().map(UserInfo::getUserName…

Linux系统基础 03 IP地址虚拟网络、Linux软件包管理、ssh服务、apache服务和samba服务的简单搭建

文章目录 一、IP地址虚拟网络二、Linux软件包管理1、rpm包管理器2、yum包管理器3、源码安装 三、ssh服务四、apache服务五、samba服务 一、IP地址虚拟网络 1、IP地址格式是点分十进制&#xff0c;例&#xff1a;172.16.45.10。即4段8位二进制 2、IP地址分为网络位和主机位。网…

杨辉三角的变形(数学)

题目 import java.util.Scanner;public class Main {public static void main(String[] args) { // 1 // 1 1 1 // 1 2 3 2 1 // 1 3 6 7 6 3 1 // 1 4 10 16 19 16 10 4 1Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] res new int[n1][2*n];for(i…

94 . 二叉树的中序遍历 -- 2024.2.10 LeetCode每日一题

链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路 : 采取递归的方式&#xff0c;中序遍历的顺序是左中右&#xff0c;然后模拟即可; 代码 class Solution { public:void transfer(TreeNode* cur , vector<int>& vec){if(cur …

【Linux】构建模块

&#x1f525;博客主页&#xff1a;PannLZ &#x1f38b;系列专栏&#xff1a;《Linux系统之路》 &#x1f94a;不要让自己再留有遗憾&#xff0c;加油吧&#xff01; 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…

Spring Boot 笔记 005 环境搭建

1.1 创建数据库和表&#xff08;略&#xff09; 2.1 创建Maven工程 2.2 补齐resource文件夹和application.yml文件 2.3 porn.xml中引入web,mybatis,mysql等依赖 2.3.1 引入springboot parent 2.3.2 删除junit 依赖--不能删&#xff0c;删了会报错 2.3.3 引入spring web依赖…

【十四】【C++】list 的常见用法

list 的初始化和遍历 /*list的初始化和遍历*/ #if 1 #include <list> #include <vector> #include <iostream> #include<algorithm> using namespace std;void TestList1(){list<int> L1;list<int> L2(10, 5);vector<int> v{1,2,3,4…

IP地址详解

IP地址是互联网协议&#xff08;Internet Protocol&#xff09;用于标识并定位网络中主机&#xff08;如计算机、服务器、路由器等&#xff09;的一串数字。它是一个32位的二进制数&#xff0c;通常以四个数字&#xff08;每个数字范围为0-255&#xff09;的形式显示&#xff0…

Linux之umask的使用

一、umask的作用 umask值用于设置用户在创建新文件和目录时的默认权限。umask值一共有4组数字&#xff0c;其中第1组数字用于定义特殊权限&#xff0c;一般不关心&#xff0c;日常工作中大家用的更多的是后面三组数字。以下图为例&#xff0c;输入“umask”命令之后&#xff0c…

音视频/流媒体协议和编码汇总

一、流媒体协议 1. RTMP/RTMPT/RTMPS/RTMPE 等多变种 是应用层协议&#xff0c;使用TCP作为底层传输协议&#xff0c;并提供了低延迟、高带宽利用率和实时性的特点。 (1)RTMP协议是Adobe的私有协议,未完全公开 (2)一般传输的是 flv&#xff0c;f4v 格式流 2. RTP/RTCP/SRTP …

Maven进阶

一、分模块开发与设计 1. 分模块开发的意义 问题导入 分模块开发对工程有什么好处&#xff1f; 模块拆分原则 目的&#xff1a;项目的扩展性变强了&#xff0c;方便其他项目引用相同的功能。 将原始模块按照功能拆分成若干个子模块&#xff0c;方便模块间的相互调用&#…

AI新工具(20240210) Osam - Osam是一个启用本地运行的开源llm;Whishper - Whishper是一个开源的语音工具

Osam - Osam是一个启用本地运行的开源“一切分割”模型工具&#xff0c;支持多种接口和自定义视觉模型。 Osam是一个开源工具&#xff0c;它允许本地运行“可对任何内容进行分割”的模型(Segment-Anything Models)&#xff0c;灵感来源于Ollama。使用Osam&#xff0c;用户可以…

Lua Global环境

Lua的全局变量实际上是用environment这个表来存储所有的全局变量&#xff0c;其优点就是简化了lua的内部实现&#xff0c;而且还能像其他类型的表一样去操作这个全局表。 _G Lua将environment本身存储在全局变量_G中&#xff0c;其中_G._G _G。如若感兴趣&#xff0c;可以直…

每日OJ题_位运算③_力扣面试题 01.01. 判定字符是否唯一

目录 力扣面试题 01.01. 判定字符是否唯一 解析代码 力扣面试题 01.01. 判定字符是否唯一 面试题 01.01. 判定字符是否唯一 难度 简单 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s "leetcode" 输出: f…

Open CASCADE学习|2个TCL命令转C++

1、torus aTorus 10 2 该命令的实现代码为&#xff1a; static Standard_Integer anasurface (Draw_Interpretor& ,Standard_Integer n, const char** a) {if (n < 2) return 1;gp_Ax3 loc; ​Standard_Integer i; ​if (n < 5) {loc gp_Ax3(gp_Pnt(0,0,0),gp_Di…

结构体的大小以及内存对齐问题

结构体的大小怎么计算&#xff1f;什么是结构体的对齐&#xff1f; 首先想要直到结构体的大小需要先了解结构体的内存对齐。那么&#xff0c;什么是结构体的内存对齐&#xff1a; 什么是结构体内存对齐 结构体的对齐 就是 结构体类型数据在内存中按照一定的对齐规律储存。结…

【深度学习:MPT-30B】提高开源基础模型的标准

【深度学习&#xff1a;MPT-30B】提高开源基础模型的标准 MPT-30B家族MPT-30B (Base)MPT-30B-InstructMPT-30B-Chat使用 MosaicML Inference 部署 MPT-30B 模型通过 MosaicML 培训定制 MPT-30BLLM Foundry 下一步是什么&#xff1f; 附录致谢数据MPT-30B 8k 上下文窗口微调数据…

Shell之sed

sed是什么 Linux sed 命令是利用脚本来处理文本文件。 可依照脚本的指令来处理、编辑文本文件。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 sed命令详解 语法 sed [-hnV][-e <script>][-f<script文件>][文本文件] sed [-nefr] [动作…