响应式布局学习笔记

news/2025/3/15 21:55:10/

什么是响应式布局?

响应式布局(Responsive Web Design)是一种网页设计方法,使网站能够根据设备屏幕尺寸(如手机、平板、电脑)自动调整内容和布局,提供最佳浏览体验。

如何调试响应式布局?

  1. 浏览器按F12打开开发者工具

  2. 点击开发者工具右上角的这个图标

  3. 之后便可以在上方调整页面大小并检查自己的页面了

核心实现技术

1. 视口设置

在HTML文件中添加以下<meta>标签,确保页面根据设备宽度缩放:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

这个语句目的是告诉浏览器视口的宽度应该等于设备的屏幕宽度,确保内容能正确显示。

2. 媒体查询

通过CSS媒体查询针对不同屏幕尺寸应用不同样式:

/* 默认样式(移动优先) */
.container {padding: 10px;
}/* 平板(≥768px) */
@media (min-width: 768px) {.container {padding: 20px;}
}/* 桌面(≥1200px) */
@media (min-width: 1200px) {.container {max-width: 1140px;margin: 0 auto;}
}

​ 也就是说当屏幕大小小于768px时会应用第一个样式,而宽度大于768小于1200px则会应用第二个样式,大于1200px就用第三个。

​ 此外,也可以使用PC优先的写法:

/* 默认样式(PC优先) */
.container {max-width: 1140px;margin: 0 auto;
}/* 平板(≤1200px) */
@media (max-width: 1200px) {.container {padding: 20px;}
}/* 手机(≤768px) */
@media (max-width: 768px) {.container {padding: 10px;}
}

断点应如何选择呢:

这是常用响应式布局库bootstrap的方法,一般我们也可以通过这个标准来设定

3. Flex弹性布局(Flexbox)

详细教程可以看:Flex 布局语法教程 | 菜鸟教程

Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为Flex布局。

例如:

.container {display: flex;flex-wrap: wrap; /* 允许换行 */gap: 20px;
}.item {flex: 1 1 300px; /* 基础宽度300px,可伸缩 */
}

可让每个item元素根据屏幕大小自适应调整大小,从而适应不同的设备。

4. 网格布局(CSS Grid)

好看的教程:CSS Grid 网格布局教程 - 阮一峰的网络日志

还有:CSS 网格布局 | 菜鸟教程

​ 可以通过网格布局让各个元素整齐排列在网页之中。

​ 网格布在布局将网页分成一个个网格,通过排布元素在网格中的大小与位置,我们可以轻松实现如下的效果:

在这里插入图片描述

创建自适应网格系统:

.grid-container {display: grid;grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));gap: 1rem;
}

实用小技巧

相对单位

绝对长度单位

​ 像素,或 px,是 CSS 中最常见的长度单位之一,一般指屏幕上一个像素点的大小。

​ 在 CSS 中,1 像素被定义为 1/96 英寸。所有其他的绝对长度单位都是基于这个像素的定义。

相对长度单位

rem

REMCSS3新增的单位。rem单位都是相对于根元素html的font-size来决定大小的,根元素的font-size相当于提供了一个基准。要想实现响应式布局,只需要改变font-size的值,那么以rem为固定单位的元素的大小也会发生响应的变化。 因此,如果通过rem来实现响应式的布局,只需要根据视图容器的大小,动态的改变font-size即可。

em 的区别

  • em:相对于父元素的字体大小
  • rem:始终相对于根元素(也就是HTML元素)的字体大小

示例:用rem实现响应式

