Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 324|回复: 0

解决CSS移动端1px边框问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-30 10:05:35 | 显示全部楼层 |阅读模式

    移动项目开发中,安卓或者IOS等高分辨率屏幕会把1px的border渲染成2px来显示,网上搜了一下,解决方法如下:

    一、利用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;}
    
            .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,还是很方便的。

     

    二、JS判断是否支持0.5px边框,是的话,则输出类名hairlines  

    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);
    }

    .hairlines .box {}

    目前在用这个方法,使用很方便,无须多余的class,可惜支持的不是很好,IOS8+以上才可以。

     

    三、box-shadow 阴影

    -webkit-box-shadow:0 1px 1px -1px rgba(0, 0, 0, 0.5);

    最先用的就是这个方法,IOS没问题。很多安卓机显示就是坨翔,黑乎乎的描边。。

     

    四、background-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;
        }

    也能实现效果,使用很不方便

     

    五、图片

    .border-image{
        border-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAYAAABP2FU6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiPnH8zH/G////MzAxAAHTyRNn/wMEGABpvQm9g9TJ1QAAAABJRU5ErkJggg==") 2 0 stretch;
    border-width: 0px 0px 1px;
    }

    显示效果有点模糊,而且万一以后要修改个颜色,那不坑爹了。

     

    所以,目前推荐第一种方法。

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 04:40 , Processed in 0.061336 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表