0.0.25 • Published 9 months ago

vite-plugin-vue-atomcss v0.0.25

Weekly downloads
-
License
ISC
Repository
github
Last release
9 months ago

vite-plugin-vue-atomcss

基于 vue 的按需生成原子类样式的 loader。

支持预编译语言:pug,其他预编译语言暂不支持。

开发

npm run dev

发布

npm run build
npm pubilsh

使用

安装

npm i -D vite-plugin-vue-atomcss

配置

// main.js
import 'vite-plugin-vue-atomcss/plugin/atomcss.css';
// vite.config.js
import vue from '@vitejs/plugin-vue';
import atomcss from 'vite-plugin-vue-atomcss';
import atomcssConfig from './atomcss.config.js';

export default defineConfig({
  plugins: [atomcss(atomcssConfig), vue()],
});

atomcss.config.js

// atomcss.config.js
export default {
  mode: 'px', // px:单位是 px,rem:单位是 rem,默认是 px
  config: {
    // 数值原子类配置示例
    '.fsize': 'font-size: $rpx',
    '.bd': 'border: $px solid #e1e5ee',

    // 通用原子类配置示例
    '.bgred': 'background: red',

    // 色值原子类配置示例
    '.bgc': 'background-color: #',

    // ... 你的配置
  },
};

关于 mode 的说明:

  • 可选项:pxrem
  • px:单位是 px,一般用于 PC Web;rem:单位是 rem,一般用于 Mobile Web(H5)
  • 默认为 px

定制原子类

在根目录增加配置文件:atomcss.config.js,根据规则定制自己的原子类:

// atomcss.config.js
module.exports = {
  mode: 'px',
  config: {
    // 数值原子类配置示例
    '.fsize': 'font-size: $px',
    '.bd': 'border: $px solid #e1e5ee',

    // 色值原子类配置示例
    '.backcolor': 'background-color: #',

    // 通用原子类配置示例
    '.bgred': 'background: red',

    // ... 你的配置
  },
};

数值原子类定制

  • 包含 $ 符号,此符号代表属性值中的数字,vue-atomcss-loader 会将此替换成类名内的数值
  • 使用形式为:.fsize-100,数字与主体用 - 隔开
  • 如:.fsize: 'font-size: $px'.fsize-100,会生成 css:.fsize-100{font-size: 100px}
  • 根据 mode 来修改单位

