移动端开发基础总结

移动端学习总结 (适合于复习)

移动端基础

技术选型:

  1. 单独制作移动端页面(主流)

    • 流式布局(百分比布局)
    • flex弹性布局(强烈推荐)
    • less+rem+媒体查询布局
    • 混合布局
  2. 响应式页面兼容移动端(其次)

    • 媒体查询
    • BootStrap

meta视口标签

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalabel=no, maximum-scale=1.0, minimum-scale=1.0">

一些特殊样式:

/*CSS3盒子模型*/
box-sizing: border-box;
-webkit-box-sizing: border-box;/*点击高亮我们需要清除,设置为transparent透明色*/
* {-webkit-tap-highlight-color: transparent;
}/*移动端浏览器IOS,加上这个属性才能给按钮和输入框自定义样式*/
input {-webkit-appearance: none;
}/*禁用长按页面时的弹出菜单*/
img, a {-webkit-touch-callout: none;
}

less基础

Less(Leaner Style Sheets 的缩写)是一种向后兼容的 CSS 语言扩展。 这是 Less 语言和 Less.js 的官方文档,Less.js 是将 Less 样式转换为 CSS 样式的 JavaScript 工具。

因为 Less 看起来就像 CSS,所以学习起来很容易。 Less 只对 CSS 语言做了一些方便的补充,这也是它可以学得这么快的原因之一。

less安装

安装less
npm install less -g查看安装版本
lessc -v编译less文件
lessc style.less style.cssvscode安装easy less插件
保存就会自动编译为css文件vscode安装插件cssrem,可以让px单位自动转换为rem单位
当让我们需要在 设置 -> 拓展设置 -> cssRem config -> 修改默认的根字体大小  (也就是你的设计稿尺寸/划分的份数)

less变量

@变量名:值;

命名规范:

  • 必须有@ 为前缀
  • 不能包含特殊字符
  • 不能以数字开头
  • 大小写敏感

@color: rgb(0, 0, 0);
@height: 200px;
@baseFont: 50px;div {background-color: hotpink;height: @height;color: @color;
}

less嵌套和计算

/*最新版的less在使用除法运算时,需要加 英文括号 或者使用 ./ */
* {padding: 0; margin: 0 auto;}
html {font-size: @baseFont}
//less嵌套
.outer {font-size: 16px;height: 6rem;width: (300rem / @baseFont);//width: 300rem ./ @baseFont;margin: 0 auto;border: 1px solid antiquewhite;background-color: olive;border-radius: 10%;padding: 10px;.inner {background-color: #9198e5;height: 1rem;width: 50px;margin: 0 auto;border-radius: 10%;text-align: center;a {color: @color;display: inline-block;text-decoration: none;transition: all 0.2s linear;//给a标签添加鼠标悬浮样式&:hover {color: #ff96ce;transform: scale(1.2);}}//给inner类添加鼠标悬浮样式&:hover {}}
}

布局方式

流式布局

也就是百分比布局,你想让这个元素占用父元素的多大宽度,直接设置相应的宽度百分比即可

优点:

优点很明显,可以适应屏幕宽度的变化,父盒子宽度的变化,自身的宽度也会相应的去改变,避免了留白

缺点:

因为宽度是由百分比来定义的,高度和文字大小使用px来设定的,所以在大屏幕的手机下显示效果会变成有些页面元素宽度被拉的很长,但是高度﹑文字大小还是和原来一样(即,这些东西无法变得“流式”),显示非常不协调

媒体查询

