美文网首页
BEM & Sass:写更优雅的css

BEM & Sass:写更优雅的css

作者: merrylmr | 来源:发表于2020-06-14 13:41 被阅读0次

前言

项目自定义组件非常多,虽然要求组件使用BEM来命名,但是大家并没有很好的遵守,导致写的scss很不优雅。
所以借项目改版的机会,好好的梳理了一下组件的命名规范,及更好的使用scss,而不是停留在表面。

此篇文章大纲如下:

  • 对比改版前后组件的css
  • BEM基本介绍+使用
  • Sass的进阶使用
  • 优雅的结合BEM+Sass

新旧组件css对比

旧版



新版:



解释一下:b:表示block;e:表示element;m:表示modifier。

新版更加的清晰:element、modifier一目了然;更加的简洁、class精简。

BEM

BEM是由Yandex团队创造的Css class的命名方法,为了解决重复命名问题和前端命名更加规范化等。

A New Front-End Methodology: BEM

B:表示block
E:表示element;
M:表单modifier

通常如下格式:
block__element--modifier

与element通过__链接
与modifier 通过--链接

基本使用

.block{}
.block__element{}
.block--modifier{}

Sass

css的扩展语言,实现以“编程”语言写css。

基本的用法:如 嵌套写法、父级选择器:&、变量:$、插值语句 #{}等就不介绍了,可以去看官网文档。

介绍几个比较实用的语法:

@each

  1. 多个赋值
@each $animal, $color, $cursor in (puma, black, default),
                                  (sea-slug, blue, pointer),
                                  (egret, white, move) {
  .#{$animal}-icon {
    background-image: url('/images/#{$animal}.png');
    border: 2px solid $color;
    cursor: $cursor;
  }
}
  1. map
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {
  #{$header} {
    font-size: $size;
  }
}

混合指令

  • @mixin:定义混合指令
@mixin b($block) {
. #{$block} {
    color:red;
  }
}
  • @include :引用混合指令
 @include b('block');

// 编译为:
 .block {
   color:red;
 }
  • 向混合样式中导入内容
@mixin b($block) {
. #{$block} {
    @content;
  }
}

// 使用
@include b('block') {
 color:red;
}

// 编译为
.block {
  color:red;
}

完整的文档:请查看https://www.sass.hk/docs/

BEM+Sass

BEM结合Sass:可以更加简洁、高效、清晰的写Css

  • minxin.scss
$namespace:'zz';
$element-separator:'__';
$modifier-separator :'--';
$state-prefix:'is-'
@mixin b($block) {
  $B: $namespace+'-'+$block !global;

  .#{$B} {
    @content;
  }
}

@mixin e($element) {
  $E: $element !global;
  $selector: &;
  $currentSelector: "";
  @each $unit in $element {
    $currentSelector: #{$currentSelector + "." + $B + $element-separator + $unit + ","};
  }
  @at-root {
    #{$currentSelector} {
      @content;
    }
  }
}

@mixin m($modifier) {
  $selector: &;
  $currentSelector: "";
  @each $unit in $modifier {
    $currentSelector: #{$currentSelector + & + $modifier-separator + $unit + ","};
  }

  @at-root {
    #{$currentSelector} {
      @content;
    }
  }
}


@mixin when($state) {
  @at-root {
    &.#{$state-prefix + $state} {
      @content;
    }
  }
}
  • 使用上面的mixin.scss
@import './minxin.scss'

@include b('tab') {
 border:1px solid red;
 @include e('header') {
...
}
@include m('top'){
...
}
}

相关文章

  • CSS 的进化

    CSS 的进化: CSS Evolution: From CSS, SASS, BEM, CSS Modules ...

  • BEM & Sass:写更优雅的css

    前言 项目自定义组件非常多,虽然要求组件使用BEM来命名,但是大家并没有很好的遵守,导致写的scss很不优雅。所以...

  • CSS常见分层方法

    概要 为什么要分层? SMACSS BEM SUIT ACSS ITCSS 参考的网站 CSS, Sass, SC...

  • 如何更好的使用BEM

    BEM是由Yandex团队提出的一种CSS Class 命名方法,旨在更好的创建CSS/Sass模块。他需要遵循一...

  • Sass用法

    什么是Sass Sass 是对 CSS 的扩展,是一种CSS预处理器,让 CSS 语言更强大、优雅。 它允许你使用...

  • Ionic in Action MEAP v06 - 07

    1.SASS (1)概念:sass是一个css的预处理器,是css的超集;这意味着你可以定期写CSS和Sass了解...

  • sass入门级

    Sass 是对 CSS 的扩展,让 CSS 语言更强大、优雅。 它允许你使用变量、嵌套规则、 mixins、导入等...

  • Sass | Sass的一些基本概念

    Sass 是对 CSS 的扩展,让 CSS 语言更强大、优雅。 它允许你使用变量、嵌套规则、mixins、导入等众...

  • web开发小部分单词

    Sass=scss编程 Sass 是css预处理器 css预处理器用编程思维写一些可以转成css的东西 优点:更加...

  • 成长(17/2000)——SASS1

    配套 sass中文网[https://www.sass.hk/docs/] sass是写css的工具,它可以简化我...

网友评论

      本文标题:BEM & Sass:写更优雅的css

      本文链接:https://www.haomeiwen.com/subject/ahllnhtx.html