开发组件库前置准备

110 阅读2分钟

需求分析

组件库有大量CSS,所以要选好CSS处理方案,本组件库选用postcss。脚手架用最新的vite5+vue3.5。会参考elementuiplus组件进行开发

设置主题色

使用postcss设置主题色,还有像elementui那样设置主题色、辅助色、中性色,而且每种颜色有不同程度的深浅度。

snipaste_20250207_112020.png

snipaste_20250207_112030.png

在开发过程中,使用到了postcss的几个插件,这些插件用于css变量、循环、计算色值。

PostCSS Nested github.com/postcss/pos…

PostCSS each github.com/madyankin/p…

PostCSS for:github.com/antyakushev…

PostCSS mixin:github.com/iamstarkov/…

PostCSS each variables:github.com/awcross/pos… 有了这些插件以后就可以产生对应的不同色值。

代码

:root {
  /* colors */
  --v-color-white: #ffffff;
  --v-color-black: #000000;
  --colors: (
    primary: #409eff,
    success: #67c23a,
    warning: #e6a23c,
    danger: #f56c6c,
    info: #909399
  );

  @each $val, $color in var(--colors) {
    --v-color-$(val): $(color);
    @for $i from 3 to 9 by 2 {
      --v-color-$(val)-light-$(i): mix(#fff, $(color), .$(i))
    }
    --v-color-$(val)-light-8: mix(#fff, $(color), .8);
    --v-color-$(val)-dark-2: mix(#000, $(color), .2);
  }

  --v-bg-color: #ffffff;
  --v-bg-color-page: #f2f3f5;
  --v-bg-color-overlay: #ffffff;
  --v-text-color-primary: #303133;
  --v-text-color-regular: #606266;
  --v-text-color-secondary: #909399;
  --v-text-color-placeholder: #a8abb2;
  --v-text-color-disabled: #c0c4cc;
  --v-border-color: #dcdfe6;
  --v-border-color-light: #e4e7ed;
  --v-border-color-lighter: #ebeef5;
  --v-border-color-extra-light: #f2f6fc;
  --v-border-color-dark: #d4d7de;
  --v-border-color-darker: #cdd0d6;
  --v-fill-color: #f0f2f5;
  --v-fill-color-light: #f5f7fa;
  --v-fill-color-lighter: #fafafa;
  --v-fill-color-extra-light: #fafcff;
  --v-fill-color-dark: #ebedf0;
  --v-fill-color-darker: #e6e8eb;
  --v-fill-color-blank: #ffffff;

  /* border */
  --v-border-width: 1px;
  --v-border-style: solid;
  --v-border-color-hover: var(--v-text-color-disabled);
  --v-border: var(--v-border-width) var(--v-border-style) var(--v-border-color);
  --v-border-radius-base: 4px;
  --v-border-radius-small: 2px;
  --v-border-radius-round: 20px;
  --v-border-radius-circle: 100%;

  /*font*/
  --v-font-size-extra-large: 20px;
  --v-font-size-large: 18px;
  --v-font-size-medium: 16px;
  --v-font-size-base: 14px;
  --v-font-size-small: 13px;
  --v-font-size-extra-small: 12px;
  --v-font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "\5fae\8f6f\96c5\9ed1", Arial, sans-serif;
  --v-font-weight-primary: 500;

  /*disabled*/
  --v-disabled-bg-color: var(--v-fill-color-light);
  --v-disabled-text-color: var(--v-text-color-placeholder);
  --v-disabled-border-color: var(--v-border-color-light);
}