移动端高清适配方案(解决图片模糊问题1px细线问题)哥哦狗子

>>>>物理像素、设备独立像素和设备像素比

在CSS中我们一般使用px作为单位,需要注意的是,CSS样式里面的px和物理像素并不是相等的。CSS中的像素只是一个抽象的单位,在不同的设备或不同的环境中,CSS中的1px所代表的物理像素是不同的。在PC端,CSS的1px一般对应着电脑屏幕的1个物理像素,但在移动端,CSS的1px等于几个物理像素是和屏幕像素密度有关的。

物理像素(physicalpixel)

物理像素又被称为设备像素、设备物理像素,它是显示器(电脑、手机屏幕)最小的物理显示单位,每个物理像素由颜色值和亮度值组成。所谓的一倍屏、二倍屏(Retina)、三倍屏,指的是设备以多少物理像素来显示一个CSS像素,也就是说,多倍屏以更多更精细的物理像素点来显示一个CSS像素点,在普通屏幕下1个CSS像素对应1个物理像素,而在Retina屏幕下,1个CSS像素对应的却是4个物理像素(参照下文田字示意图理解)。

设备独立像素(device-independentpixel)

设备独立像素又被称为CSS像素,是我们写CSS时所用的像素,它是一个抽像的单位,主要使用在浏览器上,用来精确度量Web页面上的内容。

设备像素比(devicepixelratio)

设备像素比简称为dpr,定义了物理像素和设备独立像素的对应关系:设备像素比=物理像素/设备独立像素。

>>>>viewport

viewport就是设备上用来显示网页的那一块区域,但viewport又不局限于浏览器可视区域的大小,它可能比浏览器的可视区域要大,也可能比浏览器的可视区域要小。在默认情况下,一般来讲,移动设备上的viewport都是要大于浏览器可视区域的,这是因为考虑到移动设备的分辨率相对于桌面电脑来说都比较小,所以为了能在移动设备上正常显示那些传统的为桌面浏览器设计的网站,移动设备上的浏览器都会把自己默认的viewport设为980px或1024px(也可能是其它值,这个是由设备自己决定的),但带来的后果就是浏览器会出现横向滚动条,因为浏览器可视区域的宽度是比这个默认的viewport的宽度要小的。

明确三种不同的viewport视口:

visualviewport可见视口,指屏幕宽度

layoutviewport布局视口,指DOM宽度

idealviewport理想适口,使布局视口就是可见视口即为理想适口

获取屏幕宽度(visualviewport)的尺寸:

window.innerWidth/Height获取DOM宽度(layoutviewport)的尺寸:

document.documentElement.clientWidth/Height设置理想视口idealviewport:

该meta标签的作用是让layoutviewport的宽度等于visualviewport的宽度,同时不允许用户手动缩放,从而达到理想视口。

meta[name="viewport"]里各参数的含义为:

width:设置layoutviewport的宽度,为一个正整数,或字符串”width-device”。

initial-scale:设置页面的初始缩放值,为一个数字,可以带小数。

minimum-scale:允许用户的最小缩放值,为一个数字,可以带小数。

maximum-scale:允许用户的最大缩放值,为一个数字,可以带小数。

height:设置layoutviewport的高度,这个属性对我们并不重要,很少使用。

user-scalable:是否允许用户进行缩放,值为“no”或“yes”。

>>>>rem适配方案

适配是为了使页面在不同手机设备上,相对保持统一的效果。移动端自适应方案很多,有百分比布局,弹性盒模型布局等,但是最好用的要数rem布局了。

rem是相对于根元素的字体大小的单位,我们可以根据设备宽度动态设置根元素的font-size,使得以rem为单位的元素在不同终端上以相对一致的视觉效果呈现。下面介绍3种根据屏幕宽度设置rem基准值的方法。(注:为了换算方便,以下三种方法都用1:100的比例,即1rem=100px。)

用JS设置rem基准值

/*设计稿是750,采用1:100的比例,用1rem表示100px,font-size为100*(clientWidth/750)*/(function(doc,win){vardocEl=doc.documentElement,resizeEvt='orientationchange'inwindow'orientationchange':'resize',recalc=function(){varclientWidth=docEl.clientWidth;if(!clientWidth)return;docEl.style.fontSize=100*(clientWidth/750)+'px';};if(!doc.addEventListener)return;win.addEventListener(resizeEvt,recalc,false);doc.addEventListener('DOMContentLoaded',recalc,false);})(document,window);用密集的媒体查询设置font-size

