elementui樣式庫分析——alert


直白點 就是elementui的class命名規范。。

我以elementui中alert組件為例展開。框架用的是sass預編譯器,具體語法在https://www.sasscss.com中查詢。

目錄結構分析

 

主要用到這兩個。BEM是啥?是一個命名規范,具體看這里 https://zhuanlan.zhihu.com/p/33188830

重點說一下mixins.scss 。var.scss可以理解成一個配置文件(顏色、字體大小、圓角大小之類的)。

 

mixins.scss 的任務是動態生成 “el-alert__... ” 這種格式的class

/* BEM
 -------------------------- */

/**
  插值
  套一層class="el-.."
  在一個選擇器內聲明變量(如:$B、$E),嵌套在里面的其他選擇器都可以訪問到它
*/
@mixin b($block) {
  $B: $namespace+'-'+$block !global;

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

/**
  插值
  套一層class="el-title__..."
  at-root:輸出到根層級上
*/
@mixin e($element) {
  $E: $element !global;
  $selector: &;
  $currentSelector: "";
  @each $unit in $element {
    $currentSelector: #{$currentSelector + "." + $B + $element-separator + $unit + ","};
  }

  @if hitAllSpecialNestRule($selector) {
    @at-root {
      #{$selector} {
        #{$currentSelector} {
          @content;
        }
      }
    }
  } @else {
    @at-root {
      #{$currentSelector} {
        @content;
      }
    }
  }
}
/**
  插值
  套一層class="...__content"
*/
@mixin m($modifier) {
  $selector: &;
  $currentSelector: "";
  @each $unit in $modifier {
    $currentSelector: #{$currentSelector + & + $modifier-separator + $unit + ","};
  }

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

alert.scss文件

/*
  ** m 代表修飾符,用來描述b(block) 如:blue,green
  */
  @include m(blue){
    background: $--color-success;
  }
  @include m(green){
    background: $--color-success;
  }

  /*
  ** e 代表元素,b(block)中的元素,如:head,foot
  */
  @include e(head){
    background: $--color-white;
  }

/*------------編譯后------------*/

.el-alert--blue {
    background: #67C23A; }
  .el-alert--green {
    background: #67C23A; }
  .el-alert__head {
    background: #FFFFFF; }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM