• sass,stylus,styled-component,对一像素线的封装


    原理: 

        给要加1像素的元素一个相对定位,然后给这个元素添加上
    一个伪元素,给这个伪元素一个绝对定位,让他的宽高根据dpr的
    值放大相应的倍数为1放大100%,为2放大200%,为3放大300%
    然后在使用css3属性等比缩放0.5,或0.3333倍,最后拿到的结果
    就是1像素线

    stylus

    使用方法

    border 0 0 0 0,color,solid,2px

    参数1:边框宽度

    参数2:颜色(可选)默认#ccc

    参数3:样式(可选)默认solid

    参数4:圆角(可选)默认0px

    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

    使用方法

    @include border(1px 0 0 0,color,solid,2px)

    参数1:边框宽度

    参数2:颜色(可选)

    参数3:样式(可选)默认solid

    参数4:圆角(可选)默认0px

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

      style-component

    使用方法

    const 组件名 = border({

    component:styled.div``,

    color:'red',(可选)默认#ccc

    '1px 0 0 0',(可选)默认1px

    style:‘solid’(可选)默认solid

    radius:'2px' (可选) 默认0px

    })

    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
    

      

  • 相关阅读:
    Idea 一些常用的小工具
    玩转SpringBoot之定时任务详解
    mysql 创建自定义函数
    mysql
    一段mysql脚本,生成一些随机数时使用。
    mysql 命令行常用操作与mysql too many connections 解决方法
    如何获取多个分组之后的第一条数据
    Linux aliyun ECS CentOS8 服务器安装Redis 部署集群 ,JDK安装与Tomcat配置
    Redis 各个版本下载地址
    centos7安装mysql5.7(rpm安装版)与 Mysql 权限
  • 原文地址:https://www.cnblogs.com/guan-shan/p/10089295.html
Copyright © 2020-2023  润新知