feat: bem.scss

This commit is contained in:
FairyEver 2021-10-26 10:09:39 +08:00
parent e6dfed0d28
commit 532dfb9738
7 changed files with 44 additions and 134 deletions

View File

@ -1,11 +1,13 @@
@import './var.scss';
@import './function.scss';
$bem-namespace: 'd2' !default;
$bem-element-separator: '__' !default;
$bem-modifier-separator: '--' !default;
$bem-state-prefix: 'is-' !default;
// ------------------------------
// => BEM from ElementUI
// ------------------------------
@mixin b($block) {
$B: $namespace+'-'+$block !global;
$B: $bem-namespace+'-'+$block !global;
.#{$B} {
@content;
@ -76,3 +78,40 @@
@content;
}
}
@function selectorToString($selector) {
$selector: inspect($selector);
$selector: str-slice($selector, 2, -2);
@return $selector;
}
@function containsModifier($selector) {
$selector: selectorToString($selector);
@if str-index($selector, $bem-modifier-separator) {
@return true;
} @else {
@return false;
}
}
@function containWhenFlag($selector) {
$selector: selectorToString($selector);
@if str-index($selector, '.' + $bem-state-prefix) {
@return true
} @else {
@return false
}
}
@function containPseudoClass($selector) {
$selector: selectorToString($selector);
@if str-index($selector, ':') {
@return true
} @else {
@return false
}
}
@function hitAllSpecialNestRule($selector) {
@return containsModifier($selector) or containWhenFlag($selector) or containPseudoClass($selector);
}

View File

@ -1,4 +1,4 @@
@import 'd2-projects/d2-utils/sass/bem.scss';
@import 'd2-admin/assets/style/utils/bem.scss';
@include b(flex) {
display: flex;

View File

@ -1,4 +1,4 @@
@import 'd2-projects/d2-utils/sass/bem.scss';
@import 'd2-admin/assets/style/utils/bem.scss';
@include b(icon) {
display: inline-block;

View File

@ -1,53 +0,0 @@
@import './bem.scss';
@include b(animate-spin) {
animation: spin 1s linear infinite;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@include b(animate-ping) {
animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
}
@keyframes ping {
75%, 100% {
transform: scale(2);
opacity: 0;
}
}
@include b(animate-pulse) {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: .5;
}
}
@include b(animate-bounce) {
animation: bounce 1s infinite;
}
@keyframes bounce {
0%, 100% {
transform: translateY(-25%);
animationTimingFunction: cubic-bezier(0.8, 0, 1, 1);
}
50% {
transform: translateY(0);
animationTimingFunction: cubic-bezier(0, 0, 0.2, 1);
}
}

View File

@ -1,39 +0,0 @@
// --------+---------------------
// => BEM
// --------+---------------------
@function selectorToString($selector) {
$selector: inspect($selector);
$selector: str-slice($selector, 2, -2);
@return $selector;
}
@function containsModifier($selector) {
$selector: selectorToString($selector);
@if str-index($selector, $bem-modifier-separator) {
@return true;
} @else {
@return false;
}
}
@function containWhenFlag($selector) {
$selector: selectorToString($selector);
@if str-index($selector, '.' + $bem-state-prefix) {
@return true
} @else {
@return false
}
}
@function containPseudoClass($selector) {
$selector: selectorToString($selector);
@if str-index($selector, ':') {
@return true
} @else {
@return false
}
}
@function hitAllSpecialNestRule($selector) {
@return containsModifier($selector) or containWhenFlag($selector) or containPseudoClass($selector);
}

View File

@ -1,32 +0,0 @@
// ------------------------------
// => helper
// ------------------------------
// clear float
@mixin clearfix {
$selector: &;
@at-root {
#{$selector}::before,
#{$selector}::after {
display: table;
content: '';
}
#{$selector}::after {
clear: both
}
}
}
// turn on gpu
@mixin gpu {
perspective: 1000px;
backface-visibility: hidden;
transform: translateZ(0);
}
// text
@mixin text-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

View File

@ -1,5 +0,0 @@
$namespace: 'd2' !default;
$bem-element-separator: '__' !default;
$bem-modifier-separator: '--' !default;
$bem-state-prefix: 'is-' !default;