基于scss基础下构建BEM体系,可以更快的完成class书写。
在项目中新建一个文件夹mixins,在该文件夹下新建3个文件,分别是mixins.scss文件、config.scss文件和vars.scss文件。
在mixins.scss文件中:
@import "config";
@import "vars";
/**
构建 BEM 体系
*/
@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 + "," };
}
#{$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;
}
}
}
//响应式相关的API
@mixin res($key,$map:$--breakpoints) {
@if map-has-key($map, $key) {
@media only screen and #{inspect(map-get($map,$key))}{
@content;
}
}@else{
@warn "key不存在"+#{$key};
}
}
@mixin icon_select_active($background,$margin){
display: inline-block;
width:3px;
height:32px;
background:$background;
margin-right:$margin;
}
@mixin tab_select_active($borderWidth,$borderHeight,$background){
display: inline-block;
width:$borderWidth;
height:$borderHeight;
background:$background;
position: absolute;
bottom: 0;
left: 0;
}
在config.scss文件中定义好class使用的连接符:
$namespace: 'xm';
$element-separator: '__';
$modifier-separator: '--';
$state-prefix:'is-';
在vars.scss文件中提前定义好一些颜色变量、字体大小变量、padding大小变量、margin大小变量等:
$primary-color:#3199F5;
$primary-color-light:#66b1ff;
$primary-color-dark:#3a8ee6;
/* 按钮的常规边框颜色 */
$border-color-gray:#45B6E5;
$color-success:#45B6E5;
$color-success-light:#4DCBFF;
$color-success-dark:#3DA2CC;
$color-info:#909399;
$color-info-light:#a6a9ad;
$color-info-dark:#82848a;
$color-warning:#e6a23c;
$color-warning-light:#050504;
$color-warning-dark:#cf9236;
$color-danger:#f56c6c;
$color-danger-light:#f78989;
$color-danger-dark:#dd6161;
$userBg:#e1e4e6;
/* Break-point
--------------------------*/
$--sm: 768px !default;
$--md: 992px !default;
$--lg: 1200px !default;
$--xl: 1920px !default;
$--breakpoints: (
'xs' : (max-width: $--sm - 1),
'sm' : (min-width: $--sm),
'md' : (min-width: $--md),
'lg' : (min-width: $--lg),
'xl' : (min-width: $--xl)
);
/* 登录页面的变量颜色 */
/* 输入框的默认背景色 */
$color-input:#1F5166;
/* 输入框的提示语颜色 */
$color-input-placeholder:#9AABB3;
/* 字体颜色 */
$color-font-default:#fff;
$color-font-login:#45B6E5;
$color-font-login-msg: #849399;
$color-upload:#3199F5;//上传文字颜色
/* 弹框字体颜色 */
$color-font-detail:#484B4D;
/* 变量颜色的存放点 */
/* menu */
$menuBackground: #292B36;
$menuHoverColor: #FAFAFC;
$menuTextColor: #ACAFBF;
$menuIsActiveBackground: #1E212E;
$menuIsActiveborder: #45B6E5;
$mainRightBackground:#fff;
/* head */
$headBackground: #fff;
$headTextColor: #606664;
$headIconColor:#C0C8CC;
$headIconBorder:#D8E6E1;
/* 消息蓝点颜色*/
$headRedColor:#45B6E5;
$headCountColor:#fff;
/* homebody */
$bodyBackground:#F7F9FA;
$tip-font-color: #909699;
$bodyPaddingBackground:#F5F6FA;
$redColor: #FF3246;
$orangeColor: #FF9B00;
$fontDefaultColor: #303233;
$greenColor: #27BD7E;
$buleColor: #45B6E5;
$fontNumColor: #606466;
$tabsBorderColor: #DCDFE0;
$fontTimeColor: #BBBEBF;
$wechatBackground: #FAFBFC;
$tagBackground: #F0F3F5;
$boxShadow:rgba(0,78,129,0.1);
$boxBg:#edf1f2;
/* select-input */
$selectHoverBackground:#E6F7FF;
$selectDefalutBackground: #fff;
$selectHoverColor:#45B6E5;
$selectTextColor:#323333;
$tableHoveBackground: #F5F7FA;
$selectUnableBackground: #F5F8FA;
$selectBorderShadow: rgba(0,54,77,0.1);
$selectHoverBackground: #EBF9FF;
$selectIconColor:#B4BCBF;
/* 表格标题的背景颜色 */
$tableTitleBackground:#F7F9FA;
$tableUserRemarks: #909699;
/* 标题label and content字体颜色 */
$el-from-item-label-color: #606466;
$el-from-item-content-color: #303233;
$el-from-item-border-color: #DCDFE0;
/* 用户管理tabs */
$userMenuBackground: #EBF9FF;
$userMenuBorder: #EDEFF0;
/* button */
$buleBtn :#45B6E5;
$text999999: #999999;
$text33: #333;
$buttonBorder: #C0C8CC;
$grayBg:#F5F8FA;
$HighlightBg:#E0F6FF;
/*table*/
$textWarning: #FF9B00;
$textSuccess:#27BD7E;
$textDanger: #FF3246;
$paginationActiveBack:#45B6E5;
$paginationBack:#fff;
$paginationBorder:#D7DADB;
/*icon颜色*/
$iconDefault:#b4bcbf;
$iconYellow:#ffd545;
$iconNoClick:#d8e1e6;
/* 卡片 颜色 */
$card-shadow-color:#00364D;
$card-font-color: #303233;
$card-label-color: #606466;
$card-time-color: #909699;
$card-picture-time-color: #A8AFB3;
$card-more-icon: #B4BCBF;
/* tab 颜色 */
$tab-font-color: #9DACB3;
$tab-active-color: #303233;
$tab-border-color: #45B6E5;
$tab-bottom-border: #EDEFF0;
$li-border-color: #EBEEF0;
/*checkBox*/
$checkboxColor:#27BD7E;
//列表边框
$lineBorder:#EDEFF0;
$fontSize:14px ;
/**
scss for循环
*/
//@for $i from 1 through 3 {
//.item-#{$i} { width: 2em * $i; }
//}
/**
less for循环
*/
//.generate-fonts(40);
//.generate-fonts(@n, @i: 10) when (@i =< @n) {
// .font@{i} {
// font-size: 10px + @i;
// }
// .generate-fonts(@n, (@i+2));
//}
在userInfo.vue文件中简单的使用:
<template>
<div class='xm-bottom'>
<div class="xm-bottom__btn">
<span class="xm-bottom__btn--button">确定</span>
<span class="xm-bottom__btn--button">取消</span>
</div>
</div>
</template>
<style scoped lang="scss">
@import '~@/mixins/mixins.scss';
@include b(btnBox) {
width: 240px;
padding: 20px;
@include e(btn) {
display: flex;
justify-content: center;
align-items: center;
@include m(button) {
padding: 8px 12px;
margin: 0 12px;
text-align: center;
background: #4DCBFF;
color: #fff;
}
}
}
</style>