移动端适配相关问题前端学习

逻辑像素(设备独立像素):独立于设备的用于逻辑上衡量像素的单位。在移动Web开发中就是指的CSS的逻辑像素。css像素:web编程用到的,在JS和CSS中使用就是CSS像素,是可变的。设备像素比(dpr):用来描述单一方向上,设备物理像素的点数/逻辑像素的点数的比率。值越高,屏幕密度越大。常说的两倍屏、三倍屏,这里面的倍数指的就是dpr。在JS中我们可以通过window.devicePixelRatio来得到当前设备的dpr.在CSS中我们可以通过-webkit-device-pixel-ratio来进行媒体查询.

通过document.documentElement.clientWidth来获取layoutviewport的宽度。

通过window.innerWidth获取

在移动端布局中我们需要的是idealviewport。

或者2.viewport概念viewport中文译作“视口”。●计算机把图像渲染到显示器的过程中,会先把图像画在一个逻辑层的画布上,然后从这个画布中框选一部分,将其投影到显示层。●这个选框就是视口,显示层就是窗口。●在浏览器中,我们可以通过滚动条来移动视口以看到更多网页内容。

页面放大:视口缩小滚动滚动条:视口移动

document.documentElement.clientWidth(不含滚动条)window.innerWidth(含滚动条)注意:在移动端的浏览器中,对页面手动捏合做放大时,document.documentElement.clientWidth不会有任何变化。window.innerWidth在iOS中会等倍数缩小,在Android的不同浏览器中表现差异较大。

移动互联网的早期,屏幕设备的物理像素点宽度多数在320、480、640等。而互联网世界的绝大多数站点又是针对PC设计的,其文档宽度普遍在800px以上。如果浏览器和针对PC制作的网页都不做任何处理,那么在窄屏设备上加载网页,我们看到的效果便是默认显示网页的左上角部分,然后通过水平和竖直方向的滚动来浏览网页的其他部分。首先,我们看不到网页全局的样子。其次,我们需要通过不断的滚动来保证阅读内容的连续性。这样的体验,有点过于糟糕了。

为了优化“最初为PC设计的网页”在移动设备的浏览体验,移动浏览器厂商们想了一个方案,那就是增大页面载入时初始视口的宽度,比如Android和iOS都比较常见的980px。按照2.1里的viewport的解释,如此的设计,会把逻辑层画布中980px的图像投影显示到320px的屏幕上,看到的效果便是一个挤在一起看不清楚细节的缩小版页面。不过,该方案依然会有很多问题:●对缩小版页面内细节内容的浏览,依然要依靠放大和滚动,体验不好;●如果为PC设计的网页的CSS宽度描述大于980px,那么在移动端展示时,初始页面依然会有滚动条;●限制了依据视口宽度做媒体查询(Mediaqueries)机制的有效性,因为视口宽度初始为980px,浏览器不会以640px、480px或更低分辨率来启动对应的媒体查询。

●针对较宽(比如2000px)PC设计的页面,我们可以设置viewport宽度为2000,以使得移动设备中初始渲染的页面效果刚好不出现滚动条;●利用了媒体查询做了移动端适配的页面,我们可以设置viewport宽度为device-width,以保证媒体查询技术的有效性,同时还能保证横竖屏切换时,px单位做大小描述的页面元素的视觉大小一致性;●需要充分利用屏幕物理像素点做1像素极细边线的页面,我们可以设置viewport缩放倍数为1/dpr,以使得css中的1px刚好对应设备物理像素中的1个点;●需要根据屏幕宽度弹性伸缩的页面,我们可以结合各种相对长度单位(%/rem/vw等),设置合适的viewport,以实现布局伸缩和内容大小固定的完美统一。

以iPhone6s手机+Safari浏览器举例,对上述属性做详细说明。设备参数说明:●操作系统:iOS12.3.1●屏幕物理分辨率:750*1334●屏幕逻辑分辨率:375*667(screen.width/height)●设备像素比(dpr):2(window.devicePixelRatio)●浏览器默认视口宽度:980(document.documentElement.clientWidth)

