最近在做一个移动端项目,涉及到1像素问题

其实质就是移动端的css里写1px,看起来比1px粗,这就是物理像素和逻辑像素的区别。物理像素和逻辑像素之间存在一个比例关系,在Javascript中可以用window.devicePixelRatio来获取,也可以用媒体查询的-webkit-min-device-pixel-ratio来获取,具体的比例差距由设备决定

如何解决这个问题才是重点,下面集中提出解决方案:

1.媒体查询利用设备像素比缩放,设置小数像素

css可以写成这样:
.border{border:1px solid #999} @media screen add(-webkit-min-device-pixel-radio:2) {
.border{border 0.5px solid #999}
}
@media screen add(-webkit-min-device-pixel-radio:3) {
.border{border 0.33333px solid #999}
}//具体的边框值按照比例计算即可

2.使用box-shadow模拟边框

利用css对阴影处理的方式实现0.5px的效果
.box{
box-shadow: 0px 1px 1px -1px black;}

复习下box-shadow属性的用法:

box-shadow: h-shadow v-shadow blur spread color inset;
描述
h-shadow 必需。水平阴影的位置。允许负值。
v-shadow 必需。垂直阴影的位置。允许负值。
blur 可选。模糊距离。
spread 可选。阴影的尺寸。
color 可选。阴影的颜色。请参阅 CSS 颜色值。
inset 可选。将外部阴影 (outset) 改为内部阴影。

3.利用viewport+rem

同时设置对应viewport的rem基准值

在devicePixelRatio=2时,输出viewport:

<meta name="viewport" content="initial-scale=0.5 maximum-scale=0.5 minimum-scale=0.5,user-scalable=no>

利用js修改动态修改:

var viewport=document.querySelector("meta[name=viewport")//返回文档中匹配指定 CSS 选择器的一个元素。
if(window.devicePixelRatio==1){
viewport.setAttribute('content','width=device-width','initial-scale=1,maximum-scale=1,minimum-scale=1,user-scale=no')
}
if(window.devicePixelRatio==2){
viewport.setAttribute('content','width=device-width','initial-scale=0.5,maximum-scale=0.5,minimum-scale=0.5,user-scale=no')
}
if(window.devicePixelRatio==3){
viewport.setAttribute('content','width=device-width','initial-scale=0.3333,maximum-scale=0.3333,minimum-scale=0.3333,user-scale=no')
}
var element=document.documentElement
var fontsize=10*(element.clientWidth/320)+'px';
element.style.fontSize=fontsize

4伪类+transform实现

先把原先元素的border去掉,然后利用:before或者:after重做border,并transform的scale缩小一半,原先的元素相对定位,新做的border绝对定位

  .box{
position: relative;
border: none;
}
.box:after{
content: '';
position: absolute;
bottom: 0;
left:0
background: #000000;
width: 100%;
height: 1px;
-webkit-transform: scaleY(0.5);
}

移动端的1px边框问题的更多相关文章

  1. css移动端适配 1px边框的解决方案

    .border{ width: 100px; height: 100px; position: relative; } //加上媒体查询更严谨一些 dpr为2的设配才进行缩放,dpr为1的设备边框就是 ...

  2. 移动端1px边框

    问题:移动端1px边框,看起来总是2倍的边框大小,为了解决这个问题试用过很多方法,用图片,用js判断dpr等,都不太满意, 最后找到一个还算好用的方法:伪类 + transform 原理是把原先元素的 ...

  3. [半转]1px边框 移动端

    半转的意思是借鉴参考,搬砖,加了一些自己的想法. 在移动端里,因为存在2倍像素的问题,所以很多时候,移动端上的1px边框并不是意义上的.从下图红色框看到dpr:2.0 ,表示1px等于2倍的物理像素. ...

  4. 移动端视网膜(Retina)屏幕下1px边框线 解决方案

    原因: 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在devicePixelRatio=2的retina屏下会显示成2px. 但在IOS8中,已经支持0.5px了,那就意味着, 在de ...

  5. 7种方法解决移动端Retina屏幕1px边框问题

    在Reina(视网膜)屏幕的手机上,使用CSS设置的1px的边框实际会比视觉稿粗很多.在之前的项目中,UI告诉我说我们移动项目中的边框全部都变粗了,UI把他的设计稿跟我的屏幕截图跟我看,居然真的不一样 ...

  6. 移动端1px边框实现

    问题描述:移动端iPhone上的1px边框看起来像2px那么粗.问题分析:不同的手机有不同的像素密度,在window对象中有一个devicePixelRatio属性,它可以反应设备的像素与css中的像 ...

  7. 7种方法实现移动端Retina屏幕1px边框效果

    在Reina(视网膜)屏幕的手机上,使用CSS设置的1px的边框实际会比视觉稿粗很多.在之前的项目中,UI告诉我说我们移动项目中的边框全部都变粗了,UI把他的设计稿跟我的屏幕截图跟我看,居然真的不一样 ...

  8. 移动端Retina屏边框线1px 显示为2px或3px问题解决方法

    我们在开发移动端web项目时经常遇到设置border:1px,但是显示的边框却为2px或是3px粗细,这是因为设备像素比devicePixelRatio为2或3引起的.   1.何为“设备像素比dev ...

  9. 移动端1px边框问题

    用于手机端受dpr的影响,实际开发中,PC端和移动端展示的效果不太一样,往往在PC端显示的是1px,移动端常常是偏粗一些. 解决办法: 主要是用到伪类及缩放.在需要画边框的元素上,设置一个伪类,它的伪 ...

随机推荐

  1. day07 深浅拷贝

    今日概要 深浅拷贝(重点) 文件操作 详细内容 直接赋值: 直接将对象的引用赋值给另一个对象 v1=1000 v2=v1 #v1 v2指向同一个内存地址 print(id(v1),id(v2))#相等 ...

  2. Python开发 基礎知識 3.類別&方法 (bool & str) (未完待續)

    類別 可使用type()查看 內建 [ 布爾:bool (Boolen) 字串:str (String) 數字:int (Integer) 小數:float 列表:list 元祖:tuple 字典:d ...

  3. 代码本色 用编程模拟自然系统 (Daniel Shiffman 著)

    https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.7/p5.js http://www.box2d.org http://www.jbox2d.org ...

  4. Object.is()

  5. Windows 下最佳的 C++ 开发的 IDE 是什么?

    作者:渡世白玉链接:https://www.zhihu.com/question/19589089/answer/30312199来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  6. springMVC框架返回JSON到前端日期格式化

    在Controller类中,需要返回JSON的方法上加上注释@ResponseBody,这是必须的. 然后spring-servlet.xml配置如下: <?xml version=" ...

  7. [转][C#]程序的动态编译

    转自:https://blog.csdn.net/clb929/article/details/51385399 附 文件下载

  8. C++Primer第五版——习题答案详解(二)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第3章 字符串.向量和数组 练习3.2 一次读入一整行 #include<iost ...

  9. Java中字段、属性、成员变量、局部变量、实例变量、静态变量、类变量、常量

    首先看个例子: package zm.demo; public class Demo { private int Id;//成员变量(字段).实例变量(表示该Id变量既属于成员变量又属于实例变量) p ...

  10. ubuntu 16.04 安装中文语言包

    安装中文语言包 sudo apt-get install  language-pack-zh-han* 安装gnome包 sudo apt-get install   language-pack-gn ...