色值原子类定制

  • 包含 # 符号,此符号代表属性值中的色值,只支持十六进制表示的 rgb 色值,vue-atomcss-loader 会将此替换成类名内的色值
  • 使用形式为:.backcolor-aa33dd,色值与主体用 - 隔开
  • 如:.backcolor: 'background-color: #'.backcolor-aa33dd,会生成 css:.backcolor-aa33dd{background-color: #aa33dd}

通用原子类定制

  • 不包含 $# 符号,使用时类名直接使用,不可包含数字
  • 如:.bg-red: 'background: red',使用时直接使用:.bg-red

数值原子类

属性值具有数字的原子类

margin、padding、width、height、border-radius

margin对应的缩写:

  • margin: m
  • margin-left: ml
  • margin-right: mr
  • margin-top: mt
  • margin-bottom: mb
  • margin-left & margin-right: mx
  • margin-top & margin-bottom: my

例子:

<!-- html -->
<div class="m-10 ml-10 mr-10 mt-10 mb-10 mx-10 my-10"></div>
//- pug
div.m-10.ml-10.mr-10.mt-10.mb-10.mx-10.my-10

最终会生成如下 css:

.m-10 {
  margin: 10px;
}
.ml-10 {
  margin-left: 10px;
}
.mr-10 {
  margin-right: 10px;
}
.mt-10 {
  margin-top: 10px;
}
.mb-10 {
  margin-bottom: 10px;
}
.mx-10 {
  margin-left: 10px;
  margin-right: 10px;
}
.my-10 {
  margin-top: 10px;
  margin-bottom: 10px;
}

padding对应的缩写:

  • padding: p
  • padding-left: pl
  • padding-right: pr
  • padding-top: pt
  • padding-bottom: pb
  • padding-left & padding-right: px
  • padding-top & padding-bottom: py

例子:

<!-- html -->
<div class="p-10 pl-10 pr-10 pt-10 pb-10 px-10 py-10"></div>
//- pug
div.p-10.pl-10.pr-10.pt-10.pb-10.px-10.py-10

最终会生成如下 css:

.p-10 {
  padding: 10px;
}
.pl-10 {
  padding-left: 10px;
}
.pr-10 {
  padding-right: 10px;
}
.pt-10 {
  padding-top: 10px;
}
.pb-10 {
  padding-bottom: 10px;
}
.px-10 {
  padding-left: 10px;
  padding-right: 10px;
}
.py-10 {
  padding-top: 10px;
  padding-bottom: 10px;
}

widthheightborder-radius对应的缩写:

  • width: w
  • width(%):wp
  • height: h
  • height(%):hp
  • border-radius: br

例子:

<!-- html -->
<div class="w-100.wp-50.h-100.hp-50.br-50"></div>
//- pug
div.w-100.wp-50.h-100.hp-50.br-50

最终会生成如下 css:

.w-100 {
  width: 100px;
}
.wp-50 {
  width: 50%;
}
.h-100 {
  height: 100px;
}
.hp-50 {
  height: 50%;
}
.br-50 {
  border-radius: 50px;
}

left、right、top、bottom

对应的缩写:

  • left: l
  • right: r
  • top: t
  • bottom: b

例子:

<!-- html -->
<div class="l-10.r-10.t-10.b-10"></div>
//- pug
div.l-10.r-10.t-10.b-10

最终会生成如下 css:

.l-10 {
  left: 10px;
}
.r-10 {
  right: 10px;
}
.t-10 {
  top: 10px;
}
.b-10 {
  bottom: 10px;
}

line-height、font

对应的缩写:

  • line-height: lh
  • font-size: fs
  • font-weight: fw

注意:fw 一般用法是:fw-100、fw-200、fw-300、fw-400、fw-500、fw-600、fw-700、fw-800、fw-900,其他数值不生效

例子:

<!-- html -->
<div class="lh-100.fs-40.fw-600"></div>
//- pug
div.lh-100.fs-40.fw-600

最终会生成如下 css:

.lh-100 {
  line-height: 100px;
}
.fs-40 {
  font-size: 40px;
}
.fw-600 {
  font-weight: 600;
}

色值原子类

color、background-color

例子:

<!-- html -->
<html class="c-123a6d bgc-00ff00"></html>
<!-- pug -->
.c-123a6d.bgc-00ff00
.c-123a6d {
  color: #123a6d;
}
.bgc-00ff00 {
  background-color: #00ff00;
}

通用原子类

属性值不具有数字的原子类,使用时需要引入:vue-atomcss-loader/atomcss-commom.scss

水平垂直居中

/* 通用水平垂直居中 */
.vh-parent {
  position: relative;
}
.v {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}
.h {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}
.vh {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
/* 块元素水平居中 */
.mx-auto {
  margin-left: auto;
  margin-right: auto;
}

单行和多行省略

/* 行省略 */
.te-1 {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.te-2 {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}
/* 支持到: .te-3 ~ .te-10 */

换行

.word-wrap {
  white-space: pre-wrap;
  word-wrap: break-word;
  word-break: break-all;
}

禁止事件

.event-disabled {
  pointer-events: none;
}

背景色

/* 通用背景色 */
.bg-white {
  background-color: white;
}
.bg-yellow {
  background-color: yellow;
}
.bg-blue {
  background-color: blue;
}
.bg-green {
  background-color: green;
}
.bg-red {
  background-color: red;
}
.bg-black {
  background-color: black;
}
/* 图片占位色 */
.bg-image {
  background-color: #e1e3e8;
}
/* 文字占位色 */
.bg-text {
  background-color: #f5f7fa;
}
/* 背景loading图 */
.bg-loading {
  background-image: url('https://tva3.sinaimg.cn/large/ed796d65ly1gtzzp2we99g202p02pmy1.gif');
  background-repeat: no-repeat;
  background-position: center;
  background-size: 50px;
}

字体色

/* 通用字体色 */
.c-white {
  color: white;
}
.c-yellow {
  color: yellow;
}
.c-blue {
  color: blue;
}
.c-green {
  color: green;
}
.c-red {
  color: red;
}
.c-black {
  color: black;
}
.c-gray {
  color: gray;
}

字体位置

.t-c {
  text-align: center;
}
.t-l {
  text-align: left;
}
.t-r {
  text-align: right;
}

display

.dspl-inbl,
.inbl {
  display: inline-block;
}
.dspl-bl {
  display: block;
}

vertical-align

.vtal-md {
  vertical-align: middle;
}
.vtal-bt {
  vertical-align: bottom;
}
.vtal-top {
  vertical-align: top;
}

float

.fl-r {
  float: right;
}
.fl-l {
  float: left;
}

鼠标

.cs-pt {
  cursor: pointer;
}

box-sizing

.bs-ct {
  box-sizing: content-box;
}
.bs-bd {
  box-sizing: border-box;
}

position

.pst-rlt {
  position: relative;
}
.pst-absl {
  position: absolute;
}
.pst-fx {
  position: fixed;
}

overflow

.ovfl-hd {
  overflow: hidden;
}
.ovfl-scroll {
  overflow: scroll;
}
.ovfl-vsb {
  overflow: visible;
}
.ovfl-x-hd {
  overflow-x: hidden;
}
.ovfl-x-scroll {
  overflow-x: scroll;
}
.ovfl-x-auto {
  overflow-x: auto;
}
.ovfl-y-hd {
  overflow-y: hidden;
}
.ovfl-y-scroll {
  overflow-y: scroll;
}
.ovfl-y-auto {
  overflow-y: auto;
}
/* 水平滚动 */
.h-scroll {
  overflow-x: scroll;
  width: 100%;
  white-space: nowrap;
  -webkit-overflow-scrolling: touch;
}

border-style

.bd-solid {
  border-style: solid;
}

清除浮动

.cl-b {
  clear: both;
}
.cl-l {
  clear: left;
}
.cl-r {
  clear: right;
}

体验优化

淡入淡出

.fadein-init {
  opacity: 0;

  -webkit-transition: opacity 0.2s ease-in;
  -moz-transition: opacity 0.2s ease-in;
  -ms-transition: opacity 0.2s ease-in;
  -o-transition: opacity 0.2s ease-in;
  transition: opacity 0.2s ease-in;
}

.fadein {
  opacity: 1;
}
0.0.20

10 months ago

0.0.21

10 months ago

0.0.22

9 months ago

0.0.23

9 months ago

0.0.24

9 months ago

0.0.25

9 months ago

0.0.15

10 months ago

0.0.16

10 months ago

0.0.17

10 months ago

0.0.18

10 months ago

0.0.19

10 months ago

0.0.10

10 months ago

0.0.11

10 months ago

0.0.12

10 months ago

0.0.13

10 months ago

0.0.14

10 months ago

0.0.8

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago