| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- /**
- * 混合宏
- */
- @import "config";
- @import "function";
- /**
- * BEM,定义块(b)
- */
- @mixin b($block) {
- $B: $namespace + "-"+ $block !global;
- .#{$B} {
- @content;
- }
- }
- /* 定义元素(e),对于伪类,会自动将 e 嵌套在 伪类 底下 */
- @mixin e($element...) {
- $selector: &;
- $selectors: "";
- @if containsPseudo($selector) {
- @each $item in $element {
- $selectors: #{$selectors + "." + $B + $elementSeparator + $item + ","};
- }
- @at-root {
- #{$selector} {
- #{$selectors} {
- @content;
- }
- }
- }
- }
- @else {
- @each $item in $element {
- $selectors: #{$selectors + $selector + $elementSeparator + $item + ","};
- }
- @at-root {
- #{$selectors} {
- @content;
- }
- }
- }
- }
- /* 此方法用于生成穿透样式 */
- /* 定义元素(e),对于伪类,会自动将 e 嵌套在 伪类 底下 */
- @mixin edeep($element...) {
- $selector: &;
- $selectors: "";
- @if containsPseudo($selector) {
- @each $item in $element {
- $selectors: #{$selectors + "." + $B + $elementSeparator + $item + ","};
- }
- @at-root {
- #{$selector} {
- :deep() {
- #{$selectors} {
- @content;
- }
- }
- }
- }
- }
- @else {
- @each $item in $element {
- $selectors: #{$selectors + $selector + $elementSeparator + $item + ","};
- }
- @at-root {
- :deep() {
- #{$selectors} {
- @content;
- }
- }
- }
- }
- }
- /* 定义状态(m) */
- @mixin m($modifier...) {
- $selectors: "";
- @each $item in $modifier {
- $selectors: #{$selectors + & + $modifierSeparator + $item + ","};
- }
- @at-root {
- #{$selectors} {
- @content;
- }
- }
- }
- /* 定义状态(m) */
- @mixin mdeep($modifier...) {
- $selectors: "";
- @each $item in $modifier {
- $selectors: #{$selectors + & + $modifierSeparator + $item + ","};
- }
- @at-root {
- :deep() {
- #{$selectors} {
- @content;
- }
- }
- }
- }
- /* 对于需要需要嵌套在 m 底下的 e,调用这个混合宏,一般在切换整个组件的状态,如切换颜色的时候 */
- @mixin me($element...) {
- $selector: &;
- $selectors: "";
- @if containsModifier($selector) {
- @each $item in $element {
- $selectors: #{$selectors + "." + $B + $elementSeparator + $item + ","};
- }
- @at-root {
- #{$selector} {
- #{$selectors} {
- @content;
- }
- }
- }
- }
- @else {
- @each $item in $element {
- $selectors: #{$selectors + $selector + $elementSeparator + $item + ","};
- }
- @at-root {
- #{$selectors} {
- @content;
- }
- }
- }
- }
- /* 状态,生成 is-$state 类名 */
- @mixin when($states...) {
- @at-root {
- @each $state in $states {
- &.#{$state-prefix + $state} {
- @content;
- }
- }
- }
- }
- /**
- * 常用混合宏
- */
- /* 单行超出隐藏 */
- @mixin lineEllipsis {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- /* 多行超出隐藏 */
- @mixin multiEllipsis($lineNumber: 3) {
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: $lineNumber;
- overflow: hidden;
- }
- /* 清除浮动 */
- @mixin clearFloat {
- &::after {
- display: block;
- content: "";
- height: 0;
- clear: both;
- overflow: hidden;
- visibility: hidden;
- }
- }
- /* 0.5px 边框 指定方向*/
- @mixin halfPixelBorder($direction: "bottom", $left: 0, $color: $-color-border-light) {
- position: relative;
- &::after {
- position: absolute;
- display: block;
- content: "";
- @if ($left==0) {
- width: 100%;
- }
- @else {
- width: calc(100% - #{$left});
- }
- height: 1px;
- left: $left;
- @if ($direction=="bottom") {
- bottom: 0;
- }
- @else {
- top: 0;
- }
- transform: scaleY(0.5);
- background: $color;
- }
- }
- /* 0.5px 边框 环绕 */
- @mixin halfPixelBorderSurround($color: $-color-border-light) {
- position: relative;
- &::after {
- position: absolute;
- display: block;
- content: ' ';
- pointer-events: none;
- width: 200%;
- height: 200%;
- left: 0;
- top: 0;
- border: 1px solid $color;
- transform: scale(0.5);
- box-sizing: border-box;
- transform-origin: left top;
- }
- }
- @mixin buttonClear {
- outline: none;
- -webkit-appearance: none;
- -webkit-tap-highlight-color: transparent;
- background: transparent;
- }
- /**
- * 三角形实现尖角样式,适用于背景透明情况
- * @param $size 三角形高,底边为 $size * 2
- * @param $bg 三角形背景颜色
- */
- @mixin triangleArrow($size, $bg) {
- @include e(arrow) {
- position: absolute;
- width: 0;
- height: 0;
- }
- @include e(arrow-down) {
- border-left: $size solid transparent;
- border-right: $size solid transparent;
- border-top: $size solid $bg;
- transform: translateX(-50%);
- bottom: calc(-1 * $size)
- }
- @include e(arrow-up) {
- border-left: $size solid transparent;
- border-right: $size solid transparent;
- border-bottom: $size solid $bg;
- transform: translateX(-50%);
- top: calc(-1 * $size)
- }
- @include e(arrow-left) {
- border-top: $size solid transparent;
- border-bottom: $size solid transparent;
- border-right: $size solid $bg;
- transform: translateY(-50%);
- left: calc(-1 * $size)
- }
- @include e(arrow-right) {
- border-top: $size solid transparent;
- border-bottom: $size solid transparent;
- border-left: $size solid $bg;
- transform: translateY(-50%);
- right: calc(-1 * $size)
- }
- }
- /**
- * 正方形实现尖角样式,适用于背景不透明情况
- * @param $size 正方形边长
- * @param $bg 正方形背景颜色
- * @param $z-index z-index属性值,不得大于外部包裹器
- * @param $box-shadow 阴影
- */
- @mixin squareArrow($size, $bg, $z-index, $box-shadow) {
- @include e(arrow) {
- position: absolute;
- width: $size;
- height: $size;
- z-index: $z-index;
- }
- @include e(arrow-down) {
- transform: translateX(-50%);
- bottom: 0;
- &:after {
- content: "";
- width: $size;
- height: $size;
- background-color: $bg;
- position: absolute;
- left: 0;
- bottom: calc(-1 * $size / 2);
- transform: rotateZ(45deg);
- box-shadow: $box-shadow;
- }
- }
- @include e(arrow-up) {
- transform: translateX(-50%);
- top: 0;
- &:after {
- content: "";
- width: $size;
- height: $size;
- background-color: $bg;
- position: absolute;
- left: 0;
- top: calc(-1 * $size / 2);
- transform: rotateZ(45deg);
- box-shadow: $box-shadow;
- }
- }
- @include e(arrow-left) {
- transform: translateY(-50%);
- left: 0;
- &:after {
- content: "";
- width: $size;
- height: $size;
- background-color: $bg;
- position: absolute;
- left: calc(-1 * $size / 2);
- top: 0;
- transform: rotateZ(45deg);
- box-shadow: $box-shadow;
- }
- }
- @include e(arrow-right) {
- transform: translateY(-50%);
- right: 0;
- &:after {
- content: "";
- width: $size;
- height: $size;
- background-color: $bg;
- position: absolute;
- right: calc(-1 * $size / 2);
- top: 0;
- transform: rotateZ(45deg);
- box-shadow: $box-shadow;
- }
- }
- }
|