01 项目初始化

🚀 1.1 创建 Vue 项目

参考文档:Vue.js 官方

使用以下命令创建新的 Vue 项目:

  pnpm create vue@latest
  pnpm install
  pnpm run dev

🎨 1.2 定义全局的样式变量:颜色、字体大小等。

  • 创建 styles/var.scss
@use 'sass:color';

// 1. 定义 对应的主题色
$colors: (
  primary: #409eff,
  success: #67c23a,
  warning: #e6a23c,
  danger: #f56c6c,
  info: #909399
);

:root {
  @each $key, $color in $colors {
    // 1. 生成主题颜色
    --color-#{$key}: #{$color};
    //  --color-primary: #409EFF
    //  --color-success: #67c23a
    // ...
    // 2. 生成不同亮度的颜色
    @for $i from 1 through 4 {
      --color-#{$key}-light-#{2 * $i + 1}: #{color.mix(
          #fff,
          $color,
          (2 * $i + 1) * 10 * 1%
        )};
    }
    // dark2 linght 8 颜色不同,单独生成
    --color-#{$key}-light-8: #{color.mix(#fff, $color, 80 * 1%)}; // 80% 亮度
    --color-#{$key}-dark-2: #{color.mix(#000, $color, 20 * 1%)};
  }

  // 其他的颜色变量,对应 Element-ui 的中性色
  --color-white: #fff;
  --color-black: #000;
  --bg-color: #ffffff;
  --bg-color-page: #f2f3f5;
  --bg-color-overlay: #ffffff;
  --text-color-primary: #303133;
  --text-color-regular: #606266;
  --text-color-secondary: #909399;
  --text-color-placeholder: #a8abb2;
  --text-color-disabled: #c0c4cc;
  --border-color: #dcdfe6;
  --border-color-light: #e4e7ed;
  --border-color-lighter: #ebeef5;
  --border-color-extra-light: #f2f6fc;
  --border-color-dark: #d4d7de;
  --border-color-darker: #cdd0d6;
  --fill-color: #f0f2f5;
  --fill-color-light: #f5f7fa;
  --fill-color-lighter: #fafafa;
  --fill-color-extra-light: #fafcff;
  --fill-color-dark: #ebedf0;
  --fill-color-darker: #e6e8eb;
  --fill-color-blank: #ffffff;

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

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

  // disabled 相关
  --disabled-bg-color: var(--fill-color-light);
  --disabled-text-color: var(--text-color-placeholder);
  --disabled-border-color: var(--border-color-light);

  // transition 过渡相关
  --transition-duration: 0.3s;
  --transition-duration-fast: 0.2s;
}

⚡ 1.3 入口文件引入

  • 创建 styles/index.scss
@use './var.scss' as *;
  • main.js 中引入
import './styles/index.scss'

💅 1.4 重制默认样式

  • 创建 styles/reset.scss
body {
  font-family: var(--font-family);
  font-weight: 400;
  font-size: var(--font-size-base);
  color: var(--text-color-primary);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  -webkit-tap-highlight-color: transparent;
}

a {
  color: var(--color-primary);
  text-decoration: none;

  &:hover,
  &:focus {
    color: var(--color-primary-light-3);
  }

  &:active {
    color: var(--color-primary-dark-2);
  }
}

h1,
h2,
h3,
h4,
h5,
h6 {
  color: var(--text-color-regular);
  font-weight: inherit;

  &:first-child {
    margin-top: 0;
  }

  &:last-child {
    margin-bottom: 0;
  }
}

h1 {
  font-size: calc(var(--font-size-base) + 6px);
}

h2 {
  font-size: calc(var(--font-size-base) + 4px);
}

h3 {
  font-size: calc(var(--font-size-base) + 2px);
}

h4,
h5,
h6,
p {
  font-size: inherit;
}

p {
  line-height: 1.8;

  &:first-child {
    margin-top: 0;
  }

  &:last-child {
    margin-bottom: 0;
  }
}

sup,
sub {
  font-size: calc(var(--font-size-base) - 1px);
}

small {
  font-size: calc(var(--font-size-base) - 2px);
}

hr {
  margin-top: 20px;
  margin-bottom: 20px;
  border: 0;
  border-top: 1px solid var(--border-color-lighter);
}
  • styles/index.scss 引入 reset.scss
@use './var.scss' as *;
@use './reset.scss' as *;