• 移动端解决边框1像素问题


    这是border.css的一段源代码  
        先说明为啥会有1像素这种问题吧 :因为当我们在做移动端 时当适配不同的手机时 每个手机的dpr是不同的 (dpr=物理像素/逻辑像素  物理像素也就是真实呈现在手机屏幕上的大小 逻辑像素则是开发人员写入的像素)
        所以当你设置了 1px的边框 如果在dpr 高的手机上会显得很粗 
        然后我们说明解决方案 和 原理 : 给这个元素设置一个相对定位 然后在给这个元素添加一个伪元素 并且给这个伪元素设置一个绝对定位  微元素动态获取dpr进行等比扩大宽高并且运用c3的transform等比缩放
        下面是sass中的代码
    @charset "utf-8";
    /**
    * @module 背景与边框
    * @description 为元素添加边框(包括1px边框)
    * @method border
    * @version 2.0.0
    * @param {String} $border-width 指定边框厚度(单位为px),默认值:1px,取值与`border-width`属性一致,不同方向代表边框位置 <2.0.0>
    * @param {String} $border-color 指定边框颜色 <2.0.0>
    * @param {String} $border-style 指定边框样式 <2.0.0>
    * @param {String} $radius 指定边框圆角半径,默认值:null <2.0.0>
    */
    @mixin border($border- 1px, $border-color: map-get($base,  border-color), $border-style: solid, $radius: null) {
        // 为边框位置提供定位参考
        position: relative;
        @if $border-width == null {
            $border- 0;
        }
        border-radius: $radius;
        &::after {
            // 用以解决边框layer遮盖内容
            pointer-events: none;
            position: absolute;
            z-index: 999;
            top: 0;
            left: 0;
            // fix当元素宽度出现小数时,边框可能显示不全的问题
            // overflow: hidden;
            content: "020";
            border-color: $border-color;
            border-style: $border-style;
            border- $border-width;
            // 适配dpr进行缩放
            @include responsive(retina1x) {
                 100%;
                height: 100%;
                @if $radius != null {
                    border-radius: $radius;
                }
            }
            @include responsive(retina2x) {
                 200%;
                height: 200%;
                @include transform(scale(.5));
                @if $radius != null {
                    border-radius: $radius * 2;
                }
            }
            @include responsive(retina3x) {
                 300%;
                height: 300%;
                @include transform(scale(.33333));
                @if $radius != null {
                    border-radius: $radius * 3;
                }
            }
            @include transform-origin(0 0);
        }
    }
    下面是若使用styl时的代码
    border($border-width = 1px, $border-color = #ccc, $border-style = solid, $radius = 0)
      // 为边框位置提供定位参考
      position: relative;
     
      if $border-width == null
        $border- 0;
     
      border-radius: $radius;
     
      &::after
        // 用以解决边框layer遮盖内容
        pointer-events: none;
        position: absolute;
        z-index: 999;
        top: 0;
        left: 0;
        // fix当元素宽度出现小数时,边框可能显示不全的问题
        // overflow: hidden;
        content: "020";
        border-color: $border-color;
        border-style: $border-style;
        border- $border-width;
        
        // 适配dpr进行缩放
        @media (max--moz-device-pixel-ratio: 1.49), (-webkit-max-device-pixel-ratio: 1.49), (max-device-pixel-ratio: 1.49), (max-resolution: 143dpi), (max-resolution: 1.49dppx)
           100%;
          height: 100%;
          if $radius != null {
            border-radius: $radius;
          }
        
        @media (min--moz-device-pixel-ratio: 1.5) and (max--moz-device-pixel-ratio: 2.49), (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 2.49),(min-device-pixel-ratio: 1.5) and (max-device-pixel-ratio: 2.49),(min-resolution: 144dpi) and (max-resolution: 239dpi),(min-resolution: 1.5dppx) and (max-resolution: 2.49dppx)
           200%;
          height: 200%;
          transform: scale(.5)
          if $radius != null {
            border-radius: $radius * 2;
          }
        
        @media (min--moz-device-pixel-ratio: 2.5), (-webkit-min-device-pixel-ratio: 2.5),(min-device-pixel-ratio: 2.5), (min-resolution: 240dpi),(min-resolution: 2.5dppx)
           300%;
          height: 300%;
          transform: scale(.33333)
          if $radius != null {
            border-radius: $radius * 3;
          }
     
        transform-origin: 0 0;
    下面是我在开发react项目时运用了styled-component时封装的
    import styled from 'styled-components'
    const border = ({
          component = null,
          width = '1px',
          style = 'solid',
          color = '#ccc',
          radius = 0
    }) => {
          return styled(component)
          `
        position: relative;
        border- ${ width };
        border-radius: ${ radius + 'px' };
        &::after {
          pointer-events: none;
          position: absolute;
          z-index: 999;
          top: 0;
          left: 0;
          content: "";
          border-color: ${ color };
          border-style: ${ style };
          border- ${ width };
          @media
            (max--moz-device-pixel-ratio: 1.49),
            (-webkit-max-device-pixel-ratio: 1.49),
            (max-device-pixel-ratio: 1.49),
            (max-resolution: 143dpi),
            (max-resolution: 1.49dppx) {
               100%;
              height: 100%;
              border-radius: ${ radius + 'px' };
            };
          
          @media
            (min--moz-device-pixel-ratio: 1.5) and  (max--moz-device-pixel-ratio: 2.49),
            (-webkit-min-device-pixel-ratio: 1.5) and  (-webkit-max-device-pixel-ratio: 2.49),
            (min-device-pixel-ratio: 1.5) and (max-device-pixel-ratio: 2.49),
            (min-resolution: 144dpi) and (max-resolution: 239dpi),
            (min-resolution: 1.5dppx) and (max-resolution: 2.49dppx) {
               200%;
              height: 200%;
              transform: scale(.5);
              border-radius: ${ radius * 2 + 'px'};
            };
          
          @media
            (min--moz-device-pixel-ratio: 2.5),
            (-webkit-min-device-pixel-ratio: 2.5),
            (min-device-pixel-ratio: 2.5),
            (min-resolution: 240dpi),
            (min-resolution: 2.5dppx) {
               300%;
              height: 300%;
              transform: scale(.33333);
              border-radius: ${ radius * 3 + 'px' }
            };
            transform-origin: 0 0;
        };
      `
    }
    export default border
  • 相关阅读:
    java框架--Spring XML 配置基础(一)
    工具的使用与安装--oracle卸载
    java web--jsp(4)
    java web--JSP(3)
    洛谷 P3384 【模板】轻重链剖分
    洛谷 P1103 书本整理
    洛谷 P1977 出租车拼车
    洛谷 P1129 [ZJOI2007]矩阵游戏
    洛谷 P2319 [HNOI2006]超级英雄
    洛谷 P1640 [SCOI2010]连续攻击游戏
  • 原文地址:https://www.cnblogs.com/zhangjixiang123/p/9990901.html
Copyright © 2020-2023  润新知