<!DOCTYPE html>
<html lang="zh-CN">
<!--- 浏览器默认16px 62.5%就是10px --->
<head><meta name="viewport" content="width=device-width, initial-scale=1.0"><style>* {margin: 0;padding: 0;box-sizing: border-box;}.container {max-width: 120rem;margin: 0 auto;padding: 2rem;}.card {background: #f0f0f0;padding: 2.4rem;border-radius: 0.8rem;margin-bottom: 1.6rem;}h2 {font-size: 2.4rem;margin-bottom: 1.2rem;}p {font-size: 1.6rem;line-height: 1.5;}html {font-size: 62.5%;  /* 因为浏览器默认字体为16px,所以此处 1rem = 10px */}@media (max-width: 768px) {html {font-size: 50%; /* 1rem = 8px */}.container {padding: 1rem;}}</style>
</head>
<body><div class="container"><div class="card"><h2>响应式标题</h2><p>这是一个使用 rem 单位实现的响应式文本示例</p></div></div>
</body>
</html>

vh/vw

vhvw也是css3中新增的单位,他们分别是相对于视窗的高与视窗的宽设定的,1vh相当于视窗高的1%,相应的1vw相当于视窗宽的1%,此外还有vminvmax两个单位,分表示vh和vw中的最小值和最大值。

示例flex与vh/vw联合实现响应式布局

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta name="viewport" content="width=device-width, initial-scale=1.0"><style>* {margin: 0;padding: 0;box-sizing: border-box;}.fullscreen-banner {width: 100vw;height: 100vh;display: flex;justify-content: center;align-items: center;}.content {width: min(90vw, 800px);padding: 5vh 3vw;background: #f0f0f0;border-radius: 1rem;}h1 {font-size: clamp(2rem, 5vw, 3.5rem);margin-bottom: 3vh;}p {font-size: clamp(1rem, 2vw, 1.2rem);line-height: 1.6;}@media (max-width: 768px) {.content {padding: 3vh 5vw;}}</style>
</head>
<body><section class="fullscreen-banner"><div class="content"><h1>响应式视窗单位示例</h1><p>这个元素会根据视口尺寸自动调整大小和间距</p></div></section>
</body>
</html>

响应式图片

srcset属性

srcset属性为图片的源提供替代路径,下面的例子中,宽度大于1200px时会用large.jpg来替代,宽度大于768px会用medium.jpg替代

size属性的内容是指:如果视口宽度小于或等于768像素,图片将占据100%的视口宽度(100vw);否则,图片将占据50%的视口宽度(50vw)。

<img src="small.jpg" srcset="large.jpg 1200w, medium.jpg 768w"sizes="(max-width: 768px) 100vw, 50vw"alt="示例图片"
>

总结

​ 要想实现响应式布局,我们要尽量综合应用上述方案,例如使用rem调整字体大小和元素宽度,用grid实现元素分部,再加上媒体查询等作为基础,来完成多设备适配,让网页兼具美观性与舒适性。

参考文章

  1. 前端响应式布局原理与方案(详细版)

  2. 前端实现响应式布局的几种方法_前端响应式布局-CSDN博客

  3. CSS 单位指南:CSS em、rem、vh、vw 等详解

  4. Flex 布局语法教程 | 菜鸟教程

  5. 前端笔记:媒体查询和响应式布局_媒体查询响应式布局-CSDN博客


http://www.ppmy.cn/news/1573093.html

相关文章

JavaEE基础 Tomcat与Http (下)

目录 1.HTTP 协议 1.1 HTTP 协议概念 1.2. 无状态协议 1.3. HTTP1.0 和 HTTP1.1 1.4 请求协议和响应协议 ​编辑 1.5 请求协议 1.5.1 常见的请求协议 1.5.2 GET 请求 1.5.3 POST请求 1.5.4 响应协议 1.HTTP 协议 Http浏览器访问东西都是遵循的Http协议。 1.1 HTTP 协议…

关于Node.js前端面试的试题概念、工作原理及实际应用

文章目录 1. 什么是Node.js&#xff1f;2. Node.js是如何工作的&#xff1f;3. Node.js与其他流行的框架相比有何优势&#xff1f;4. Node.js如何克服I/O操作阻塞的问题&#xff1f;5. 为什么Node.js是单线程的&#xff1f;6. 如果Node.js是单线程的&#xff0c;那么它是如何处…

深度学习(1)-简单神经网络示例

我们来看一个神经网络的具体实例&#xff1a;使用Python的Keras库来学习手写数字分类。在这个例子中&#xff0c;我们要解决的问题是&#xff0c;将手写数字的灰度图像&#xff08;28像素28像素&#xff09;划分到10个类别中&#xff08;从0到9&#xff09;​。我们将使用MNIST…

IP 路由基础 | 路由条目生成 / 路由表内信息获取

注&#xff1a;本文为 “IP 路由” 相关文章合辑。 未整理去重。 IP 路由基础 秦同学学学已于 2022-04-09 18:44:20 修改 一. IP 路由产生背景 我们都知道 IP 地址可以标识网络中的一个节点&#xff0c;并且每个 IP 地址都有自己的网段&#xff0c;各个网段并不相同&#xf…

NPM如何更换淘宝镜像——Node.js国内镜像配置教程

在国内使用 npm 安装 Node.js 包时&#xff0c;由于网络环境的原因&#xff0c;下载速度可能非常慢。为了解决这个问题&#xff0c;很多开发者会选择使用淘宝镜像&#xff08;现在由 npmmirror.com 维护&#xff09;。本文将带你一步一步完成更换 npm 源为淘宝镜像的配置&#…

【架构设计】详解高可用架构

架构设计的愿景就是高可用、高性能、高扩展、高效率。为了实现架构设计四高愿景&#xff0c;需要实现自动化系统目标&#xff1a; 标准化。 流程自助化。 可视化&#xff1a;可观测系统各项指标、包括全链路跟踪。 自动化&#xff1a;ci/cd 自动化部署。 精细化&#xff1a…

Whisper+T5-translate实现python实时语音翻译

1.首先下载模型&#xff0c;加载模型 import torch import numpy as np import webrtcvad import pyaudio import queue import threading from datetime import datetime from faster_whisper import WhisperModel from transformers import AutoTokenizer, AutoModelForSeq2…

github用户名密码登陆失效了

问题&#xff1a; git push突然推代码需要登陆&#xff0c;但是用户名和密码正确输入后&#xff0c;却提示403 git push# Username for https://github.com: **** #Password for https://gyp-programmergithub.com: #remote: Permission to gyp-programmer/my-app.git denie…