webapp 1px显示两倍的问题

公司最近换新首页,按照设计师的要求《大家都在逛》的分割线要1个像素。

.span-3{
    width:33.3333%;
    &:not(:first-child){
        &:before{
            content: " ";
            display: block;
            width: 1rem/16*1;
            height: 100%;
            background-color: rgb(224,224,224);//#e0e0e0;
            float: left;
        }
    }
    img{
        max-width: 1rem/16*106;
    }
}

然后效果就出来了

然后请设计师Q图的时候设计师一口咬定说,分割线的尺寸不对,但是看了一下代码确实确实是width:0.0625rem;然后用chrome看了一下

然后设计MM说手机上显示就成了2px,我看看手机上显示效果

好像也是1px也啊,然后设计师MM一口咬定说错了,没办法,美女都说错了难道不行,直接截图用ps量一下就不知道了。

毕竟有图有真相嘛

orz....尼玛真的是2px,到这里我只想说设计MM你的眼睛里有一个尺子吗?这么准?

好吧,既然真的错了,只好找办法改咯。

后来各种尝试,不管是将rem改成什么单位都还是存在这样的问题,

突然想到是不是viewport缩放的方式有问题,

将原因的值减小1半

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

,然后看了一下。果然有效!

虽然这种方式可行但是,我们公司现在的页面都是基于1:1的,如果为了这样的问题那整体改动比较大。

看来只能想想其他方法,我有想过用1px的图片平铺,但是这样的方式是不是太。。。

如果没有解决方法的方法。

突然间,想到一个有意思的做法,先上效果图,ps:有对比了才感觉不是1px,再次佩服设计师mm的眼睛。

做法是:通过阴影来处理,至于为什么阴影的效果不会出现两倍的bug,还请有知道的同学告诉我,谢谢!

box-shadow:0 1px 1px -1px rgb(0,0,0) inset;

偶然发现这1px问题算是一个经典问题:

好吧我们先来看看淘宝怎么处理这个问题的吧

var metaEl = doc.createElement(‘meta‘);
var scale = isRetina ? 0.5:1;
metaEl.setAttribute(‘name‘, ‘viewport‘);
metaEl.setAttribute(‘content‘, ‘initial-scale=‘ + scale + ‘, maximum-scale=‘ + scale + ‘, minimum-scale=‘ + scale + ‘, user-scalable=no‘);
if (docEl.firstElementChild) {
    document.documentElement.firstElementChild.appendChild(metaEl);
} else {
    var wrap = doc.createElement(‘div‘);
    wrap.appendChild(metaEl);
    documen.write(wrap.innerHTML);
}

是通过动态添加meta的方式,判断是否是retina屏幕来动态添加scale的值。

一般边框或者分割线需要精确的以1px的视觉展示出来,普通的方案无法满足要求。在高清方案下,所有的1px线都能完美重现视觉稿。

div { border: 1px solid #ECECEC; width: 8rem; height: 5rem; border-radius: 0.2rem; }

手机淘宝的flexible设计与实现

时间: 2024-08-01 22:47:32

webapp 1px显示两倍的问题的相关文章

解决盒子浮动时margin会显示两倍的美观问题

当给几个大小一样有boder的盒子浮动时,会出现margin自动加起来的结果. 此时可以给每个盒子一个margin-left:-border的长来实现很好的效果,这样右边的盒子会把左边盒子的右边border压住,如图所示. 还可以使用伪元素实现动态效果,代码如下. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Co

3星|丹尼尔&#183;卡尼曼《高情商领导力》:职场中情商比智商重要两倍

高情商领导力 全书是丹尼尔·卡尼曼几年前在<哈佛商业评论>等媒体上发表的文章.主要内容是:情商比智商更重要:领导类型有6种各有利弊:专注力非常重要. 由于是文章合集,每一篇都不够深入,合起来还是相对零散,读后有点失望,作为一本书深度不太够,本来可以详细展开说的. 译者应该是台湾人,翻译总体还不错,但是读起来总是感觉有点怪异,直到看到了“执行长”这个台湾词汇,大陆一般直接叫CEO.另外P146“顺流”一词现在一般是翻译为“心流”. 总体评价3星,有参考价值. 以下是书中一些内容的摘抄,[]中是我

(HDU)1303 -- Doubles(两倍)

题目链接:http://vjudge.net/problem/HDU-1303 合适的处理输入,把数据读入数组,对数组升序排序(减少循环次数) 用一个双重循环看每一个数,判断是不是前面出现的数的两倍. #include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <string> #incl

使用seek()方法,将Hadoop文件系统中的一个文件在标准输出上显示两次

//使用seek()方法,将Hadoop文件系统中的一个文件在标准输出上显示两次 package com; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apac

iOS中一个页面显示两个tableview的情况

一个页面显示两个tableview,并且每个tableview上的数据都不一样,一般用以下方法: 首先建一个继承自UIView的类,来表示用来切换tableview的view //在view的类的.h文件中 #import <UIKit/UIKit.h> @protocol MyAttentionHeadViewDelegate <NSObject> //建一个叫MyAttentionHeadViewDelegate的一个代理 @optional //两个代理方法(可选择实现opt

OpenCV show two cameras 同时显示两个摄像头

用OpenCV同时显示两个摄像头的内容的代码如下: #include <iostream> #include <stdio.h> #include <tchar.h> #include <cv.h> #include <cvaux.h> #include <highgui.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { CvCapture* cam0 = c

游戏并购再创高峰,第三季度高达122亿美金,是去年总额的两倍

最近,游戏公司并购开创了新纪录.在2014年的前三个季度里,并购额高达122亿美金,Xsolla今天为大家带来伦敦game investment bank Digi-Capital,这个数字是去年总额的两倍多. 今年有5大交易推动了并购热潮,有微软25亿收购Minecraft 制作商 Mojang:Facebook20亿收购了Oculus VR:巨人网络16亿进行私有化:亚马逊9亿7千万收购游戏直播视频网站Twitch:中基控股以9亿6千万购买了FunPlus的资产: 微软-Mojang的交易据

POJ 2807:两倍

AC CODE: 这里有个要注意的地方就是“数对中一个数是另一个数的两倍.”这一句话. 看到了这一句话,可能你就会想到用(n1 / n2 == 2 || n2 / n1 == 2)这样的判断语句来做判断,如果真是这样,那 5 / 2怎么办? 所以,这里我们要做一个小转变,那就是:(n1 * 2 == n2  ||  n2 * 2 == n1) import java.util.Scanner; public class Main { private static int[] getNumbers

1809:两倍

描述 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍. 比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍. 输入 一行,给出2到15个两两不同且小于100的正整数.最后用0表示输入结束.输出一个整数,即有多少个数对满足其中一个数是另一个数的两倍. 样例输入 1 4 3 2 9 7 18 22 0 样例输出 3 来源翻译自Mid-Central USA 2003的试题 1 #include