移动端布局 ---- 学习分享

响应式布局实现方法
主流的实现方案有两种:
  1. 通过rem \ vw/vh \ 等单位,实现在不同设备上显示相同比例进而实现适配.

  2. 响应式布局,通过媒体查询@media 实现一套HTML配合多套CSS实现适配.

在学习移动端适配之前,还需要学习移动端适配原理:

移动端适配原理(Viewport)
了解VSCode中自动生成的head标签中的viewport

viewport 可以翻译为视区. 是指浏览器用来显示网页的区域,它决定了网页在用户设备上的显示效果.

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
  • width=device-width: 将视口的宽度设置为设备的宽度。这确保网页内容不会被缩放,而是按照设备的实际宽度进行布局;

  • initial-scale=1.0: 设置初始的缩放级别为 1.0。这也有助于确保网页在加载时以原始大小显示,而不是被缩小或放大;

  • minimum-scale=1.0: 最小缩放比例为 1;

  • maximum-scale=1.0: 最大缩放比例为 1;

  • user-scalable=no:不允许用户缩放。

rem
在响应式网页与移动端布局时,使用rem而不是px

CSS 中最常用最基础的单位是 px 像素(Pixel),px 是相对于想时期屏幕分辨率而言的。在移动端常用到的是 rem,通过使用 rem 单位,可以相对于根元素的字体大小来定义布局和元素的尺寸,从而使网页更灵活地适应不同的屏幕尺寸。

rem 是一个倍数单位,它是基于 html 标签中的 font-size 属性值的倍数。

只要我们在不同的设备上设置一个合适的初始值,当设备发生变化 font-size 就会自动等比适配大小,从而在不同的设备上表现统一。

使用rem来动态调整页面示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* html {font-size: 20px;} */
​.box-px {width: 300px;height: 100px;background-color: blueviolet;margin-bottom: 50px;}
​.box-rem {width: 5rem;height: 3rem;background-color: aqua;}</style>
</head>
<body><div class="box-px"></div><div class="box-rem"></div><script>//根据设备宽度计算HTML标签的font-size的属性值function resetHTMLFontSize() {document.documentElement.style.fontSize = screen.width / 10 + 'px';}resetHTMLFontSize();
​// 绑定事件window.onresize = resetHTMLFontSize;</script>
</body>
</html>

选择使用什么字体单位主要由你的项目来决定,如果你的用户群都是用最新版的浏览器,那推荐 rem;如果需要考虑兼容性,那就使用 px 或者两者同时使用。

比如,如果只需要适配少部分手机设备,且分辨率对页面影响不大的,使用 px 即可; 对于需要适配各种移动设备,且分辨率差别比较大的设备,比如 iphone 与平板,使用 rem

对于不支持它的浏览器,应对方法也简单,就是多写一个绝对单位的声明。这些浏览器会忽略用 rem 设定的字体大小,比如:

p {font-size: 14px;font-size: .875rem;
}
Flex布局(弹性盒子布局)

Flex 布局(弹性盒子布局)是一种用于在容器中进行布局的模型,它使得容器的子元素能够以弹性的方式排列,可以配合 rem 处理尺寸以适应不同屏幕尺寸和设备。

Flex 布局在前端开发中得到了广泛的应用,因为它提供了一种相对简单而强大的布局方式。任何一个容器都可以指定为 Flex 布局,符合响应式设计的特点。

.box {display: flex;
}

设为 Flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。

采用 Flex 布局的元素,称为 Flex 容器(flex container)。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),如下图:

其中 flex 容器默认存在两根轴:水平的主轴(main axis)垂直的交叉轴(cross axis)

主轴的开始位置(与边框的交叉点)叫做 main start,结束位置叫做 main end

交叉轴的开始位置叫做 cross start,结束位置叫做 cross end。项目默认沿主轴排列。

单个项目占据的主轴空间叫做 main size,占据的交叉轴空间叫做 cross size

flex 布局主要是设置 flex 容器的对齐方式和 flex 项目的大小形态,上图中的四个概念十分重要。

Flex 容器属性

给容器设置 display: flex;后,可以为其添加以下 6 个容器属性:

  • flex-direction

  • flex-wrap

  • flex-flowflex-direction 属性和 flex-wrap 属性的简写形式

  • justify-content

  • align-items

  • align-content

  1. flex-direction:决定主轴的方向(即项目的排列方向)

属性值作用
row(默认值)主轴为水平方向,起点在左端(项目从左往右排列)
row-reverse主轴为水平方向,起点在右端(项目从右往左排列)
column主轴为垂直方向,起点在上沿(项目从上往下排列)
column-reverse主轴为垂直方向,起点在下沿(项目从下往上排列)
  1. flex-wrap:默认情况下,项目都排列在一条轴线上,如果一条轴线排不下的换行方式

