对于下面同一段css,它们的编译效率是不一样的。css
一、使用@extend:基础类icon会出如今编译后的css文件中,即便它可能只是拿来被继承,而不是做为icon这个class单独使用浏览器
//基础类icon .icon { transition: background-color ease .2s; margin: 0 .5em; } .error-icon { @extend .icon; /* error specific styles... */ } .info-icon { @extend .icon; /* info specific styles... */ }
编译为:spa
.icon, .error-icon, .info-icon { transition: background-color ease .2s; margin: 0 .5em; } .error-icon { /* error specific styles... */ } .info-icon { /* info specific styles... */ }
二、使用占位符选择器(以%
做为开头的选择器): 它自身不会出如今编译后的CSS文件中, 只会出如今@extend
了它的那些选择器中,通常用在制做 Sass 样式库的时候。code
上例中, 用%icon
替换.icon,CSS中不会出现
blog.icon
类:
.error-icon, .info-icon { transition: background-color ease .2s; margin: 0 .5em; } .error-icon { /* error specific styles... */ } .info-icon { /* info specific styles... */ }
三、使用@mixin: %
选择器和无参数mixin差很少, 在浏览器中产生的效果是同样的, 可是编译后的CSS有很大不一样,一样没有icon这个类,可是minx中继承自icon的部分编译了两次,有冗余继承
@mixin icon { transition: background-color ease .2s; margin: 0 .5em; } .error-icon { @include icon; /* error specific styles... */ } .info-icon { @include icon; /* info specific styles... */ }
编译为:ci
.error-icon { transition: background-color ease .2s; margin: 0 .5em; /* error specific styles... */ } .info-icon { transition: background-color ease .2s; margin: 0 .5em; /* info specific styles... */ }
综上所述:it
对于基础类会单独做为class使用时,使用@extend。io
在制做样式库时,使用占位符编译上效率更好。编译
对于大量重复使用的基础样式,能够使用@mixin。