内容简介:鉴于前两节构建组件用到了很多形如 :class="[prefixCls + '__icon' + '--' + type,iconType]" 这种鬼样子的class,突然想到竟然忘了把这么重要的操作捋一下思路,具体为什么要这样搞,相信各位做前端的大佬一定知道EBM这个概念,如果不知道可参考前端领域的BEM到底是什么这篇文章。以上由变量生成的class最终效果形如:那么我们css就可以这么写:
从零开始构建自己的vue组件库番外篇
写在前面(这段话只适合新手,高手请绕行)
鉴于前两节构建组件用到了很多形如 :class="[prefixCls + '__icon' + '--' + type,iconType]" 这种鬼样子的class,突然想到竟然忘了把这么重要的操作捋一下思路,具体为什么要这样搞,相信各位做前端的大佬一定知道EBM这个概念,如果不知道可参考前端领域的BEM到底是什么这篇文章。
好了开整
以上由变量生成的class最终效果形如:
wui__message__icon--info icon-info
那么我们css就可以这么写:
.wui__message__icon--info{
height:200px;
width:200px;
}
emmmmm,那是不可能的,写这么长的类名是不可能的,这辈子都不可能的。如果BEM都用上了还不用sass或less那肯定是疯了,sass版BEM方案如下:
//mixin.scss
$elementSeparator: '__';
$modifierSeparator: '--';
@function containsModifier($selector) {
$selector: selectorToString($selector);
@if str-index($selector, $modifierSeparator) {
@return true;
} @else {
@return false;
}
}
@function selectorToString($selector) {
$selector: inspect($selector);
$selector: str-slice($selector, 2, -2);
@return $selector;
}
@function getBlock($selector) {
$selector: selectorToString($selector);
$modifierStart: str-index($selector, $modifierSeparator) - 1;
@return str-slice($selector, 0, $modifierStart);
}
@mixin b($block) {
.#{$block} {
@content;
}
}
@mixin e($element) {
$selector: &;
@if containsModifier($selector) {
$block: getBlock($selector);
@at-root {
#{$selector} {
#{$block+$elementSeparator+$element} {
@content;
}
}
}
} @else {
@at-root {
#{$selector+$elementSeparator+$element} {
@content;
}
}
}
}
@mixin m($modifier) {
@at-root {
#{&}#{$modifierSeparator+$modifier} {
@content;
}
}
}
//该sass版BEM方案来自https://www.sass.hk/skill/sass94.html
具体参考message组件的样式(传送门)
@import 'mixin.scss';
@include b(wui){
@include e(message){
position: fixed;
width: auto;
@include rounded(4px);
line-height: 1;
left: 50%;
top: 20px;
height:auto;
transform: translateX(-50%);
background-color: #edf2fc;
transition: opacity .3s,transform .4s;
overflow: hidden;
padding: 15px 15px 15px 20px;
background-color:$lightColor;
@include shadow(0,0,3px,#ccc);
z-index: 1000;
i{
float: left;
}
@include e(icon--info){
color: $primaryColor;
}
@include e(icon--success){
color: $successColor
}
@include e(icon--warning){
color: $warningColor
}
@include e(icon--error){
color: $errorColor
}
@include e(content){
float: left;
@include e(body){
margin: 0 10px;
}
}
@include e(closeTxt){
float: right;
cursor: pointer;
color: $primaryColor
}
@include e(iconbox){
float: right;
cursor: pointer;
}
}
}
.message-fade-enter-active {
animation: bounce-in .5s;
}
.message-fade-leave-active {
animation: bounce-out .5s;
}
@keyframes bounce-in {
0% {
top:0;
opacity: 0.2
}
100% {
top:20px;
width: auto;
opacity: 1
}
}
@keyframes bounce-out {
0% {
top:20px;
opacity: 1
}
100% {
top:0;
opacity: 0
}
}
以上所述就是小编给大家介绍的《从零开始构建自己的vue组件库番外篇》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
编程珠玑(英文版・第2版)
[美] Jon Bentley / 人民邮电出版社 / 2010-8 / 39.00元
多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位列前列。正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”。这些文章是《ACM通讯》最受欢迎的专栏文章,最终结集为两部书出版。本书为第一卷,主要讨论计算机科学中最本质的问题:如何正确选择和高效地实现算法。 在书中,作者选取许......一起来看看 《编程珠玑(英文版・第2版)》 这本书的介绍吧!