zoukankan      html  css  js  c++  java
  • 移动端1px像素的设置?

    1px解决方案—:before, :after与transform

    之前说的frozenUI的圆角边框就是采用这种方式, 构建1个伪元素, 将它的长宽放大到2倍, 边框宽度设置为1px, 再以transform缩放到50%.

    需要注意<input type="button">是没有:before, :after伪元素的

    优点: 其实不止是圆角, 其他的边框也可以这样做出来

    缺点: 代码量也很大, 占据了伪元素, 容易引起冲突

    .radius-border{
        position: relative;
    }
    @media screen and (-webkit-min-device-pixel-ratio: 2){
        .radius-border:before{
            content: "";
            pointer-events: none; /* 防止点击触发 */
            box-sizing: border-box;
            position: absolute;
             200%;
            height: 200%;
            left: 0;
            top: 0;
            border-radius: 8px;
            border:1px solid #999;
            -webkit-transform(scale(0.5));
            -webkit-transform-origin: 0 0;
            transform(scale(0.5));
            transform-origin: 0 0;
        }
    }

    6. transform: scale(0.5) 方案 - 推荐: 很灵活

      在以上的用法种,无非逃不开一种思想,就是将1px缩小为0.5px来展示,然而。0.5px并不是所有的设备或浏览器都支持,就考虑用媒体查询或viewport将其缩放比例。其实1像素问题的产生基本发生在设置边框或分割线的时候,场景并不覆盖全局样式,因此,直接缩放需要设置的元素,才是我们真正需要的。tranform就能实现这个需求。

    1. 设置height: 1px,根据媒体查询结合transform缩放为相应尺寸。
    div {
        height:1px;
        background:#000;
        -webkit-transform: scaleY(0.5);
        -webkit-transform-origin:0 0;
        overflow: hidden;
    }
    

    2.用::after::befor,设置border-bottom:1px solid #000,然后在缩放-webkit-transform: scaleY(0.5);可以实现两根边线的需求

    div::after{
        content:'';100%;
        border-bottom:1px solid #000;
        transform: scaleY(0.5);
    }
    

    3.用::after设置border:1px solid #000; 200%; height:200%,然后再缩放scaleY(0.5); 优点可以实现圆角,京东就是这么实现的,缺点是按钮添加active比较麻烦。

    .div::after {
        content: '';
         200%;
        height: 200%;
        position: absolute;
        top: 0;
        left: 0;
        border: 1px solid #bfbfbf;
        border-radius: 4px;
        -webkit-transform: scale(0.5,0.5);
        transform: scale(0.5,0.5);
        -webkit-transform-origin: top left;
    }
    
    # 6.5 媒体查询 + transfrom 对方案1的优化
    /* 2倍屏 */
    @media only screen and (-webkit-min-device-pixel-ratio: 2.0) {
        .border-bottom::after {
            -webkit-transform: scaleY(0.5);
            transform: scaleY(0.5);
        }
    }
    
    /* 3倍屏 */
    @media only screen and (-webkit-min-device-pixel-ratio: 3.0) {
        .border-bottom::after {
            -webkit-transform: scaleY(0.33);
            transform: scaleY(0.33);
        }
    }





  • 相关阅读:
    图的建立的两种方法(领接矩阵,领接表)
    蛇形填数
    谁买单,猴子选大王等类似题目不同解法!!!
    根据前序中序写后序(正确写法)
    月份牌
    子网掩码
    android 之 surfaceView和普通View的重绘使用
    android 之 Toast通知的使用
    viewSub惰性装载器
    对文件进行加密
  • 原文地址:https://www.cnblogs.com/duanzhange/p/9294769.html
Copyright © 2011-2022 走看看