●document.documentElement.clientWidth输出1000●div宽度1000px时,横向刚好铺满屏幕,超过出现横向滚动条

●效果等同于width=375●document.documentElement.clientWidth输出375●div宽度375px时,横向刚好铺满屏幕,超过出现横向滚动条

●效果等同于width=device-width

●document.documentElement.clientWidth输出188(375/2)●div宽度188px时,横向刚好铺满屏幕,超过出现横向滚动条●scale倍数越小,视口越大

1此属性为2017年Apple为了解决iPhoneX手机的刘海屏问题,增加的新属性。

width=device-width和initial-scale=1是等效的。

Safari的运行结果是“按宽度大小”取更大的,但是这样的对比研究并没有任何意义。因为并没有相应的规范约束这件事情,浏览器的兼容表现肯定是千差万别。

作为开发者,我们要做的,就是避免冲突。要么只写一个,要么两个都计算正确。从语义表达角度看,建议只设置"width"。从计算方便角度看,可以只设置initial-scale。

跨屏适配的需求,根据业务类型,一般有两种UI设计方案:●根据屏幕宽度,UI布局弹性伸缩或流动。这种方式被称为响应式设计(_ResponsiveDesign_);●把屏幕按宽度范围分为有限的几个区段,为每个区段定制固定的UI,相当于为专门的设备设计专门的UI。这种方式被称为自适应设计(_AdaptiveDesign_)。

响应式。屏幕适配无粒度区分,同一设备上做宽度变化时,内容布局无缝圆滑变化;技术实现通常为,一套代码适配所有屏幕。

自适应。屏幕适配有粒度区分,原则上不做过渡态的UI设计,同一设备上做宽度变化时,内容布局卡顿式梯级变化;技术实现通常为,多个屏幕对应多套代码。(演示如下图)

响应式设计方案,常见于PC、移动等多端共用一套代码的场景。典型的Web站点如GitHub浏览这类站点时,随着屏幕的缩小,你会看到页面模块的布局结构在伸缩、流动或显隐变化,文字图片等主体内容在布局容器内流动填充、其大小也一直在做梯级变化。

为了在特定设备上实现最好的用户体验,越来越多的产品,开始针对特定屏幕设计固定的UI,绝大多数移动端产品都有了区分于PC的专门的m站。其技术实现通常为:服务器根据浏览器请求的user-agent判断设备类型,然后返回(或重定向)对应的站点内容。

移动端的屏幕宽度差距比较小(4-8英寸),UI页面通常也会保持一致的布局方式,只是文字、图标、大图片等可能会根据业务需要做一些定制化的处理。

移动端多屏适配的需求,常见主要有两类:1、布局伸缩式(布局伸缩,内容大小固定或梯级变化);2、等比缩放式(布局和内容完全等比例缩放)。

对应的技术方案一般也是对视口(viewport)、媒体查询(mediaqueries)、单位(px/%/rem/vw)的组合使用。

如上图,布局伸缩式适配需求,常见于排版比较简单的信息流展示类业务。其布局特点一般为横向伸缩,竖向高度固定或由内容填充决定;文字图标等网页内容一般会固定大小,且在宽屏窄屏上的视觉大小保持一致。

如上图,等比缩放式适配需求,广泛应用于各种产品类、运营类等业务场景。其布局特点简单粗暴,就是根据屏幕宽度整个页面等比缩放。

remrem是CSS3新增的相对于根元素html的font-size计算值的大小的倍数单位。早期的移动端等比缩放的适配方案都是基于rem。●设置viewport宽度为device-width或其他固定值,以得到px为单位的文字、图标或边线等期望的渲染效果●css单位使用rem,js根据viewport宽度以及css中rem的换算系数,动态计算并设置html根节点font-size,以实现整个页面内容的等比例缩放

