index.scss 3.65 KB
.zui-button {
  color: $color-text;
  background-color: $color-white;
  cursor: pointer;
	border-radius: $radius-sm;
  display: inline-flex;
	align-items: center;
	justify-content: center;
  border: none;
  outline: none;
	line-height: 1.5;
	box-sizing: border-box;
	border: 1px solid transparent;
	vertical-align: middle;
  &::after {
  	padding: 0;
  	margin: 0;
  	border: none;
  	pointer-events: none;
  }
	&__icon {
		padding-right: $padding-sm;
	}
	&.red {
		color: $color-red;
	}
	&.blue {
		color: $color-blue;
	}
	&.green {
		color: $color-green;
	}
  &.block {
    display: flex;
    width: 100%;
  }
	&.sm {
		padding: $padding-sm;
		font-size: $font-sm;
		height: $font-sm * 1.7;
		&.circle {
			height: $font-sm * 1.7;
			width: $font-sm * 1.7;
			.zui-icon {
				font-size: $font-md;
			}
		}
  }
  &.md {
		padding: $padding-md;
		font-size: $font-md;
		height: $font-md * 2.5;
		&.circle {
			height: $font-md * 2.5;
			width: $font-md * 2.5;
			.zui-icon {
				font-size: $font-lg;
			}
		}
	}
	&.lg {
		padding: $padding-lg;
		font-size: $font-lg;
		height: $font-lg * 2;
		&.circle {
			height: $font-lg * 2;
			width: $font-lg * 2;
			.zui-icon {
				font-size: $font-lg * 1.5;
			}
		}
	}
	&.default {
		border-color: $color-border;
	}
	&.button-hover {
		background-color: $color-bg-active;
	}
  &.custom.button-hover {
    opacity: 0.9;
  }
	// primary
	@mixin primary-mixin($bgColor) {
		background-color: $bgColor;
		color: $color-white;
		&.button-hover {
			background-color: lighten($bgColor, 10%);
		}
	}
	&.primary {
		@include primary-mixin($color-primary);
		&.red {
			@include primary-mixin($color-red);
		}
		&.green {
			@include primary-mixin($color-green);
		}
		&.blue {
			@include primary-mixin($color-blue);
		}
	}
	// secondary
	@mixin secondary-mixin($color) {
		color: $color;
		background-color: hsl(hue($color), saturation($color), 95%);
		&.button-hover {
			background-color: hsl(hue($color), saturation($color), 90%);
		}
	}
	&.secondary {
		@include secondary-mixin($color-primary);
		&.red {
			@include secondary-mixin($color-red);
		}
		&.green {
			@include secondary-mixin($color-green);
		}
		&.blue {
			@include secondary-mixin($color-blue);
		}
	}
	// plain
	@mixin plain-mixin($color) {
		color: $color;
		background-color: hsl(hue($color), saturation($color), 95%);
		border-color: $color;
		&:not(.custom).button-hover {
			background-color: hsl(hue($color), saturation($color), 90%);
		}
	}
	&.plain {
		@include plain-mixin($color-primary);
		&.red {
			@include plain-mixin($color-red);
		}
		&.green {
			@include plain-mixin($color-green);
		}
		&.blue {
			@include plain-mixin($color-blue);
		}
	}
	// ghost
	@mixin ghost-mixin($color) {
		color: $color;
		background-color: transparent;
		border-color: $color;
		&:not(.custom).button-hover {
			background-color: hsl(hue($color), saturation($color), 95%);
		}
	}
	&.ghost {
		@include ghost-mixin($color-primary);
		&.red {
			@include ghost-mixin($color-red);
		}
		&.green {
			@include ghost-mixin($color-green);
		}
		&.blue {
			@include ghost-mixin($color-blue);
		}
	}
	// link
	@mixin link-mixin($color) {
		background-color: transparent;
		border-color: transparent;
		color: $color;
		&.button-hover {
			color: lighten($color, 10%);
		}
	}
	&.link {
		@include link-mixin($color-primary);
		&.red {
			@include link-mixin($color-red);
		}
		&.green {
			@include link-mixin($color-green);
		}
		&.blue {
			@include link-mixin($color-blue);
		}
	}
	&.disabled {
		filter: opacity(50%);
		cursor: not-allowed;
	}
	&.round {
		border-radius: 80upx;
	}
	&.square {
		border-radius: 0;
	}
	&.circle {
		border-radius: 50%;
		overflow: hidden;
		line-height: 1;
		.zui-button__icon {
			padding-right: 0;
		}
	}
}