scss中&代表什么

最近在学习scss,于是看了elment-ui的源码,其中有几处不是很理解,直接上代码吧

@function selectorToString($selector) { 
  @debug '这个是' + $selector;
  $selector: inspect($selector); //cast to string
  @debug '这个是2' + inspect($selector);
  @debug '这个是2' + inspect('.block');
  $selector: str-slice($selector, 2, -2); //remove brackets 
  @debug '这个是3' + $selector;
  @return $selector; 
}

@mixin b($block) { 
  .#{$block} { 
    @content; 
  } 
}

@mixin e($element) { 
  $selector: &; 
  @debug '&是' + &;
  @if selectorToString($selector) {
    @content;
  }
}

@include b(block) { 
  background: red; 
  @include e(kindlebook) {
    background: gray;
  }
}
// $selector: selectorToString(block);
@error 1;

上面代码,打印如下:
图片描述

我想问的问题是:
为什么在函数selectorToString中,第一次打印的是.block,而第二次打印的就带上了括号呢?并且还加上了逗号,这也是我再看源码的时候对那句注释//remove brackets百思不得其解的原因。
或者更进一步的说,& 在scss中获取到底是什么样的存在。

阅读 11.2k
1 个回答

&代表元素自身,这里的&就是.block

.block {
  color: &;
  color: inspect(&);
}

编译结果为:

.block {
  color: .block;
  color: (.block,);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题