美文网首页
如何解决1px问题

如何解决1px问题

作者: 怕孤_ | 来源:发表于2018-06-29 21:50 被阅读0次
为什么移动端css里面写了1px, 实际看起来比1px粗. 其实原因很好理解:这2个’px’的含义是不一样的. 移动端html的header总会有一句

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

这句话定义了本页面的viewport的宽度为设备宽度,初始缩放值和最大缩放值都为1,并禁止了用户缩放. viewport通俗的讲是浏览器上可用来显示页面的区域, 这个区域是可能比屏幕大的

关于1px问题

1、0.5px边框
在2014年的 WWDC,“设计响应的Web体验” 一讲中,Ted O’Connor 讲到关于“retina
hairlines”(retina 极细的线):在retina屏上仅仅显示1物理像素的边框,开发者应该如何处理呢。
他们曾介绍到 iOS 8 和 OS X Yosemite 即将支持 0.5px 的边框:问题是 retina 屏的浏览器可能不认识0.5px的边框,将会把它解释成0px,没有边框。包括 iOS 7 和之前版本,OS X Mavericks 及以前版本,还有 Android 设备。

解决方法

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

if (window.devicePixelRatio && devicePixelRatio >= 2) {
 var testElem = document.createElement('div');
 testElem.style.border = '.5px solid transparent';
 document.body.appendChild(testElem); } 
if (testElem.offsetHeight == 1) { 
document.querySelector('html').classList.add('hairlines'); }
 document.body.removeChild(testElem); }


div {
  border: 1px solid #bbb;
}
.hairlines div {
  border-width: 0.5px;
}

解决方法2利用css中的transform的缩放属性解决 推荐使用

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>解决1px边框问题</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"/>
    <style>
        .line {position:relative;}
        .line:after {width:200%;height:200%;position:absolute;top:0;left:0;z-index:0;content:"";-webkit-transform:scale(0.5);-webkit-transform-origin:0 0;transform:scale(0.5);transform-origin:0 0;box-sizing:border-box;}

        .list {width:100%;margin:auto;list-style:none;padding:0;}
        .list:after {border:1px solid #ccc;border-radius:10px;}
        .item {padding:10px;}
        .item:after {border-bottom:1px solid #ccc;}
        .item:last-child:after {display:none;}
    </style>
</head>
<body>


<ul class="list line">
    <li class="item line">item001</li>
    <li class="item line">item002</li>
    <li class="item line">item003</li>
    <li class="item line">item004</li>
    <li class="item line">item005</li>
    <li class="item line">item006</li>
    <li class="item line">item007</li>
    <li class="item line">item008</li>
    <li class="item line">item009</li>
    <li class="item line">item010</li>
</ul>


</body>
</html>

这个主要利用after伪类进行缩放。调用公共class,还是很方便的。

>解决方案3background-image 通过设置一张背景图

.border {
  background-image:linear-gradient(180deg, red, red 50%, transparent 50%),
  linear-gradient(270deg, red, red 50%, transparent 50%),
  linear-gradient(0deg, red, red 50%, transparent 50%),
  linear-gradient(90deg, red, red 50%, transparent 50%);
  background-size: 100% 1px,1px 100% ,100% 1px, 1px 100%;
  background-repeat: no-repeat;
  background-position: top, right top,  bottom, left top;
  padding: 10px;
    }

也能实现 但过于麻烦 使用和维护及其不方便

相关文章

  • vue面试题第十三天

    @1移动端1px问题,为什么会有?如何解决? 在开发中,为什么移动端CSS里面写了1px,实际上看起来比1px粗;...

  • web前端面试题@十八(移动端1px问题,为什么会有?如何解决?

    一、移动端1px问题,为什么会有?如何解决? 为什么移动端会产生1px问题呢? 因为UI设计师在最初设计的时候使用...

  • 移动端开发

    # 移动端开发 ### 1. 1px问题如何解决 #### ①伪类 + transform(比较完美) > 原理是...

  • 如何解决1px问题

    为什么移动端css里面写了1px, 实际看起来比1px粗. 其实原因很好理解:这2个’px’的含义是不一样的. 移...

  • 小程序开发中遇到的那些坑

    解决1px无效果的问题; 解决 scroll-view 横向滑动无效的问题; 利用 background-imag...

  • 面试题

    @1: 移动端1px问题,为什么会有?如何解决? 物理像素:移动设备出厂时,不同设备自带的不同像素,也称硬件像素...

  • 【css】解决 1px 问题

  • 1px

    CSS中1px分割线处理移动web开发之像素和DPR详解7种方法解决移动端Retina屏幕1px边框问题IOS基础...

  • 前端常见面试题二十

    目录:1、什么是事件代理且描述事件代理的原理及为什么要用事件代理?2、移动端1px问题,为什么会有?如何解决?3、...

  • React Native笔记四:踩坑记录

    问题一 解决React Native中1px问题 但是在IOS和安卓存在border有显示问题,border可能会...

网友评论

      本文标题:如何解决1px问题

      本文链接:https://www.haomeiwen.com/subject/unkzyftx.html