最近在做一个移动端项目,涉及到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. php环境和使用方法

    下载好所需要的软件 (含phpmywind  phpstudy  navicat for my sql ) 如果Navicat 的试用期过期,请使用通杀navicat 的通杀Navica11_2-XX ...

  2. java_线程

    线程1    与线程相关的概念    线程与进程的区别    线程创建策略    线程组        线程创建策略        并发应用中一般有两种不同的线程创建策略        1直接控制线程 ...

  3. kafka-producer kerberos 原理和配置

    kerberos简单介绍 kerberos这一名词来源于希腊神话“三个头的狗---地狱之门守护者”后来沿用作为安全认证的概念,该系统设计上 采用客户端/服务器结构与DES(Data Encryptio ...

  4. django 获取用户提交的数据 文件 表单

    templates: <div> <form action="/detail" method="post" enctype="mul ...

  5. ClientDataSet

    TField对象的SetText和GetText事件处理函数 使用TField对象的SetText和GetText事件处理函数可方便的解决字段的代码与代码所对应值的显示问题 TSimpleDatase ...

  6. Java继承(上)

    继承的定义 在人类生活中的学徒关系,父子关系等等都属于继承: 但是在程序中是一种类与类的关系 在程序中可以使用父类的方法,也可以添加自己的方法,但是不能选择的继承,要继承就需要把所有的特点全部继承下来 ...

  7. Android jni中回调java的方法

    在上一篇的基础上,添加在C++代码中回调java方法. 代码如下: Demo.java 中添加callback函数, 打印一条log. package com.example.scarecrow.dy ...

  8. Xamarin+Prism开发详解七:Plugin开发与打包测试

    有了上章[Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系]的基础,现在来理解Plugin开发就简单了. 本文实例代码地址:ht ...

  9. windwos下基于exp的提权

    00x1: 本文是基于windwos 补丁的漏洞提权. 其实是一件很简单的工作:如果看成数据库的3张表分别是: 未打补丁表, 补丁漏洞表, 漏洞利用提权程序表. 为一一对应关系,所以就是资源的掌握,以 ...

  10. 通过WebClient模拟post上传文件到服务器

    写在前面 最近一直在研究sharepoint的文档库,在上传文件到文档库的过程中,需要模拟post请求,也查找了几种模拟方式,webclient算是比较简单的方式. 一个例子 这里写一个简单接受pos ...