/*设计稿是750,采用1:100的比例,用1rem表示100px,100*(100/750)=13.333以min-width:750px时font-size:100px为基准,min-width每缩小100px,font-size就缩小13.3333px,如需更密集的媒体查询可以按照这个对照关系设置。*/@mediascreenand(min-width:320px){html{font-size:42.6667px;}}@mediascreenand(min-width:375px){html{font-size:50px;}}@mediascreenand(min-width:425px){html{font-size:56.6667px;}}@mediascreenand(min-width:768px){html{font-size:102.4px;}}用单位vw设置font-size

1vw等于屏幕可视区宽度(的可视区域的百分之一。

/*设计稿是750,采用1:100的比例,用1rem表示100px,font-size为100*(100vw/750)*/html{font-size:13.3334vw;}注:兼容性不是很好。

了解了物理像素、设备独立像素、设备像素比和viewport这几个重要概念后,来看一下移动端开发中,由于屏幕分辨率导致的两个经典问题:图片模糊问题和1px细线问题。(注:为了叙述简洁,以下多倍屏均只叙述2倍Retina屏,其它屏幕同理。)

>>>>图片模糊问题

一个位图像素是栅格图像(如:png,jpg,gif等)最小的数据单元。每一个位图像素都包含着一些自身的显示信息(如:显示位置,颜色值,透明度等)。理论上,1个位图像素对应于1个物理像素,图片才能得到完美清晰的展示。对于dpr=2的Retina屏幕而言,1个位图像素对应于4个物理像素,由于单个位图像素不可以再进一步分割,所以只能就近取色,导致图片看起来比较模糊,如下图。

对于图片模糊问题,比较好的方案就是用多倍图片(@2x)。如:一个200×300(CSSpixel)的img标签,对于dpr=2的屏幕,用400×600的图片,如此一来,位图像素点个数就是原来的4倍,在Retina屏幕下,位图像素点个数就可以跟物理像素点个数形成1:1的比例,图片自然就清晰了。

如果普通屏幕下,也用了两倍图片,会怎样呢?

在普通屏幕下,200×300(CSSpixel)img标签,所对应的物理像素个数就是200×300个,而两倍图片的位图像素个数是200×300×4个,所以就出现一个物理像素点对应4个位图像素点,但它的取色也只能通过一定的算法取某一个位图像素点上的色值,这个过程叫做(downsampling),肉眼看上去虽然图片不会模糊,但是会觉得图片缺少一些锐利度,或者是有点色差,如下图。

所以最好的解决办法是:不同的dpr下,加载不同的尺寸的图片。不管是通过CSS媒体查询,还是通过JS条件判断都是可以的。

>>>>1px细线问题

在上文我们已经知道,CSS像素为1px宽的直线,对应的物理像素是不同的,可能是2px或者3px,而设计师想要的1px宽的直线,其实就是1物理像素宽,如下图。

对于CSS而言,可以认为是border:0.5px;,这是多倍屏下能显示的最小单位。然而,并不是所有手机浏览器都能识别border:0.5px,有的系统里,0.5px会被当成为0px处理,那么如何实现这0.5px呢?网上有很多解决方法,比如border-image图片、background-image渐变、box-shadow等,因为这些方案不太好,所以不做赘述了,我推荐两种方法:用媒体查询根据dpr用“伪元素+transform”对边框进行缩放;用JS根据屏幕尺寸和dpr精确地设置不同屏幕所应有的rem基准值和initial-scale缩放值。

伪元素+transform

构建1个伪元素,border为1px,再以transform缩放到50%。

/*设计稿是750,采用1:100的比例,font-size为100*(100vw/750)*/.border-1px{position:relative;}@mediascreenand(-webkit-min-device-pixel-ratio:2){.border-1px:before{content:"";position:absolute;left:0;top:0;width:100%;height:1px;border-top:1pxsolid#D9D9D9;color:#D9D9D9;-webkit-transform-origin:00;transform-origin:00;-webkit-transform:scaleY(0.5);transform:scaleY(0.5);}}用JS计算rem基准值和viewport缩放值

/*设计稿是750,采用1:100的比例,font-size为100*(docEl.clientWidth*dpr/750)*/vardpr,rem,scale;vardocEl=document.documentElement;varfontEl=document.createElement('style');varmetaEl=document.querySelector('meta[name="viewport"]');dpr=window.devicePixelRatio||1;rem=100*(docEl.clientWidth*dpr/750);scale=1/dpr;//设置viewport,进行缩放,达到高清效果metaEl.setAttribute('content','width='+dpr*docEl.clientWidth+',initial-scale='+scale+',maximum-scale='+scale+',minimum-scale='+scale+',user-scalable=no');//设置data-dpr属性,留作的csshack之用,解决图片模糊问题和1px细线问题docEl.setAttribute('data-dpr',dpr);//动态写入样式docEl.firstElementChild.appendChild(fontEl);fontEl.innerHTML='html{font-size:'+rem+'px!important;}';相较与于上文rem适配方案里“用JS计算rem基准值”的方案,这个“用JS计算rem基准值和viewport缩放值”的方案可以解决1px细线问题。表格以2倍Retina屏做比较,其他多倍屏同理。

用JS根据屏幕尺寸和dpr精确地设置不同屏幕所应有的rem基准值和initial-scale缩放值,这个JS方案已经在完美解决了1px细线问题,我们不需要再做任何事情,至于图片模糊问题,只需要根据data-dpr的值动态加载不同尺寸的图就可以了。

THE END
1.狗子图片表情包可爱合集熊猫办公精心为用户挑选80张高清精美狗子图片、支持专业级狗子设计素材下载,更多风格的狗子,免抠元素,卡通手绘素材图片、图标图案、免抠矢量图,尽在熊猫办公。https://www.tukuppt.com/speciall/gouzi4376.html
2.犬張子图片壁纸犬張子高清壁纸大全触站为您精选的犬張子图片壁纸,犬張子高清图片,包括犬張子同人高清图片壁纸,同人插画,插画手绘,找犬張子图片壁纸,就上触站http://m.huashi6.com/tags/274669
3.狗子(金边)漫画图片生活随手拍动漫漫评九歌,召来!九歌一出,晚宁必死...但 白猫的干净,是狗子叛了心,担了恨,辱了名,才护住的 狗子的干净,是白猫剖了魂,舍了名,焚了琴,才换来的 雨轴 4 裴星煦的颜值跟狗子倒也不分伯仲,只是…唉!礼卿苦啊! 执着于色相 0 都是明明都是在意意对方的…… 小虾吃巧克力 12...https://www.kuaikanmanhua.com/webs/world/123604834830979235978
4.一组有趣的狗子图片无配字原图系列表情包一些很有趣的狗子图片,没有配字的原图,喜欢二次创作的朋友可以把这些狗子图片收藏起来自己配字做表情包https://www.doutub.com/series_lists/details/BQxPDzyaa6sQnZWaKAhDyMBA
5.狗狗壁纸高清萌宠狗子壁纸狗狗壁纸 | 高清萌宠狗子壁纸 2020-09-29 13:08 喜欢什么壁纸 留言区告诉小编,都会安排的 图片表情来源网络 如侵联删 图片不错,点个赞! 先定个小目标‘好看’超过100+ 返回搜狐,查看更多平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。https://www.sohu.com/a/421644982_470094
6.朋友圈人头狗身子九宫格拼图恶搞别人单身狗八张图朋友圈狗身子八张图哪里有?朋友圈最近比较火的有狗换头的整人九宫格拼图,很多小伙伴都想要一张,下面一起来看看小编给大家提供的资源吧! 朋友圈狗身子八张图 示例完整版图片: 八张拼图: 使用方法:按照下面的顺序将图片放在朋友圈,然后在第一个图片位置放朋友的头像就可以使用了。 http://www.mnw.cn/keji/internet/2070334.html
7.178个宠物狗品种图片大全,宠物狗品种大全小渝婷子 世界上宠物狗有很多种,采用美国AKC标准,全球大概有178个品种的宠物狗,这些狗狗按体型、功能、特点等可以划分成不同的类别。按体型:超小型、超大型、小型、中型、大型。按功能:家庭犬、玩具犬、工作犬、梗类犬、牧羊犬、狩猎犬、枪猎犬。按特点:聪明、粘人、不掉毛、不爱叫、友善、会看家、耐热、易训。https://www.meipian.cn/4jnqhq8m
8.地狗子图片30张(美景图片网)地狗子图片 地狗子图片 地狗子图片 地狗子图片 地狗子图片 下一页 相关的图集... 马尔泰犬图片 柯基狗狗图片大全图 杜宾狗狗图片 可爱小狗照片 可爱的小狗图片 比熊狗狗图片 地狗子图片 阿富汗猎犬图片 柴犬幼犬的图片 贵宾狗狗图片 灰泰迪幼犬图片 戴孝狗图片 柴狗图片 所...http://www.k2r2.com/dongwu_v24131/
1.狗子图片大全狗子高清图片下载一只狗一只猫可爱宠物动物狗狗小狗小猫猫咪 草地上玩耍的狗可爱宠物动物狗狗小狗 可爱宠物动物狗狗小狗小猫猫咪 草地上玩耍的狗可爱宠物动物狗狗小狗 两只狗在草坪上玩耍 可爱宠物动物狗狗小狗 一只狗一只猫宠物狗宠物猫灰猫蓝猫动物 在草地上奔跑的狗子小灵狗在公园里玩 ...https://www.51miz.com/so-tupian/3709168.html
2.狗子图片狗子素材图片大全摄图网汇聚狗子图片大全:狗子素材、狗子高清图片、狗子背景图片等。你可以找狗子设计灵感、摄影创意,我们欢迎您下载狗子vrf正版授权图片,商用无压力https://699pic.com/image/414839.html
3.狗子狗子图片、狗子高清图片,堆糖精选最新狗子图片大全,一键收藏免费下载。https://www.duitang.com/album/?id=89895314
4.狗子图片头像图片狗子图片头像动态图SOOGIF为您提供狗子图片头像动图大全,这里可以找到全部的狗子图片头像gif动态图片,以及狗子图片头像动图表情包供您下载使用,本次SOOGIF共为您找到206396张关于狗子图片头像的动图内容。https://www.soogif.com/gif/633224-3-0-0.html
5.狗子cheems设计图其他动漫动画设计图库狗子cheems图片,狗子 cheems模板下载,手机动漫 壁纸 狗子 cheems 壁纸桌面,狗子 cheems设计素材,昵图网:图片共享和图片交易中心https://www.nipic.com/show/36501955.html
6.谢谢你,狗子斗图表情包图片谢谢你,狗子(背着刀戴草帽流泪)https://www.52doutuwang.com/xiexienigouzi.html
7.小狗抬花轿大班教案1出示背景图及一顶可移动的花轿图片,教师引导幼儿观察,讲述幼儿理解的诗歌内容。 师:山脚下有什么? 猜一猜谁会坐在花轿里? 让我们来看一看谁坐在里面?(掀开轿帘) 2出示八只小狗图片 师:平时都是人坐轿,今天可奇怪了坐只大老虎那么是谁来抬轿子? https://www.ruiwen.com/jiaoan/4299404.html
8.求一张狗子仰视镜头的图片,之前在街上经常看到的动物萌宠区狗子是在右下角的 https://bbs.hupu.com/40821473.html
9.讨论狗子肚皮上的小黑点(有图)有后续啦湿巾图片我放在下面啦,大家合理参考~ 如题,突然发现狗子肚皮上有好多小黑点,刚开始用湿巾擦了一下发现能掉色,黄黄的就有点儿像油脂一样,又在组里搜索了一下发现有这种情况,就没有太在意。今天发现好像突然严重了。狗子因为没有洗澡和打狂犬,并且说拜宠清可能太刺激,还是在一个半月两个月以前在医院进行的内驱,...https://www.douban.com/group/topic/218518746
10.狗子敲木鱼图片表情包可爱在这个充满欢笑和温馨的世界,一张张可爱的狗子敲木鱼图片表情包正在悄然改变着我们的交流方式。这些表情包以其独特的艺术魅力,不仅拉近了人与人之间的距离,也让那些忙于工作的人们在疲惫的生活中找到了欢愉和安慰。此刻,让我们一同领略这份源于狗子敲木鱼的表情包带来的温暖与爱意。 https://www.sousou.com/qmy/856155.html
11.超详细的编码实战,让你的springboot应用识别图片中的行人汽车...在《三分钟:极速体验JAVA版目标检测(YOLO4)》一文中,咱们体验了YOLO4强大的物体识别能力,如下图,原图中的狗子、人、马都被识别并标注出来了: 如果您之前对深度学习和YOLO、darknet等有过了解,相信您会产生疑问:Java能实现这些? 没错,今天咱们就从零开始,开发一个SpringBoot应用实现上述功能,该应用名为yolo-demo...https://cloud.tencent.com/developer/article/1912828
12.人与狗亲子鉴定大部分人看到给狗狗做亲子鉴定,首先产生的疑问就是给狗狗做亲子鉴定是图啥呀?难道狗子也有万贯家财需要继承吗?其实给狗狗做亲子鉴定主要是考虑这些方面。 ⊕ 不想狸猫换太子 给狗狗做亲子鉴定主要是防止一些商家拿一些品种不纯正的狗狗充当纯种狗高价卖出去,而铲屎官单纯看幼犬的外表又看不出来狗狗的品种是否纯正,等...http://www.ankangdna.com/article/63313.html
13.狗缨子的功效与作用,狗缨子的副作用药效用法图片药品通为您提供狗缨子的功效与作用,并且包括狗缨子的图片,狗缨子的药效,狗缨子的用法,狗缨子的副作用,为您了解使用狗缨子提供有价值的信息。https://wapypk.39.net/c901643/
14.阿尔卑香小狗子微密图片分享,微博认证的颜值女神大家好啊,我是你们熟悉的老掌柜,今天要给你们介绍一位火辣可爱、颜值与身材的完美结合——阿尔卑香小狗子。这位微博认证的颜值博主,这个头衔可不是摆设。她经常在个人微博上分享自己的美照,简直是美艳动人,身材好得让人直呼过瘾。关注她的粉丝可真是赚到了,毕竟美女的图片那可是犹如美味的大餐,香艳且饱满。不仅有...https://www.tourshexian.com/2986.html