属性值作用
nowrap(默认)不换行(列)
wrap主轴为横向时:从上到下换行;主轴为纵向时:从左到右换列
wrap-reverse主轴为横向时:从下到上换行;主轴为纵向时:从右到左换列
  1. justify-content:定义了项目在主轴上的对齐方式

属性值作用
flex-start(默认)与主轴的起点对齐
flex-end与主轴的终点对齐
center与主轴的中点对齐
space-between两端对齐主轴的起点与终点
space-around每个项目两侧的间隔相同.醒目之间的间隔比项目与边框的间隔大一倍
  1. align-items 属性定义项目在交叉轴上如何对齐

属性值作用
flex-start交叉轴的起点对齐
flex-end交叉轴的终点对齐
center交叉轴的中点对齐
baseline项目的第一行文字的基线对齐
stretch(默认值)如果项目未设置高度或社会ayto,项目将占满整个容器的高度
  1. align-content属性定义了多根轴线的对齐方式.如果项目只有一个轴线,该属性不起作用

属性值作用
flex-start与交叉轴的起点对齐
flex-end与交叉轴的终点对齐
center与交叉轴的中点对齐
space-between与交叉轴两端对齐,轴线之间的间隔平均分布
space-around每根轴线两侧的间隔都相等,轴线之间的间隔比轴线与边框的间隔大一倍
stretch(默认值)主轴线占满整个交叉轴

Flex 项目属性

上面所讲的容器属性都是用来设置项目的排列方式,而项目自身的大小和形态需要设置项目的属性,以下 5 个属性设置在项目上:

  • order

  • flex-grow

  • flex-shrink

  • flex

  • align-self

  1. order:默认情况下,项目的排列先后顺序是按照 DOM 结构中出现的先后顺序显示的,而 order 属性定义项目的排列顺序。数值越小,排列越靠前,默认为 0,代码如下

.item {order: 1;
}
  1. flex-grow 属性定义项目的放大比例,默认为 0,即如果存在剩余空间,也不放大,代码如下:

.item {flex-grow: 1; /* default 0 */
}
  1. flex-shrink 属性定义了项目的缩小比例,默认为 1,即如果空间不足,该项目将缩小,代码如下:

.item {flex-shrink: 3; /* default 1 */
}
  1. flex 属性是 flex-growflex-shrinkflex-basis 的简写,默认值为 0 1 auto(默认缩小但不放大)。后两个属性可选。代码如下:v

.item {flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
  1. align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch。

.item {align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

理解 flex 布局,主要要理解容器和项目两个概念,给容器设置属性用来决定容器中的项目如何排列,如主轴方向、是否换行、主轴和交叉轴的对齐方式等,可以理解为宏观的设定。而给项目设置属性用来决定项目的大小形态顺序,可以理解为微观的设定。

练习Flex示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flex 弹性盒子 练习</title><style>html {font-size: 10px;}.container {display: flex;height: 40rem;background-color: aqua;/* flex-direction: row-reverse; *//* flex-wrap: wrap; *//* justify-content: center; */align-items: center;}.item {width: 20rem;font-size: 8rem;}</style>
</head>
<body><div class="container"><div class="item" style="background-color: yellowgreen;">1</div><div class="item" style="background-color: red;">2</div><div class="item" style="background-color: gray;">3</div><div class="item" style="background-color: gold;">4</div><div class="item" style="background-color: brown;">5</div><div class="item" style="background-color: #4aa;">6</div></div>
</body>
</html>

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

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

相关文章

【大数据2025】Hadoop 万字讲解

文章目录 一、大数据通识大数据诞生背景与基本概念大数据技术定义与特征大数据生态架构概述数据存储数据计算与易用性框架分布式协调服务和任务调度组件数仓架构流处理架构 二、HDFSHDFS 原理总结一、系统架构二、存储机制三、数据写入流程四、心跳机制与集群管理 安全模式&…

彻底讲清楚 单体架构、集群架构、分布式架构及扩展架构

目录 什么是系统架构 单体架构 介绍 示例图 优点 缺点 集群架构 介绍 示意图 优点 缺点 分布式架构 示意图 优点 缺点 生态扩展 介绍 示意图 优点 缺点 扩展&#xff1a;分布式服务解析 纵切拆服务 全链路追踪能力 循环依赖 全链路日志&#xff08;En…

Typora + PowerShell 在终端打开文件

最近在用 Hexo 搭我人生中的第一个博客&#xff0c;Hexo 新建帖子的时候需要在终端用命令hexo n&#xff0c;然后再用 Typora 打开&#xff0c;用鼠标感觉很麻烦&#xff0c;因此直接用终端一键启动了。 发现 Typora 的一个 bug&#x1f41b;&#xff0c;在 YAML 后面写第一个字…

【RAG落地利器】向量数据库Qdrant使用教程

TrustRAG项目地址&#x1f31f;&#xff1a;https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 环境依赖 本教程基于docker安装Qdrant数据库&#xff0c;在此之前请先安装docker. Docker - The easiest way to use Qdrant is to run a pre-built Docker i…

设计模式-单例模式

定义 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 类图 类型 饿汉式 线程安全&#xff0c;调用效率高&#xff0c;但是不能延迟加载。 public class HungrySingleton {private static final HungrySingleton instancenew HungrySingleton();private …

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…

OpenHarmony 4.1 SDK11 北向应用开发笔记

目录 声明 1、开启其他应用 2、延时切换页面 3、设置页面切换效果 4、设置背景图片和背景铺满屏幕 5、设置隐藏状态和导航条 6、设置组件大小和对齐方式 7、设置按钮类型改变按钮边框圆角半径 8、常用布局方式 9、布局技巧 声明 本笔记基于OpenHarmony 4.1 SDK11&am…

leetcode707-设计链表

leetcode 707 思路 本题也是用了虚拟头节点来进行解答&#xff0c;这样的好处是&#xff0c;不管是头节点还是中间的节点都可以当成是中间节点来处理&#xff0c;用同一套方法就可以进行处理&#xff0c;而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐&#xff0c;但如何将其转换为易于分享和打印的 PDF 格式&#xff0c;是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法&#xff0c;并探讨…

汽车网络信息安全-ISO/SAE 21434解析(上)

目录 概述 第四章-概述 1. 研究对象和范围 2. 风险管理 第五章-组织级网络安全管理 1. 网络安全治理&#xff08;cybersecurity governance&#xff09; 2. 网络安全文化&#xff08;cybersecurity culture) 3. 信息共享&#xff08;Information Sharing) 4. 管理体系…

计算机网络 (50)两类密码体制

前言 计算机网络中的两类密码体制主要包括对称密钥密码体制&#xff08;也称为私钥密码体制、对称密码体制&#xff09;和公钥密码体制&#xff08;也称为非对称密码体制、公开密钥加密技术&#xff09;。 一、对称密钥密码体制 定义&#xff1a; 对称密钥密码体制是一种传…

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…

消息队列实战指南:三大MQ 与 Kafka 适用场景全解析

前言&#xff1a;在当今数字化时代&#xff0c;分布式系统和大数据处理变得愈发普遍&#xff0c;消息队列作为其中的关键组件&#xff0c;承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品&#xff0…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测

OpenCV中边缘检测四种常用算子&#xff1a; &#xff08;1&#xff09;Sobel算子 Sobel算子是一种基于梯度的边缘检测算法。它通过对图像进行卷积操作来计算图像的梯度&#xff0c;并将梯度的大小作为边缘的强度。它使用两个3x3的卷积核&#xff0c;分别用于计…

C语言编程笔记:文件处理的艺术

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、为什么要用文件二、文件的分…

头歌答案--爬虫实战

目录 urllib 爬虫? 第1关&#xff1a;urllib基础 任务描述 第2关&#xff1a;urllib进阶? 任务描述 requests 爬虫 第1关&#xff1a;requests 基础 任务描述 第2关&#xff1a;requests 进阶 任务描述 网页数据解析 第1关&#xff1a;XPath解析网页? 任务描述…

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介 1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置 1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍 2.1 创建请求2.2 界面如下&#xff1a;2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍&#xff…

Sqlmap入门

原理 在owasp发布的top10 漏洞里面&#xff0c;注入漏洞一直是危害排名第一&#xff0c;其中数据库注入漏洞是危害的。 当攻击者发送的sql语句被sql解释器执行&#xff0c;通过执行这些恶意语句欺骗数据库执行&#xff0c;导致数据库信息泄漏 分类 按注入类型 常见的sql注入…

RabbitMQ基础篇

文章目录 1 RabbitMQ概述1.1 消息队列1.2 RabbitMQ体系结构 2 RabbitMQ工作模式2.1 简单模式&#xff08;Simple Queue&#xff09;2.2 工作队列模式&#xff08;Work Queues&#xff09;2.3 发布/订阅模式&#xff08;Publish/Subscribe&#xff09;2.4 路由模式&#xff08;R…

javaEE初阶————多线程初阶(2)

今天给大家带来第二期啦&#xff0c;保证给大家讲懂嗷&#xff1b; 1&#xff0c;线程状态 NEW安排了工作还未开始行动RUNNABLE可工作的&#xff0c;或者即将工作&#xff0c;正在工作BLOCKED排队等待WAITING排队等待其他事TIMED_WAITING排队等待其他事TERMINATED工作完成了 …