CSS架构之Acss层(中)

354 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

上一章我们说到可以把抽离的样式放到 Acss 层中。那对于Acss中逻辑重复的代码,我们是不是可以更近一步优化呢?接下让我们看看,如何优化他。

优化Acss层

// setting.scss
$color-primary: #FF5777;
$color-white: #FFFFFF;
$color-black: #000000;
// acss.scss
[bg-primary] {
  background-color: #FF5777;
}
[bg-white] {
  background-color: #FFFFFF;
}
[bg-black] {
  background-color: #000000;
}

如上,我们的Acss层,下面可能有如上代码,我们可以看到,都是设置background-color,那我们是不是可以通过一个循环得到呢?结果是可以的。

背景样式优化

// acss.scss
@each $style in (primary $color-primary, white $color-white, black $color-black) {
  [bg-#{nth($style, 1)}] {
    background-color: #{nth($style, 2)};
  }
}

如上,我们就可以实现了。

当然,我们也可以对透明度做一个简写。

// acss.scss
@each $i in 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 {
  [bgo#{$i * 10}] { 
    background-color: rgba(0, 0, 0, $i);
  }
}

上面代码,就如同下面代码一样。

[bgo1] {
  background-color: rgba(0, 0, 0, 0.1);
}
[bgo2] {
  background-color: rgba(0, 0, 0, 0.2);
}
[bgo3] {
   background-color: rgba(0, 0, 0, 0.33;
}

...

[bgo10] {
  background-color: rgba(0, 0, 0, 1);
}

边框优化

@for $i from 1 through 10 {
  [radius#{$i}] { 
    border-radius: #{$i}px;
    overflow: hidden;
  }
}

[circle] {
  border-radius: 100rem;
}

字体间距优化

@for $i from 13 through 50 {
  [fz#{$i * 2}] { 
    font-size: #{$i * 2}px;
  }
}

间距等等等,

$direction: (l left, r right, t top, b bottom);
@for $i from 1 through 30 {
  @each $type in m, p, v, h, a{
    
    @if $type == m {
      @each $d in $direction{
        [m#{nth($d, 1)}#{$i}] {
          margin-#{nth($d, 2)}: #{$i}px;
        }
      }
    }

    @else if $type == p {
      @each $d in $direction{
        [p#{nth($d, 1)}#{$i}] {
          padding-#{nth($d, 2)}: #{$i}px;
        }
      }
    }

    @else if $type == h {
      [ph#{$i}] {
        padding-left: #{$i}px;
        padding-right: #{$i}px;
      }

      [mh#{$i}] {
        margin-left: #{$i}px;
        margin-right: #{$i}px;
      }
    }

    @else if $type == v {
      [pv#{$i}] {
        padding-top: #{$i}px;
        padding-bottom: #{$i}px;
      }
    }

    @else {
      [pa#{$i}] {
        padding: #{$i}px;
      }
    }
  }
}

好,今天就到这里了。Bye!