(一)移动端 Web 开发基础

article/2025/11/7 15:37:33

文章目录

    • 一、移动 Web 开发基础概念
        • 1. 像素
          • (1) 分辨率
          • (2) 物理像素
          • (3) CSS 像素
          • (4) 设备像素比
          • (5) 标清屏和高清屏
          • (6) 缩放
          • (7) PPI / DPI
        • 2. 视口 viewport
    • 二、移动 Web 开发基础知识
        • 1. box-sizing
        • 2. 图标字体
        • 3. flex 布局
          • (1) 什么是 flex 布局
          • (2) flex 布局的基本概念
          • (3) flex 容器的属性
          • (4) flex 项目的属性
        • 4. 媒体查询
          • (1) 什么是媒体查询(media query)
          • (2) 为什么需要媒体查询
          • (3) 媒体类型
          • (4) 媒体查询中的逻辑
          • (5) 媒体特征表达式
          • (6) 媒体查询策略
        • 5. 移动端常用单位
    • 三、响应式布局
        • 1. 概念
        • 2. 原理
        • 3. 结构、内容、布局
        • 4. 优、缺点
        • 5. 栅格系统
    • 四、移动端屏幕适配
        • 1. 介绍
          • (1) 与响应式布局的关系
        • 2. 简单适配
        • 3. 通用适配

一、移动 Web 开发基础概念

1. 像素

(1) 分辨率
  • 1798 x 828 像素分辨率:
    横向有 828 个点,纵向有 1792 个点
(2) 物理像素
  • 物理像素(physical pixel),也可以叫做设备像素(dp:device pixel)
  • 实际开发中不会以物理像素为准
(3) CSS 像素
  • CSS 像素,也可以叫做逻辑像素(logical pixel)、设备独立像素(dip:device independent pixel)
  • 是实际开发中使用的像素
.box {width: 200px;height: 200px;
}	
(4) 设备像素比
  • 设备像素比(dpr:device pixel ratio)
  • dpr = 设备像素 / CSS 像素(缩放比是 1 的情况下)
    dpr = 2 表示 1 个 CSS 像素用 2x2 个设备像素来绘制
    在这里插入图片描述
(5) 标清屏和高清屏

在这里插入图片描述

(6) 缩放
  • 缩放改变的是 CSS 像素的大小
  • 缩放——放大在这里插入图片描述
  • 缩放——缩小在这里插入图片描述
(7) PPI / DPI
  • PPI:Pixels Per Inch
  • DPI:Dots Per Inch
  • 每英寸的物理像素点

在这里插入图片描述

2. 视口 viewport

  • 设置视口:
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1, minimum-scale=1">
  • 获取视口宽度:
<script>console.log(window.innerWidth);console.log(document.documentElement.clientWidth);console.log(document.documentElement.getBoundingClientRect().width);var viewWidth = document.documentElement.clientWidth || window.innerWidth;// 兼容性问题,不要用// console.log(screen.width);// dprconsole.log(window.devicePixelRatio);
</script>

二、移动 Web 开发基础知识

1. box-sizing

box-sizing 的两个值:

  • content-box
    盒模型宽 / 高 = width / height + padding + border
    (向外扩张)
  • border-box
    盒模型宽 / 高 = width / height
    (向内压缩)

2. 图标字体

  • 图标字体库:iconfont-阿里巴巴矢量图标库
  • 引入方式:<i class="iconfont icon-scan"></i>

3. flex 布局

(1) 什么是 flex 布局
  • Flex 是 Flexible Box 的缩写,意为"灵活的盒子"或"弹性的盒子",所以 flex 布局一般也叫作"弹性布局"
(2) flex 布局的基本概念
  • flex 容器(flex container):
    采用 flex 布局的元素,称为 flex 容器
.box {display: flex | inline-flex;
}
  • flex 项目(flex item):
    flex 容器的所有子元素自动成为容器成员,称为 flex 项目
    (只是子元素成为容器成员,孙子元素等不会成为容器成员)

在这里插入图片描述

  • 项目默认沿主轴(main axis)排列
(3) flex 容器的属性
  • display 属性
    display 属性决定是否使用flex布局
    flex:将对象作为弹性伸缩盒显示
    inline-flex:将对象作为内联块级弹性伸缩盒显示
.box {display: flex | inline-flex;
}
  • flex-direction 属性
    flex-direction 属性决定主轴的方向(即项目的排列方向)
    ① row(默认值):主轴为水平方向,起点在左端
    ② row-reverse:主轴为水平方向,起点在右端
    ③ column:主轴为垂直方向,起点在上沿
    ④ column-reverse:主轴为垂直方向,起点在下沿
.box {flex-direction: row | row-reverse | column | column-reverse;
}
  • flex-wrap 属性
    默认情况下,项目都排在一条线(又称 “轴线” )上
    flex-wrap 属性定义,如果一条轴线排不下,如何换行
    ① nowrap(默认):不换行
    ② wrap:换行,第一行在上方
    ③ wrap-reverse:换行,第一行在下方
.box{flex-wrap: nowrap | wrap | wrap-reverse;
}
  • flex-flow 属性
    flex-flow 属性是 flex-direction 属性和 flex-wrap 属性的简写形式,默认值为 row nowrap
.box {flex-flow: <flex-direction>; || <flex-wrap>;
}
  • justify-content 属性
    justify-content 属性定义了项目在主轴上的对齐方式
    ① flex-start(默认值):左对齐
    ② flex-end:右对齐
    ③ center: 居中
    ④ space-between:两端对齐,项目之间的间隔都相等(项目与边框之间没有间隔)
    ⑤ space-around:每个项目两侧的间隔相等;所以,项目之间的间隔比项目与边框的间隔大一倍
.box {justify-content: flex-start | flex-end | center | space-between | space-around;
}
  • align-items 属性
    align-items 属性定义项目在交叉轴上如何对齐
    ① flex-start:交叉轴的起点对齐
    ② flex-end:交叉轴的终点对齐
    ③ center:交叉轴的中点对齐
    ④ baseline: 项目的第一行文字的基线对齐
    ⑤ stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度
.box {align-items: flex-start | flex-end | center | baseline | stretch;
}
  • align-content 属性
    align-content 属性定义了多根轴线(多行)在交叉轴上的对齐方式
    如果项目只有一根轴线(一行),该属性不起作用
    ① flex-start:与交叉轴的起点对齐
    ② flex-end:与交叉轴的终点对齐
    ③ center:与交叉轴的中点对齐
    ④ space-between:与交叉轴两端对齐,轴线之间的间隔平均分布
    ⑤ space-around:每根轴线两侧的间隔都相等;所以,轴线之间的间隔比轴线与边框的间隔大一倍
    ⑥ stretch(默认值):轴线占满整个交叉轴
.box {align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
(4) flex 项目的属性
  • order 属性
    order 属性定义项目的排列顺序
    数值越小,排列越靠前,默认为 0
.item {order: <integer>;
}
  • flex-grow 属性
    flex-grow 属性定义项目的放大比例,默认为 0,即如果存在剩余空间,也不放大
    ① 如果所有项目的 flex-grow 属性都为 1,则它们将等分剩余空间(如果有的话)
    ② 如果一个项目的 flex-grow 属性为 2,其他项目都为 1,则前者占据的剩余空间将比其他项多一倍
    ③ 如果有的项目有 flex-grow 属性,有的项目有 width 属性,有 flex-grow 属性的项目将等分剩余空间
.item {flex-grow: <number>; /* default 0 */
}
  • flex-shrink 属性
    flex-shrink 属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小
    ① 如果所有项目的 flex-shrink 属性都为 1,当空间不足时,都将等比例缩小
    ② 如果一个项目的 flex-shrink 属性为 0,其他项目都为 1,则空间不足时,前者不缩小
    ③ 负值对该属性无效
.item {flex-shrink: <number>; /* default 1 */
}
  • flex-basis 属性
    flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)
    浏览器根据这个属性,计算主轴是否有多余空间
    它的默认值为 auto,即项目的本来大小
.item {flex-basis: <length>; | auto; /* default auto */
}
  • flex 属性
    flex 属性是 flex-grow, flex-shrink 和 flex-basis 的简写,默认值为 0 1 auto(后两个属性可选)
    该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)
.item {flex: none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]
}
  • align-self 属性
    align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性
    默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch
.item {align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

4. 媒体查询

(1) 什么是媒体查询(media query)
@media screen and (min-width: 900px) {body {background-color: red;}
}
(2) 为什么需要媒体查询
  • 一套样式不可能适应各种大小的屏幕
  • 针对不同的屏幕大小写样式,让我们的页面在不同大小的屏幕上都能正常显示
(3) 媒体类型
  • all (default)
  • screen / print / speech
@media (min-width: 900px) {body {background-color: red;}
}@media print and (min-width: 900px) {body {background-color: red;}
}
(4) 媒体查询中的逻辑
  • 与 ( and )
  • 或 ( , )
  • 非 ( not )
/*与*/
@media screen and (min-width: 900px) and (max-width: 1024px) {body {background-color: red;}
}
/*或*/
@media screen and (min-width: 1024px), (max-width: 900px) {body {background-color: red;}
}
@media screen and (min-width: 1024px), screen and (max-width: 900px) {body {background-color: red;}
}
/*非*/
@media not screen and (min-width: 900px) and (max-width: 1024px) {body {background-color: red;}
}
@media not screen and (min-width: 1024px), screen and (max-width: 900px) {body {background-color: red;}
}
(5) 媒体特征表达式
  • width / max-width / min-width
  • -webkit-device-pixel-ratio / -webkit-max-device-pixel-ratio / -webkit-min-pixel-ratio
  • orientation: landscape 横屏 / portrait 竖屏
  • height
  • device-width / device-height
    screen.width / screen.height
  • aspect-ratio 视口的宽高比
(6) 媒体查询策略
    <style>/*css reset*/* {box-sizing: border-box;padding: 0;margin: 0;}body {padding-top: 200px;}img {width: 100%;height: 100%;}.row {width: 100%;display: flex;flex-wrap: wrap;}.col {padding-top: 10px;padding-bottom: 10px;background-color: rgba(86, 61, 124, 0.15);border: 1px solid rgba(86, 61, 124, 0.2);}/*断点xs: < 576pxsm: 576px ~ 768pxmd: 768px ~ 992pxlg: 992px ~ 1200pxxl: > 1200px断点怎么来的改变屏幕大小,当页面显示不正常的时候,你就需要设置断点了经验值预设一些*//*@media (max-width: 576px) {.col {width: 100%;}}@media (min-width: 577px) and (max-width: 768px) {.col {width: 50%;}}@media (min-width: 769px) and (max-width: 992px) {.col {width: 25%;}}@media (min-width: 993px) and (max-width: 1200px) {.col {width: 16.6666666667%;}}@media (min-width: 1201px) {.col {width: 8.333333333%;}}*//*pc first*//*.col {width: 8.333333333%;}@media (max-width: 1200px) {.col {width: 16.6666666667%;}}@media (max-width: 992px) {.col {width: 25%;}}@media (max-width: 768px) {.col {width: 50%;}}@media (max-width: 576px) {.col {width: 100%;}}*//*mobile first*/.col {width: 100%;}@media (min-width: 576px) {.col {width: 50%;}}@media (min-width: 768px) {.col {width: 25%;}}@media (min-width: 992px) {.col {width: 16.6666666667%;}}@media (min-width: 1200px) {.col {width: 8.33333333%;}}</style>

5. 移动端常用单位

  • px:像素
  • %:利用百分比设置宽度
  • em:font-size 的倍数,可用于文字段落缩进
  • rem:对应 html 的 font-size
  • vw:viewport width,50vw 即为视口宽度的 50%
  • vh:viewport height,50vh 即为视口高度的 50%

三、响应式布局

1. 概念

  • 2010 年 5 月由 Ethan Marcotte 提出的一个概念
  • 一个网站兼容多种终端
  • 响应式布局:对不同屏幕尺寸(大小)做出响应,并进行相应布局的一种移动 Web 开发方式

2. 原理

  • 如何响应不同的屏幕尺寸
  • 媒体查询

在这里插入图片描述

3. 结构、内容、布局

<body><!-- 结构 --><header class="header-container"><div class="container"><div class="header-logo-container"><!-- 内容 --><a href="###"><img src="img/logo.svg" alt="logo"></a></div><div class="header-nav-container"></div></div></header>
</body>

4. 优、缺点

  • 优点:
    一个网站能够兼容多种终端,不用为每种终端开发一个网站
  • 缺点:
    需要兼容多种终端,工作量大,效率低下;
    代码累赘,加载时间长(在特定终端会出现无用代码)
  • 适用场景:
    适用于结构比较简单的页面(展示性质的网站),比如企业站等;
    不适用于结构复杂、交互多的页面(功能性网站),比如电商网站等

5. 栅格系统

  • 响应式布局的一种实现方式
  • 将页面栅格化

四、移动端屏幕适配

1. 介绍

  • 移动端屏幕适配:使页面在移动端各种大小的屏幕上都能够正常显示的一种移动端开发方案
(1) 与响应式布局的关系
  • 适应各种屏幕尺寸在这里插入图片描述
  • 移动端适配疑问
    1)必须使用 rem ?
    不是
    px、%、em、rem、vw / vh 只要合适都可以使用
    2)媒体查询只能用在响应式布局?
    不是,只要合适都可以使用

2. 简单适配

  • 1rem = viewWidth / 系数(18.75)

simple.js

(function () {'use strict';setRemUnit();window.addEventListener('resize', setRemUnit);function setRemUnit() {var docEl = document.documentElement;var ratio = 18.75;var viewWidth = docEl.getBoundingClientRect().width || window.innerWidth;docEl.style.fontSize = viewWidth / ratio + 'px';}
})();

3. 通用适配

(function () {'use strict';// dpr->scale = 1 / dprvar docEl = document.documentElement,viewportEl = document.querySelector('meta[name="viewport"]'),dpr = window.devicePixelRatio || 1,maxWidth = 540,minWidth = 320;dpr = dpr >= 3 ? 3 : (dpr >= 2 ? 2 : 1);docEl.setAttribute('data-dpr', dpr);docEl.setAttribute('max-width', maxWidth);docEl.setAttribute('min-width', minWidth);var scale = 1 / dpr,content = 'width=device-width, initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no';if (viewportEl) {viewportEl.setAttribute('content', content);} else {viewportEl = document.createElement('meta');viewportEl.setAttribute('name', 'viewport');viewportEl.setAttribute('content', content);document.head.appendChild(viewportEl);}setRemUnit();window.addEventListener('resize', setRemUnit);function setRemUnit() {var ratio = 18.75;var viewWidth = docEl.getBoundingClientRect().width || window.innerWidth;// console.log(viewWidth);if (maxWidth && (viewWidth / dpr > maxWidth)) {viewWidth = maxWidth * dpr;} else if (minWidth && (viewWidth / dpr < minWidth)) {viewWidth = minWidth * dpr;}docEl.style.fontSize = viewWidth / ratio + 'px';}
})();

http://chatgpt.dhexx.cn/article/49UK9ekh.shtml

相关文章

移动端web开发

相关阅读&#xff1a; WebApp与Native App的区别&#xff1f; 在高端智能手机系统中有两种应用程序&#xff1a;一种是基于本地(操作系统)运行的APP;一种是基于高端机的浏览器运行的WebApp&#xff08;基于WEB形式的应用程序&#xff09; Native App&#xff1a; 1、开发成本非…

Web前端开发 移动端开发(快速入门)

目录 一、理论知识1.视口2.物理像素和物理像素比3.二倍图4.移动端开发选择 二、移动端开发流程1.技术选型2.搭建文件结构3.SEO优化3大标签4.设置favicon.ico(logo图片)5.视口标签和初始化样式6.设置自适应尺寸&#xff08;两种方法&#xff09;1.方法一&#xff1a;创建common.…

移动端web开发笔记(一)

我本来一直在开发PC端的网页的&#xff0c;但是看到很多招聘都要求要有移动端开发的经验&#xff0c;所以开始学习一下&#xff01; 先搞清楚两个概念&#xff0c;移动端web开发&#xff0c;web app开发 1、 移动web开发&#xff08;pc端的页面用手机浏览器打开&#xff09; …

移动web开发

参考博客&#xff1a; 浅析移动端的视口 什么是视口 布局们 黑马程序员之flex布局 一、基础所知 常见浏览器QQ浏览器、百度手机浏览器、360、谷歌浏览器等都是根据Webkit修改过来的内核&#xff0c;因此移动浏览器主要对webkit进行兼容。且移动端设备屏幕尺寸碎片化&#xff…

方法重载与重写的区别

1.方法重载和重写都是实现多态的方式&#xff0c;区别在于重载是编译时多态&#xff0c;重写是运行时多态。 2.重载是在同一个类中&#xff0c;两个方法的方法名相同&#xff0c;参数列表不同&#xff08;参数类型、顺序、个数&#xff09;&#xff0c;与方法返回值无关&#x…

C#重载与重写的区别

前言&#xff1a;在之前的博文中&#xff0c;我总结过重载与重写的区别与用法&#xff0c;本博文算是一个系统的概述与总结。 文章目录 一、重载与重写的区别二、重载与重写的特征三、重载与重写的对比 一、重载与重写的区别 重载必须在同一个类&#xff0c;重写在派生类。重…

重载和重写的区别总结

目录 1. 什么是重载 2. 什么是重写 3. 二者的区别 1. 什么是重载 重载&#xff08;overload&#xff09;&#xff0c;它是指我们可以定义一些名称相同的方法&#xff0c;通过定义不同的输入参数来区分这些方法&#xff0c;然后再调用时&#xff0c;VM就会根据不同的参数样式…

Java之 重载 重写的区别

方法的重写和重载是Java多态性的不同表现&#xff1b;重写是父类与子类之间多态性的一种表现&#xff0c;重载是一个类中多态性的一种表现。重载 在同一个类中&#xff0c;多个方法有相同的方法名&#xff0c;但参数列表不同&#xff0c;这种同名不同参的方法就是重载重写 子类…

java中方法重载和重写的区别

方法重载和重写&#xff0c;光从名称上来说&#xff0c;很类似&#xff0c;也很容易弄错&#xff0c;接下来我们先简述两者的区别和联系。 1. 方法重载 首先方法重载是同一个类中的不同方法间的关系&#xff0c;这些方法具有同名(方法名一样)&#xff0c;但是具有不同的参数列…

重载和重写的区别(详解)

1、方法重写 概念&#xff1a; 重写是子类对父类的允许访问的方法的实现过程进行重新编写&#xff0c;返回值和形参都不能改变。即外壳不变&#xff0c;核心重写&#xff01; 好处&#xff1a; 重写的好处在于子类可以根据需要&#xff0c;定义特定于自己的行为。 也就是说…

java中重载与重写的区别

重写&#xff08;Overriding&#xff09; 重载&#xff08;Overloading&#xff09; 类的数量 父子类、接口与实现类 本类 方法名称 一致 一致 参数列表 一定不能修改 必须修改 返回类型 一定不能修改 可以修改 异常 可以减少或删除&#xff0c;但不能扩展 可以…

重载和重写的区别有哪些?

重载和重写的区别有以下几点&#xff1a; 一、定义上的区别&#xff1a; 1、重载是指不同的函数使用相同的函数名&#xff0c;但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 2、覆盖&#xff08;也叫重写&#xff09;是指在派生类中重新对基类…

重载和重写有什么区别

一、定义上的区别&#xff1a; 1、重载是指不同的函数使用相同的函数名&#xff0c;但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 2、覆盖&#xff08;复也叫重写&#xff09;是指在派生类中重新对基类中的虚函数&#xff08;注意是虚函数&…

重载和重写区别

以下都是Java的基础面试题&#xff0c;相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答&#xff0c;建议收藏&#xff0c;经常温习查阅。 文章目录 3. 重载和重写区别10道不得不会的Java基础面试题 3…

getBytes的坑

由于业务需要&#xff0c;想要获取value字符串的字节长度&#xff0c;于是用了下面方法。 int length value.getBytes().length; 发包给测试的时候&#xff0c;于是奇怪问题产生了。 测试的运行效果和我这边不一样。 1、重启服务 2、查看class确认是否正确打包 然而都没…

java中bitconverter_BitConverter.GetBytes 方法以什么顺序返回字节数组

前言 我在“浅谈 ZipInteger”一文中的 ZipInteger 结构中使用了 BitConverter 类的 GetBytes 方法。当时我是假设 GetBytes 方法根据 IsLittleEndian 的值不同而按照不同的顺序返回字节数组。但是 MSDN 有关 BitConverter 类的文档中没有对此作出明确的说明。请参见我在 MSDN …

java Getbytes转中文,java new String getBytes 到底怎么转换字符集的问题

我们常常遇到字符集转换的问题。 我要说的当然不是网站中遇到的ISO8859-1的那个傻BUG。 实例: 目标,把一个UTF-8的中文字符串转化成GBK的字符串。 新建一个GBK的java项目。 也就是说*.java文件中的字符是用GBK字符集保存的。 在main中,建一个中文字符串,那么这个静态串就是…

java getbytes 乱码_深入解析java String中getBytes()的编码问题

Java服务器后台在和Android端App通信时&#xff0c;遇到了两端关于用MD5加密同一包含中文的字符串结果不一致的问题。 具体问题描述&#xff1a; Java服务器后台和Android端AS用了同一个MD5的工具类&#xff0c;且两边项目的默认编码都是UTF-8 &#xff0c;加密纯英文数字的字符…

java getbytes 长度_JAVA中的getBytes()方法

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同情况下,返回的东西不一样! String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如: Java代码 byte[] b_gbk = "深"…

getBytes方法

字符串中的字符变成一位一位的01比特流 一个英文字符占8比特&#xff0c;也就是一个字节 一个中文字符占24比特&#xff0c;也就是3个字节&#xff08;其实不同编码方式&#xff0c;占几个字节不一样&#xff0c;我们这里采取的UTF-8编码方式&#xff0c;具体可以看下图&…