注:一些文本段落展示类的需求,UI设计师可能会希望宽屏比窄屏在一行内可以展示更多的文字。这时就需要引入媒体查询,并且对字号使用px单位做特殊处理。

viewportunits

1vw即表示当前视口宽度的1%,我们可以利用这一点替代“rem+根节点font-size”的等比缩放实现。举个例子,750px的UI稿中,宽度75px的按钮,在css中的宽度描述即为:width:10vw。

viewportmetaonly看起来viewportunits方案是目前最简单可行的方案了,UI稿里的标注直接都转换成vw单位就可以了,html中不需要做任何js处理。那么,是不是还可以更简单一些呢?

回到本文最初的起点,的引入是为了支持开发者定制视口的大小。

我们做的ui稿中的px到css的rem、vw这些单位的转换,核心目的就是在不同的屏幕上高保真还原设计稿。

那么,我们直接把web容器视口的大小定为和UI稿一样的px大小不就可以了?是的,不再需要做任何单位的转换。而且,完美实现UI稿的高保证还原。完全不需要担心什么0.5px细线问题。然而,当前前端圈内viewportmetaonly方案并未成为主流方案,个人认为,原因主要是——业务场景中,存在非等比缩放类的适配需求,比如布局只要横向伸缩、字号要px固定等。如果100%确定当前业务可以完全等比缩放式适配,那么,强烈推荐使用该方案。

主要是跟一个东西有关,DPR(devicePixelRatio)设备像素比,它是默认缩放为100%的情况下,设备像素和CSS像素的比值。

window.devicePixelRatio=物理像素/CSS像素目前主流的屏幕DPR=2(iPhone8),或者3(iPhone8Plus)。拿2倍屏来说,设备的物理像素要实现1像素,而DPR=2,所以css像素只能是0.5。一般设计稿是按照750来设计的,它上面的1px是以750来参照的,而我们写css样式是以设备375为参照的,所以我们应该写的0.5px就好了啊!试过了就知道,iOS8+系统支持,安卓系统不支持。

通过JavaScript检测浏览器能否处理0.5px的边框,如果可以,给html标签元素添加个class。

