zoukankan      html  css  js  c++  java
  • 移动端1px线适配问题-------适配各种编译CSS工具 stylus sass styled-componet实现方法

    其实在stylus与sass中实现移动端1像素线各个手机设备的适配问题的原理是一样的,

    首先我还是先介绍一下原理和所依赖的方法

    原理:其实他们都是通过css3的媒体查询来实现的

    步骤思路:

    1、给目标元素进行相对定位

    2、给目标元素添加伪元素 ::after/before  并进行绝对定位

    3、判断DPI   1DPI   100%   --------------使用媒体查询

                          2DPI   200%

                          3DPI   300%

    4、通过css3中的transform scale等比缩放

    下面是具体的代码,使用时只需引入代码  在style里直接写   border: 1px 0 0 0, #ccc   即可使用

    在stylus中

     
    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;

    在sass中

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

    在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

    亲自使用过超级好使

    如果本文对您有帮助,请抬抬您的小手,点下右下角的推荐, ^-^,当然如果看了这篇博客对您有帮助是我最开心的事,毕竟赠人玫瑰,手有余香, ^-^,如果这篇博客没有帮助到您,那就只能说一声抱歉啦

      

  • 相关阅读:
    函数对象
    函数的基本使用
    文件处理
    字符编码
    基本数据类型及内置方法二
    流程控制(if while for)
    Django中ajax的基本用法
    CBV之Django中View类部分源码分析
    前端基础之BOM和DOM
    css基础
  • 原文地址:https://www.cnblogs.com/katydids/p/9948546.html
Copyright © 2011-2022 走看看