语法规范:

  • @media 开头,注意@符号
  • mediatype媒体类型(screenprint
  • 关键字 andnotonly
  • media feature 媒体特性,要有括号包裹

示例:

嵌入在<style>标签里面:

@media screen|print and|not|only (max-width=320px) {}

引入资源:

<!--在符合这个媒体条件时引入相应的样式文件-->
<link rel="stylesheet" href="index.css" media="screen and (min-width=750px)">

通过媒体查询改变html font-size大小,从而实现页面使用rem为单位的元素也相应的缩放改变,从而实现适配不同宽度的设备
简单地例子:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>* {padding: 0;margin: 0 auto;}html, body {font-size: 50px;}.outer {height: 500px;width: 500px;background-color: khaki;border: 1px solid cadetblue;border-radius: 5%;padding: 5px;}.inner {height: 2rem;width: 2rem;background-color: #e66465;}/*当屏幕宽度大于等于900px时,应用以下样式,配合html根元素的font-size的大小改变,使用rem单位的元素大小也会相应的变化*/@media screen and (min-width: 700px) {.inner {background-color: linen;}html {font-size: 70px;}}@media screen and (min-width: 800px) {.inner {background-color: #f5bb84;}html {font-size: 100px;}}@media screen and (min-width: 900px) {.inner {background-color: #ef7b05;}html {font-size: 120px;}}</style>
</head>
<body>
<div class="outer"><div class="inner"></div>
</div>
</body>
</html>

flex弹性布局

通过设置元素的display属性为flex(块状元素)或者inline-flex(内联元素),便可以将一个盒子指定为伸缩盒子,其子元素也都便成为伸缩项目,子元素的floatclearvertical-align属性将失效, 伸缩子元素也可通过设置display:flex指定成伸缩盒子,也就是伸缩盒子可以嵌套

注意:并不是所有的浏览器都能支持伸缩盒子,IE11+Firefox20.0+Opera12.1+Chrome21.0+以及Safari6.1+能支持。

父元素所具有的属性

1. 主轴方向flex-direction: row (default) / column / row-reverse / column-reverse2. 主轴排列方式justify-content: flex-start (default) / flex-end / center / space-between / space-around / space-evenly3. 纵轴排列方式(针对纵轴只有单行有效)align-items: flex-start / flex-end / center / stretch(default) / space-between / space-around / baselinestretch:子元素未设置高度或者是高度为auto,那么,子元素将被拉伸以适应容器,是默认值4. 纵轴排列方式(针对纵轴有多行有效)align-content: flex-start / flex-end / center (default) / space-between / space-around / space-every5. 主轴宽度不够是否可以换行(默认不可换行)flex-wrap: wrap / no-wrap (default) / wrap-reverse6. 复合属性简化 主轴方向 和是否 可换行flex-flow: flex-direction  flex-wrap

子元素所具有的的属性

1. 子项顺序order:  0(默认)
用整数值来定义伸缩容器子元素的排列顺序,默认是0,可以为负值,数值越小越排在前面2. 子项伸缩复合属性flex: 0 (默认) / 自己可以给各个子项划分份数来达到自定义布局的需求3. 子项自身纵向排布(默认继承align-items的值,单独设置覆盖,此时局域底部)align-self: flex-start / flex-end / center

rem布局

先来聊聊 emrem 的区别

em相对于父元素的fontsize大小来设置大小的,设置的值为父元素的fontsize大小的几倍
em参考的是它的父级font-size大小
rem参考的是html根元素的font-size大小

rem实际开发适配方案

  1. 根据设备宽度的不同,动态的计算并设置html根标签的font-size大小(可以使用媒体查询在到达某个宽度值时,设置对应的font-size;也可以使用flexible.js)
  2. CSS 中,设计稿元素的宽、高相对位置等的取值,按照同等比例换算为rem为单位的值(配合less的计算可以很方便)

rem实际开发适配方案1

原理:动态设置html根标签的 font-size 大小

  1. 假设给定的设计稿是750px
  2. 我们可以把整个屏幕划分为15等分(划分标准不一,也可以是20份或10份都可以)
  3. 每一份作为html字体的大小,这里就是 750px / 15 = 50px
  4. 那么在320px设备的时候,字体大小就是 320 / 15 = 21.33px
  5. 用我们页面元素的大小(document.documentElement.clientWidth)除以不同的html字体大小会发现他们比例还是相同的

比如我们以750为标准设计稿:

  1. 一个100*100像素的页面元素在750屏幕下,就是100/50 = 2rem => 2rem * 2rem比例是1:1
  2. 在320屏幕下,html的字体大小为21.33则2rem = 42.66px,此时宽高都是2rem = 42.66px,宽高仍是1:1
  3. 可以实现在不同屏幕下页面元素盒子等比缩放的效果

元素大小取值方法

最后的公式:页面元素的rem值 = 页面的宽度 / (屏幕宽度 / 划分的份数)

屏幕宽度/划分份数就是html font-size的大小

也就是:页面元素的rem值 = 页面的宽度 / html font-size字体大小

市场主流rem适配方案

    • rem + less + 媒体查询
    • flexible.js + rem

两种方案都存在,方案二更简单。

flexible.js

手机淘宝团队开发的简洁高效 移动端适配库

我们咋也不需要写不同屏幕的媒体查询,因为js里面做了处理

原理:

把当前设备的宽度划分为10等份,根据不同的设备的宽度尺寸来改变html font-size的大小,从而来达到页面元素随之变化,适配不同宽度设备的目的

比如当前的设计稿是750px,那我们只需要把html文字大小设置为75px(750px/10)就可以了

页面里元素的rem值:设计稿元素的像素值px/75

接下来,在不同尺寸的设备就交给flexible.js去改变html font-size的值就好了

flexible.js源码

(function flexible (window, document) {var docEl = document.documentElementvar dpr = window.devicePixelRatio || 1// adjust body font sizefunction setBodyFontSize () {if (document.body) {document.body.style.fontSize = (12 * dpr) + 'px'}else {document.addEventListener('DOMContentLoaded', setBodyFontSize)}}setBodyFontSize();// set 1rem = viewWidth / 10function setRemUnit () {var rem = docEl.clientWidth / 10docEl.style.fontSize = rem + 'px'}setRemUnit()// reset rem unit on page resizewindow.addEventListener('resize', setRemUnit)window.addEventListener('pageshow', function (e) {if (e.persisted) {setRemUnit()}})// detect 0.5px supportsif (dpr >= 2) {var fakeBody = document.createElement('body')var testElement = document.createElement('div')testElement.style.border = '.5px solid transparent'fakeBody.appendChild(testElement)docEl.appendChild(fakeBody)if (testElement.offsetHeight === 1) {docEl.classList.add('hairlines')}docEl.removeChild(fakeBody)}
}(window, document))

响应式布局开发

响应式需要一个父级做为布局容器,来配合子级元素来实现变化效果

原理就是在不同屏幕下,通过媒体查询来改变这个布局容器的大小,再改变里面子元素的排列方式和大小,从而实现不同屏幕下,看到不同的页面布局和样式变化。

特点:一套代码响应多端(手机端、平板端、PC端共用一套代码)

平时我们的响应式尺寸划分

  • 超小屏幕(手机,小于768px):设置宽度为100%;
  • 小屏幕(平板,大于等于768px):设置宽度为750px;
  • 中等屏幕(桌面显示器,大于等于992px):宽度设置为970px;
  • 大屏幕(大桌面显示器,大于等于1200px):宽度设置为1170px;

我们也可以根据实际自己自定义划分

响应式开发简单示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>* {padding: 0; margin: 0;}html, body {height: 100%;width: 100%;}/*	超小屏幕:小于768px 设置宽度为100%(手机)小屏幕:大于768px,设置宽度为750px(平板)中等屏幕:大于992px,设置宽度为970px(桌面显示器)大屏幕:大于1200px, 设置宽度为1170px(大屏显示器)*/.container {background-color: #9198e5;width: 100%;min-width: 320px;height: 70%;margin: 0 auto;display: flex;flex-flow: row wrap;padding: 10px 10px;box-sizing: border-box;text-align: center;/*align-content: flex-start;*/}.container div {width: 100%;/*border: 1px solid #e66465;*/border-radius: 20px;box-sizing: border-box;/*margin: 10px 0;*/padding: 10px;background-clip: content-box;background-color: #e66465;/*height: 100px;*/}@media screen and (min-width: 768px){.container {width: 750px;}.container div {width: 50%;}}@media screen and (min-width: 992px){.container {width: 970px;}.container div {width: 33.33%;}}@media screen and (min-width: 1200px){.container {width: 1170px;}.container div {width: 25%;}}</style>
</head>
<body><div class="container"><div>导航1</div><div>导航2</div><div>导航3</div><div>导航4</div><div>导航5</div><div>导航6</div><div>导航7</div><div>导航8</div></div>
</body>
</html>

响应式UI框架 BootStrap

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

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

相关文章

postman----传参格式(json格式、表单格式)

本文主要讲解postman使用post请求方法的2中传参方式&#xff1a;json格式、表单格式 首先了解下&#xff0c;postman进行接口测试&#xff0c;必须条件是&#xff1a; ♥请求地址 ♥请求协议 ♥请求方式 ♥请求头 ♥参数 json格式 先看一下接口文档&#xff0c;根据接口文档&…

深度学习环境安装依赖时常见错误解决

1.pydantic 安装pydantic时报以下错误&#xff1a; ImportError: cannot import name Annotated from pydantic.typing (C:\Users\duole\anaconda3\envs\vrh\lib\site-packages\pydantic\typing.py) 这个是版本错误&#xff0c;删除装好的版本&#xff0c;重新指定版本安装就…

项目规范 编写规范(范例)

项目目录 目录接口参考 项目目录结构设计&#xff0c;增加部分领域模型后缀强制定义&#xff0c;方便统一编码风格。 controller&#xff1a;请求处理 RestController module&#xff1a;按大业务区分&#xff0c;对多个业务对象数据聚合处理 Component manager&#xff1a;…

web-xss

一、简介 XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击&#xff0c;攻击者在网页中插入由JavaScript编写的恶意代码&#xff0c;当用户浏览被嵌入恶意代码的网页时&#xff0c;恶意代码将会在用户的浏览器上执行。 二、xss的攻击方式 Dom&#xff1a;这是一种将任意 Jav…

zookeeper入门学习

zookeeper入门学习 zookeeper应用场景 分布式协调组件 客户端第一次请求发给服务器2&#xff0c;将flag值修改为false&#xff0c;第二次请求被负载均衡到服务器1&#xff0c;访问到的flag也会是false 一旦有节点发生改变&#xff0c;就会通知所有监听方改变自己的值&#…

一键开启ChatGPT“危险发言”

‍ ‍ 大数据文摘授权转载自学术头条 作者&#xff1a;Hazel Yan 编辑&#xff1a;佩奇 随着大模型技术的普及&#xff0c;AI 聊天机器人已成为社交娱乐、客户服务和教育辅助的常见工具之一。 然而&#xff0c;不安全的 AI 聊天机器人可能会被部分人用于传播虚假信息、操纵舆…

“深入探索JVM:Java虚拟机的工作原理解析“

标题&#xff1a;深入探索JVM&#xff1a;Java虚拟机的工作原理解析 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的工作原理&#xff0c;从类加载、内存管理、垃圾回收、即时编译器等方面进行详细解析&#xff0c;帮助读者更好地理解JVM的内部机制。…

SSH 免密登录

SSH SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能 SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令 SSH 为建立在应用层和传输层基础上的安全协议。对数…

命令行非明文密码连接 TiDB

作者&#xff1a; GangShen 原文来源&#xff1a; https://tidb.net/blog/6794a34b 在命令行中连接TiDB的过程中&#xff0c;为了保护密码不被明文获取&#xff0c;可以使用非明文密码连接。本文记录了几种非明文连接 TiDB 的方式。 方式一&#xff1a;命令行输入方式 [ro…

使用go获取链上数据之主动拉取-搭建环境(一)

使用go获取链上数据之主动拉取-搭建环境&#xff08;一&#xff09; 1、配置文件1.1、新建配置文件1.2、新建setting.go文件1.3、新建config.go文件 2、全局变量配置2.1、新建global.go2.2、初始化配置2.3、验证配置 在我们实际开发项目中&#xff0c;很多时候都需要从链上获取…

PyTorch 微调终极指南:第 1 部分 — 预训练模型及其配置

一、说明 如今&#xff0c;在训练深度学习模型时&#xff0c;通过在自己的数据上微调预训练模型来迁移学习已成为首选方法。通过微调这些模型&#xff0c;我们可以利用他们的专业知识并使其适应我们的特定任务&#xff0c;从而节省宝贵的时间和计算资源。本文分为四个部分&…

数据结构:插入排序

直接插入排序 插入排序算法是所有排序方法中最简单的一种算法&#xff0c;其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中&#xff0c;最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种&#xff0c;采用的方法是&#xff1a;在…

解析隧道代理被封的几个主要原因

Hey&#xff0c;各位爬虫高手&#xff0c;你是不是经常遇到爬虫代理HTTP被封的问题&#xff1f;不要慌&#xff0c;今天我来分享一些信息&#xff0c;帮你解析这个问题&#xff01;告别封禁&#xff0c;让你的爬虫工作更顺利&#xff0c;赶快跟随我一起了解吧&#xff01; 在爬…

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown()

什么是图像金字塔&#xff1f; 图像金字塔&#xff08;Image> Pyramid&#xff09;是一种用于多尺度图像处理和分析的技术&#xff0c;它通过构建一系列不同分辨率的图像&#xff0c;从而使得图像可以在不同尺度下进行处理和分析。图像金字塔在计算机视觉、图像处理和计算机…

APT80DQ60BG-ASEMI快恢复二极管APT80DQ60BG

编辑&#xff1a;ll APT80DQ60BG-ASEMI快恢复二极管APT80DQ60BG 型号&#xff1a;APT80DQ60BG 品牌&#xff1a;ASEMI 芯片个数&#xff1a;双芯片 封装&#xff1a;TO-3P 恢复时间&#xff1a;≤80ns 工作温度&#xff1a;-55C~150C 浪涌电流&#xff1a;600A 正向电…

UEFI build报错:‘build‘ is not recognized as an internal or external command

UEFI学习&#xff0c;某一次进行build时&#xff0c;提示&#xff1a; build is not recognized as an internal or external command,operable program or batch file. 用的命令是&#xff1a; C:\UEFIWorkspace>build -a X64 -p edk2\OvmfPkg\OvmfPkgX64.dsc -b NOOPT -…

【性能类】—页面性能类

一、提升页面性能的方法有哪些&#xff1f; 1. 资源压缩合并&#xff0c;减少HTTP请求 图片、视频、js、css等资源压缩合并&#xff0c;开启HTTP压缩&#xff0c;把资源文件变小 2. 非核心代码异步加载 →异步加载的方式 → 异步加载的区别 异步加载的方式 ① 动态脚本加载…

【OpenCV常用函数:视频捕获函数】cv2.VideoCapture

文章目录 1、cv2.VideoCapture() 1、cv2.VideoCapture() 输入视频路径&#xff0c;创建VideoCapture的对象 cv2.VideoCapture(filename) filename: 视频文件的路径视频名扩展名该类的函数有&#xff1a; 1&#xff09;video.isOpened: 检查视频捕获是否成功 2&#xff09;vid…

重试框架入门:Spring-RetryGuava-Retry

前言 在日常工作中&#xff0c;随着业务日渐庞大&#xff0c;不可避免的涉及到调用远程服务&#xff0c;但是远程服务的健壮性和网络稳定性都是不可控因素&#xff0c;因此&#xff0c;我们需要考虑合适的重试机制去处理这些问题&#xff0c;最基础的方式就是手动重试&#xf…

YOLOv5源码中的参数超详细解析(2)— 配置文件yolov5s.yaml

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv5配置了5种不同大小的网络模型&#xff0c;分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;其中YOLOv5n是网络深度和宽度最小但检测速度最快的模型&#xff0c;其他4种模型都是在YOLOv5n的基础上不断…