if(window.devicePixelRatio&&devicePixelRatio>=2){vartestElem=document.createElement('div');testElem.style.border='.5pxsolidtransparent';document.body.appendChild(testElem);}if(testElem.offsetHeight==1){document.querySelector('html').classList.add('hairlines');}document.body.removeChild(testElem);div{border:1pxsolid#bbb;}.hairlinesdiv{border-width:0.5px;}优点:简单,不需要过多代码。缺点:无法兼容安卓设备、iOS8以下设备。

利用css对阴影处理的方式实现0.5px的效果

.box-shadow-1px{box-shadow:inset0px-1px1px-1px#c8c7cc;}优点:代码量少、可以满足所有场景缺点:边框有阴影,颜色变浅

同时通过设置对应viewport的rem基准值,这种方式就可以像以前一样轻松愉快的写1px了。在devicePixelRatio=2时,输出viewport:

在devicePixelRatio=3时,输出viewport:

优点:所有场景都能满足一套代码,可以兼容基本所有布局缺点:老项目修改代价过大,只适用于新项目

单条border样式设置:将伪元素设置绝对定位,并且和父元素的左上角对齐,将width设置100%,height设置为1px,然后进行在Y方向缩小0.5倍。

.scale-1px{position:relative;border:none;}.scale-1px:after{content:'';position:absolute;bottom:0;background:#000;width:100%;height:1px;-webkit-transform:scaleY(0.5);transform:scaleY(0.5);-webkit-transform-origin:00;transform-origin:00;}四条boder样式设置:为伪元素设置绝对定位,并且和父元素左上角对其。将伪元素的长和宽先放大2倍,然后再设置一个边框,以左上角为中心,缩放到原来的0.5倍。

THE END
1.From是什么意思问答中心From是什么意思 分类: K12教育 2024-11-17 14:05:11 已浏览:281次 问题描述: From是什么意思,麻烦给回复 2024-11-17 14:05:11 精选答案 风吹过的记忆 已认证 公务员考试,愿你笔下生风,一路过关斩将,金榜题名,前程似... (表示起始点)从…起,始于;(表示开始的时间)从…开始;(表示由某人发出或给出...http://m.gaokaomanfen.com/know/1001921.html
2.transfrom的翻译是:变换中文翻译英文意思,翻译英语atfa tfa[translate] aパッド 垫[translate] ai transferred the proforma invoice for our forwarder in guangzhou. 我在广州转移了形式上的发货票为我们的运输业者。[translate] aS.O.S la fine S.O.S末端[translate] atransfrom transfrom[translate]...http://eyu.zaixian-fanyi.com/fan_yi_14665853
3.TransFromProject张极Jeremy的微博TransFromProject-张极Jeremy 9月16日 17:12 来自vivo S15e #张泽禹张极朱志鑫被袁娅维认可了#优秀的人总会被看到的感谢tia姐 ?收藏 转发 评论 ?1 c +关注 TransFromProject-张极Jeremy 9月16日 08:58 来自vivo S15e #AG夏季赛夺冠# 恭喜AG夺下2024年KPL夏季赛冠军 ...https://weibo.com/7466421871
4.Gradle插件注解javapoet和asm实战在阅读WMRouter和ARouter源码时发现这两个库都用到了自定义注解、自定义gradle插件、Gradle Transfrom API、javapoet和asm库。而我对于这些知识很多我只是了解个大概,或者压根就没听说过。因此ImplLoader这个库主要是用来熟悉这个知识的。当然这个库的实现思路主要参考WMRouter和ARouter。 库的实现原理 用下面这种图概括一下...https://www.imooc.com/article/280634
5.如何使用SQL制作交叉式二维报表?我们之前说TRANSFROM语法如下: TRANSFORMaggfunctionSELECTstatementPIVOTpivotfield [IN (value1[, value2[, ...]])] 以透视表来说,TRANSFORM后的aggfunction,对应的是透视表的值区域,SELECT的statement对应的是透视表的行字段(透视表的行字段肯定是去重归类的),而PIVOT则是对应透视表的列字段。 http://www.360doc.com/content/22/0605/06/13664199_1034584215.shtml
6.csstransform中的矩阵知识刚开始学习css中transfrom的时候,知道它是通过矩阵来完成对元素的控制,移动translate,旋转rotate,缩放scale以及拉伸skew。那时候一看到矩阵就头大了,大学的线性代数都不知道怎么过的,早就还回去了。最近有在看线性代数(还债),通过张鑫旭大神的文章,多少理解了矩阵在transform 中的使用,写这边笔记记录一下。一是用做日...https://www.jianshu.com/p/f6e02a885c36
7.C++TransformListener::lookupTransform方法代码示例示例4: transfromRobotToMapPosition ▲点赞 1▼ voidExplore::transfromRobotToMapPosition(floatx_robot,floaty_robot,float&x_map,float&y_map){ ros::Time now = ros::Time::now(); tf::StampedTransform tfRO; tf_listener_.waitForTransform("/base_link","/odom", now, ros::Duration(1.0)); ...https://vimsky.com/examples/detail/cpp-ex-tf-TransformListener-lookupTransform-method.html
1.TransformDefinition&MeaningMerriamWhat's the difference between 'fascism' and 'socialism'? Popular in Wordplay See All 8 Words with Fascinating Histories 8 Words for Lesser-Known Musical Instruments Birds Say the Darndest Things 10 Words from Taylor Swift Songs (Merriam's Version) ...https://www.merriam-webster.com/dictionary/transform
2.transform’sTransform works to ensure that people of all incomes thrive in a world safe from climate chaos.At Transform, we are dedicated to creating a future where everyone has access to affordable and sustainable transportation options. Join us in building healthihttps://www.transformca.org/
3.TRANSFORMDefinition&MeaningDictionary.com[ verb trans-fawrm; nountrans-fawrm ] Phonetic (Standard)IPA Discover More Other Words From trans·form·a·bleadjective trans·form·a·tiveadjective in·ter·trans·form·a·bleadjective non·trans·form·ingadjective re·trans·formverb (used with object) ...https://www.dictionary.com/browse/transform
4.transformLearn front-end development with high quality, interactive courses from Scrimba. Enroll now!References...transform 属性可以指定为关键字值 none,或者是一个/多个 <transform-function> 值。 https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform
5.Transform详解transfrom由于在机器翻译中,解码过程是一个顺序操作的过程,也就是当解码第 K 个特征向量时,我们只能看到第 K-1 及其之前的解码结果,论文中把这种情况下的multi-head attention叫做masked multi-head attention。transfrom的encoder和decoder整体架构如下: 11.1、Mask ...https://blog.csdn.net/qq_54146731/article/details/134272646
6.transmit是什么意思transmit怎么读中文意思用法transmit 基本解释 vt. 传输, 传染, 传达, 遗传, 发射, 传播 vi. 发射信号, 留传下来 [计] 传送 transmit 词性变化 过去分词:transmitted 现在分词:transmitting 过去式:transmitted 第三人称单数:transmits 中文词源 transmit 传送,发放,播送 trans-,转移,-mit,送出,词源同 emit,mission. ...https://danci.gjcha.com/transmit.html
7.From當代英語文法We use from to show the time or point in time when something starts: Tickets for the concert are on sale from Monday. The finals take place from 1.30 pm on Sunday. We use from to show the level that things begin at, such as numbers or prices: Prices start from £366 per week for...https://dictionary.cambridge.org/zht/%E8%AA%9E%E6%B3%95/%E8%8B%B1%E5%BC%8F%E8%AA%9E%E6%B3%95/origin
8.transfrom的类型有哪些()transfrom的类型有哪些( ) A. scale B. skew C. translate D. rotale E. transition 如何将EXCEL生成题库手机刷题 如何制作自己的在线小题库 > 手机使用 分享 反馈 收藏 举报 参考答案: A B C D 复制 纠错举一反三 新一轮联合国气候变化会议12月2日在()卡托维兹开幕,来自近311个国家的代表将就...https://www.shuashuati.com/ti/4b45c896d51541b8b76f42dd9aa734e3.html?fm=bdbdsbca517dccf897ae291f245785ef991e4
9.GitHubExtract longest transcript or longest CDS transcript from GTF annotation file or gencode transcripts fasta file. - junjunlab/GetTransToolhttps://github.com/junjunlab/GetTransTool
10.CSS:css垂直居中,水平居中,垂直水平居中面试题(五星)2.transfrom实现 .container { width: 300px; height: 300px; position: relative; border: 1px solid #465468; } .inner { width: 100px; height: 100px; position: absolute; margin: auto; left: 50%; transform: translate(-50%, 0); border: ...https://www.nowcoder.com/discuss/452299533674872832
11.技术干货WebRTC系列之GPU方案的探索与落地Transfrom 层实现 Transform 层主要分为三步:输入数据、格式转换、输出数据。输入部分需要关注各种数据类型的输入,做到各种数据输入的兼容;格式转换部分需要满足各种数据类型格式的转换,并且是高效的;输出部分需要关注外部指定的格式要求。 1. 颜色空间的转换YUV 是一种颜色编码方法,主要用在视频、图形处理流水线中。相...https://maimai.cn/article/detail?fid=1689717372&efid=ABA1KQjv_JWvQQ23gnA_MQ
12.transformpython环境快速配置方法python7、hive引用transfrom: 进入hive客户端后,加载上述文件: 1 2 3 ADD ARCHIVE hdfs:///user/tmp/python-env.tgz; ADDFILEhdfs:///user/tmp/test.sh; ADDFILEhdfs:///user/tmp/test_transform.py; 执行hsql: 1 2 3 4 5 6 select transform(id) USING'test.sh'as (id,price1,price2) ...https://www.jb51.net/article/148078.htm
13.unity3d慢mob6454cc6328d1的技术博客Transfrom 2: 例如Transfrom组件: (1)组件实例.DOMove: 平移; (2)组件实例.DOScale: 缩放; (3)组件实例.DORotate 旋转; Tweener常用操作 1: 常用的播放控制函数 组件实例.DOPause(); 暂停一个Tween; 组件实例.DOPlay/DOPlayBackwards/DOPlayForward; 播放 ...https://blog.51cto.com/u_16099177/12549171
14.ECharts图形元素组件(graphic)图形元素的定位和 transfrom 除此以外,可以以 transform 的方式对图形进行平移、旋转、缩放, { type: 'rect', position: [100, 200], // 平移,默认值为 [0, 0]。 scale: [2, 4], // 缩放,默认值为 [1, 1]。表示缩放的倍数。 rotation: Math.PI / 4, // 旋转,默认值为 0。表示旋转的弧度...https://www.w3cschool.cn/echarts_tutorial/echarts_tutorial-3u872dym.html
15.AI大模型研究:NOA和大模型推动ADAS行业巨变2.3.2 三种常见的Transfromer 2.3.3 大模型的根基是Transformer 2.3.4 为什么需要大模型 2.3.5 没有Code,只有NAS 2.3.6 端到端,不添加人工规则 2.3.7 基于Transformer的端到端目标检测 2.3.8 BEV+Transformer是“特征级融合” 2.3.9 已经和即将搭载 AI 大模型的国内车型 ...https://www.dongchedi.com/article/7280338123345871417
16.ImageDT图匠数据的图片拼接技术落地应用,高效实现企业赋能...4. 变换矩阵计算 (transfromation matrix) 通过匹配到的特征点来实现变换矩阵 5. 图像变换 (image warping) 通过图像、变换矩阵,最终获得变换后的图像 当然,这还不算完,在上面所述的技术背后,还涉及到自动拉直、曝光补偿、图片合成、接缝估计等难题。 https://t.m.youth.cn/transfer/index/url/finance.youth.cn/finance_cyxfgsxw/201906/t20190603_11972499.htm
17.Cesium问题汇总1.How to eliminate cesium warning Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true 5.cesium 地图因为transfrom 导致 地图偏移,点击不准的问题 参考文章: 1.解决 cesium 地图因为transfrom 导致 地图偏移,点击不准的问题...https://bibichuan.github.io/posts/329aea90.html
18.NovelCentromericLocioftheWineandBeerYeastDekkera...(1960–2014). supporting information novel centromeric loci of the wine and beer yeastdekkera bruxellensis cen1andcen2 showing 1/16:s1 fig.tif figshare analysis ofcen1andcen2plasmids isolated from yeast transfromants through shuttling toe.coli. plasmids native forms and their restriction pattern ...http://dx.doi.org/10.1371/journal.pone.0161741
19.transfromtutorialYou can use theinverted()method to create a transform which will take you from display to data coordinates: In [41]:inv=ax.transData.inverted()In [42]:type(inv)Out[42]:<class'matplotlib.transforms.CompositeGenericTransform'>In [43]:inv.transform((335.175,247.))Out[43]:array([5.,0.]...https://matplotlib.org/1.3.1/users/transforms_tutorial.html
20.ChristianTranshumanistAssociation:Faith,Technology,and...Since our formation over seven years ago, the Christian Transhumanist Association has been working hard to advance the conversation between Christianity and the leading edges of technological thought. From our first major action funding the Embrace Infant Warmer project—uniting our values of technology...http://www.christiantranshumanism.org/blog