我的对scss的错误认知

Author Avatar
Peipei Wong 2月 23, 2019
  • 在其它设备中阅读本文章

之前的post介绍的重构的评论组件,我的重构工作仅仅从coding的复杂度去考虑,却没有进行深入的研究,例如渲染原理等等。用react实现实际上是不是比重构后更快,毕竟算法的复杂度已经降到O(n)了。这是一个很大的失误。

继上面的错误之后,有犯了一个很粗鄙的错误。没有正确的认识到scss作为css的预处理的作用。目前项目中scss的作用只用到变量定义和嵌套的。在我查看bootstrap的源代码的时候,粗略的看了一下,嗯,感受到的是一种形散神不散的感觉,就像它是一张网,但是你只是将它们看成一条一条的线。这个时候赶忙去看scss的doc,才发现它既然是一种预处理的语言,相对于css,它必然包含更多更好的功能。

变量

变量也可以进行计算哦。

$red: red;

body {
  color: $color;
}
`
嵌套
.btn {
  color: #fff;

  &.t-red {
    background: $red
  }
}
namespace
.btn {
  font {
    size: 1.6rem;
    weight: normal;
  }
}
`
each and map

这个功能真的很棒很棒,超级棒!棒到我都不想写之前的code。

$theme-colors: (
  'blue': $blue,
  'pink': $pink,
  'green': $green,
  'yellow': $yellow,
  'red': $red
);

.badge {
  color: #fff;

  @each $color, $value in $theme-colors {
    &.t-#{$color} {
      background-color: $value;
    }
  }
}
`
function

看到设计图里面很多颜色都是带透明度的,但是场景是不需要用到rgba,于是写了一个将带有透明度的颜色转化成不带透明度的颜色,带透明的颜色实际上是和白色以透明度去混合得到。

@function rgba-to-rgb($rgba, $background: #fff) {
  @return mix(rgb(red($rgba), green($rgba), blue($rgba)), $background, alpha($rgba) * 100%);
}
`
避免使用@extend

之前看到的文章里面专门来讲这个事情,不要使用@extend而是使用@inlcude,举个栗子:

h3 {
  font-size: 1.8rem;
}

.home h3 {
  font-size: 2rem;
}

.h3 {
  @extend h3;
}
`

这时候得到的css是:

h3, .h3 {
  font-size: 1.8rem;
}

.home h3, .home .h3 {
  font-size: 2rem;
}
`

你仅仅想要继承的是1.8的这个样式,但同时也把2的样式给继承了。

还有更多更好的功能去探索。