更新记录
0.1.0(2022-05-06) 下载此版本
文档修正
0.0.8(2022-05-06) 下载此版本
文档增加插件市场下载方式安装使用,支持 uni_modules
0.0.7(2022-05-06) 下载此版本
第一次发布到插件市场
查看更多平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 3.1.12 app-vue app-nvue | √ | √ | √ | √ | √ | √ |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | √ | √ | √ |
windi-css-uni
1️⃣ 简介
Github:https://github.com/SunSeekerX/uni-app-starter/tree/main/packages/windi-css-uni
这是一些 css 的简写类名的库,用于快速开发 uni-app。适用于 vue+nvue 文件。类名的设计参考了 windicss 的类名。
大部分效果可以参考 https://cn.windicss.org/guide/ 预览。
在写代码的过程中,写 css 是非常头疼的事情,例如:
- 命名;这应该是所有程序员的痛。
- 写 dom 不能直接写 css;html 和 css 通常不在一块,需要滑动很长才能找到 css 定义的地方。
- 很多重复定义;像
diaplay: flex;
这样的代码在 css 中写了太多太多
缺点也很明显
- 增加了一些项目根本没有用到的 css 类
- 可读性不好
- 有一定的学习成本和记忆成本
有舍有得,自行取舍。
2️⃣ 快速上手
安装
npm
npm i @limm/windi-css-uni
# or
yarn add @limm/windi-css-uni
插件市场
插件市场地址:https://ext.dcloud.net.cn/plugin?name=windi-css-uniapp
导入
推荐全部引入,开启 ,截至目前,css 裁剪没有方案。treeshaking
会自动裁剪没有用到的类
${app}/App.vue
style 标签最上方导入
// npm 下载
@import '@limm/windi-css-uni';
// npm 下载 - 如果使用了 stylelint
@import '@limm/windi-css-uni/src/index.scss';
// 如果是插件市场导入的
@import '@/uni_modules/windi-css-uniapp/index.scss';
关于大小
全部压缩之后大概 258KB 左右大小。nvue 下应该不到 200KB。
使用
在下面列出的类名前增加 wd-
这是全局的前缀,为了防止和其他库或者你自己定义的样式冲突。
<view class="wd-flex-row wd-justify-between wd-items-center wd-leading-34">
<text class="wd-text-fff wd-text-16 wd-font-bold">{{ item.name }}</text>
</view>
4️⃣ class
通用
排版
样式参考 | 说明 | |
---|---|---|
Font Family | ||
font-sans | !nvue | |
font-serif | !nvue | |
font-mono | !nvue | |
font-size | ||
text-{8~48} | font-size: {8-48}px; | |
text-{8~96}r | font-size: {8-96}rpx; | |
字体平滑度 | ||
antialiased | -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; |
!nvue |
subpixel-antialiased | -webkit-font-smoothing: auto; -moz-osx-font-smoothing: auto; |
!nvue |
font-style | ||
italic | font-style: italic; | |
not-italic | font-style: normal; | |
font-weight | ||
font-{100-900} | font-weight: {100-900}; | 步长为 100 |
连字符 | ||
hyphens-none | hyphens: none; | !nvue |
hyphens-manual | hyphens: manual; | !nvue |
hyphens-auto | hyphens: auto; | !nvue |
行高 | ||
leading-{8-48} | line-height: {8-48}px; | |
leading-{8-96}r | line-height: {8-96}rpx; | |
文本对齐 | ||
text-left | text-align: left; | |
text-center | text-align: center; | |
text-right | text-align: right; | |
text-justify | text-align: justify; | !nvue |
文本颜色 | ||
text-transparent | color: transparent; | !nvue |
text-current | color: currentColor; | !nvue |
text-000 text-black |
color: #000; | |
text-fff text-white |
color: #fff; | |
text-{100~900} | color: #{111-999}; | 步长为 111 |
垂直对齐 | ||
align-baseline | vertical-align: baseline; | !nvue |
align-top | vertical-align: top; | !nvue |
align-middle | vertical-align: middle; | !nvue |
align-bottom | vertical-align: bottom; | !nvue |
align-text-top | vertical-align: text-top; | !nvue |
align-text-bottom | vertical-align: text-bottom; | !nvue |
文本溢出 | ||
truncate | text-overflow: ellipsis; !nvue overflow: hidden; -o-text-overflow: ellipsis; |
|
overflow-ellipsis | text-overflow: ellipsis; !nvue -o-text-overflow: ellipsis; |
|
overflow-clip | !nvue overflow: clip; nvue text-overflow: clip; |
|
行数 | ||
lines-{1~8} | nvue lines: {1~8}; !nvue display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: {1~8}; |
|
空格 | ||
whitespace-normal | white-space: normal; | !nvue |
whitespace-nowrap | white-space: nowrap; | !nvue |
whitespace-pre | white-space: pre; | !nvue |
whitespace-pre-line | white-space: pre-line; | !nvue |
whitespace-pre-wrap | white-space: pre-wrap; | !nvue |
断字 | ||
break-normal | overflow-wrap: normal; word-break: normal; |
!nvue |
break-words | overflow-wrap: break-word; | !nvue |
break-all | !nvue: word-break: break-all; | !nvue |
背景
样式参考 | 说明 | |
---|---|---|
背景固定 | ||
bg-fixed | background-attachment: fixed; | !nvue |
bg-local | background-attachment: local; | !nvue |
bg-scroll | background-attachment: scroll; | !nvue |
背景裁剪 | ||
bg-clip-border | background-clip: border-box; | !nvue |
bg-clip-padding | background-clip: padding-box; | !nvue |
bg-clip-content | background-clip: content-box; | !nvue |
背景颜色 | ||
bg-transparent | background-color: transparent; | |
bg-current | background-color: currentColor; | !nvue |
bg-fff bg-white |
background-color: #fff; | |
bg-000 bg-black |
background-color: #000; | |
bg-{111-999} | background-color: #{111-999}; | 步长为 111 |
背景图像位置 | ||
bg-bottom | background-position: bottom; | !nvue |
bg-center | background-position: center; | !nvue |
bg-left | background-position: left; | !nvue |
bg-left-bottom | background-position: left bottom; | !nvue |
bg-left-top | background-position: left top; | !nvue |
bg-right | background-position: right; | !nvue |
bg-right-bottom | background-position: right bottom; | !nvue |
bg-right-top | background-position: right top; | !nvue |
bg-top | background-position: top; | !nvue |
背景图像重复 | ||
bg-repeat | background-repeat: repeat; | !nvue |
bg-repeat-x | background-repeat: repeat-x; | !nvue |
bg-repeat-y | background-repeat: repeat-y; | !nvue |
bg-repeat-round | background-repeat: round; | !nvue |
bg-repeat-space | background-repeat: space; | !nvue |
背景图像大小 | ||
bg-auto | background-size: auto; | !nvue |
bg-cover | background-size: cover; | !nvue |
bg-contain | background-size: contain; | !nvue |
背景图像原点 | ||
bg-origin-border | background-origin: border-box; | !nvue |
bg-origin-padding | background-origin: padding-box; | !nvue |
bg-origin-content | background-origin: content-box; | !nvue |
边框
样式参考 | 说明 | |
---|---|---|
边框圆角 | ||
rounded-none | border-radius: 0px; | |
rounded-full | border-radius: 9999px; | |
rounded-{0~32} | border-radius: {0~32}px; | |
rounded-{0~64}r | border-radius: {0~64}rpx; | |
rounded-{0~100}p | border-radius: {0~100}%; | |
边框宽度 | ||
border-{0-10} | border-width: {0-10}px; | |
border-{0-20}r | border-width: {0-20}rpx; | |
border-top-{0-10} | border-top-width: {0-10}px; | |
border-top-{0-20}r | border-top-width: {0-20}rpx; | |
border-right-{0-10} | border-right-width: {0-10}px; | |
border-right-{0-20}r | border-right-width: {0-20}rpx; | |
border-bottom-{0-10} | border-bottom-width: {0-10}px; | |
border-bottom-{0-20}r | border-bottom-width: {0-20}rpx; | |
border-left-{0-10} | border-left-width: {0-10}px; | |
border-left-{0-20}r | border-left-width: {0-20}rpx; | |
边框颜色 | ||
border-transparent | border-color: transparent; | |
border-current | border-color: currentColor; | !nvue |
border-fff border-white |
border-color: #fff; | |
border-000 border-black |
border-color: #000; | |
border-{111-999} | border-color: #{111-999}; | |
边框样式 | ||
border-solid | border-style: solid; | |
border-dashed | border-style: dashed; | |
border-dotted | border-style: dotted; | |
border-double | border-style: double; | !nvue |
border-none | border-style: none; | !nvue |
特效
样式参考 | 说明 | |
---|---|---|
Opacity | ||
opacity-{0~100} | opacity: {0~100}; | 步长为 5 |
布局
Display
样式参考 | 说明 | |
---|---|---|
块级元素 | ||
block | display: block; | !nvue |
inline-block | display: inline-block; | !nvue |
inline | display: inline; | !nvue |
contents | display: contents; | !nvue |
hidden | display: none; | !nvue |
visible | visibility: visible; | !nvue |
invisible | visibility: hidden; | !nvue |
Flexbox
样式参考 | 说明 | |
---|---|---|
Flex | ||
flex | display: flex !important; | !nvue |
flex-center | nvue: justify-content: center !important; align-items: center !important; !nvue: display: flex !important; justify-content: center !important; align-items: center !important; |
|
Flex 方向 | ||
flex-row | flex-direction: row !important; | |
flex-row-reverse | flex-direction: row-reverse !important; | |
flex-col | flex-direction: column !important; | |
flex-col-reverse | flex-direction: column-reverse !important; | |
Flex Wrap | ||
flex-wrap | flex-wrap: wrap !important; | |
flex-wrap-reverse | flex-wrap: wrap-reverse !important; | |
flex-nowrap | flex-wrap: nowrap !important; | |
Flex Stretch | ||
flex-auto | flex: 1 1 auto; | !nvue |
flex-initial | flex: 0 1 auto; | !nvue |
flex-none | flex: none; | !nvue |
flex-{1~16} | flex: {1-16} !important; | |
Flex Grow | ||
flex-grow-0 | flex-grow: 0; | !nvue |
flex-grow | flex-grow: 1; | !nvue |
Flex Shrink | ||
flex-shrink-0 | flex-shrink: 0; | !nvue |
flex-shrink | flex-shrink: 1; | !nvue |
Posiioning
样式参考 | 说明 | |
---|---|---|
Order | ||
order-first | order: -9999; | !nvue |
order-last | order: 9999; | !nvue |
order-none | order: 0; | !nvue |
order-{0~16} | order: {0~16}; | !nvue |
Justify Content | ||
justify-start | justify-content: flex-start !important; | |
justify-end | justify-content: flex-end;!important | |
justify-center | justify-content: center !important; | |
justify-between | justify-content: space-between !important; | |
justify-around | justify-content: space-around; | !nvue |
justify-evenly | justify-content: space-evenly; | !nvue |
Justify Items | ||
justify-items-auto | justify-items: auto; | |
justify-items-start | justify-items: start; | |
justify-items-end | justify-items: end; | |
justify-self-center | justify-self: center; | |
justify-self-stretch | justify-self: stretch; | |
Align Items | ||
items-start | align-items: flex-start !important; | |
items-end | align-items: flex-end;!important | |
items-center | align-items: center;!important | |
items-baseline | align-items: baseline; | !nvue |
items-stretch | align-items: stretch !important; | |
Align Self | ||
self-auto | align-self: auto; | !nvue |
self-start | align-self: flex-start; | !nvue |
self-end | align-self: flex-end; | !nvue |
self-center | align-self: center; | !nvue |
self-stretch | align-self: stretch; | !nvue |
Place Content | ||
place-content-center | place-content: center; | !nvue |
place-content-start | place-content: start; | !nvue |
place-content-end | place-content: end; | !nvue |
place-content-between | place-content: space-between; | !nvue |
place-content-around | place-content: space-around; | !nvue |
place-content-evenly | place-content: space-evenly; | !nvue |
place-content-stretch | place-content: stretch; | !nvue |
Place Items | ||
place-items-auto | place-items: auto; | !nvue |
place-items-start | place-items: start; | !nvue |
place-items-end | place-items: end; | !nvue |
place-items-center | place-items: center; | !nvue |
place-items-stretch | place-items: stretch; | !nvue |
Place Self | ||
place-self-auto | place-self: auto; | !nvue |
place-self-start | place-self: start; | !nvue |
place-self-end | place-self: end; | !nvue |
place-self-center | place-self: center; | !nvue |
place-self-stretch | place-self: stretch; | !nvue |
Position | ||
static | position: static; | !nvue |
fixed | position: fixed !important; | |
absolute | position: absolute !important; | |
relative | position: relative !important; | |
sticky | position: sticky !important; | |
Top / Right / Bottom / Left | ||
inset-0 | top: 0px; right: 0px; bottom: 0px; left: 0px; |
|
inset-px | top: 1px; right: 1px; bottom: 1px; left: 1px; |
|
inset-auto | top: auto; right: auto; bottom: auto; left: auto; |
|
inset-full | top: 100%; right: 100%; bottom: 100%; left: 100%; |
|
top-{0-50} | top: {0-50}px; | |
top-{1-100}r | top: {1-100}rpx; | |
right-{0-50} | right: {0-50}px; | |
right-{1-100}r | right: {1-100}rpx; | |
bottom-{0-50} | bottom: {0-50}px; | |
bottom-{1-100}r | bottom: {1-100}rpx; | |
left-{0-50} | left: {0-50}px; | |
left-{1-100}r | left: {1-100}rpx; | |
Floats | ||
float-right | float: right; | !nvue |
float-left | float: left; | !nvue |
float-none | float: none; | !nvue |
Clear | ||
clear-right | clear: right; | !nvue |
clear-left | clear: left; | !nvue |
clear-both | clear: both; | !nvue |
clear-none | clear: none; | !nvue |
Object Fit | ||
object-contain | object-fit: contain; | !nvue |
object-cover | object-fit: cover; | !nvue |
object-fill | object-fit: fill; | !nvue |
object-none | object-fit: none; | !nvue |
object-scale-down | object-fit: scale-down; | !nvue |
Object Position | ||
object-bottom | object-position: bottom; | !nvue |
object-center | object-position: center; | !nvue |
object-left | object-position: left; | !nvue |
object-left-bottom | object-position: left bottom; | !nvue |
object-left-top | object-position: left top; | !nvue |
object-right | object-position: right; | !nvue |
object-right-bottom | object-position: right bottom; | !nvue |
object-right-top | object-position: right top; | !nvue |
object-top | object-position: top; | !nvue |
Z-Index | ||
z-auto | z-index: auto; | !nvue |
z-{0~16} | z-index: {0~16} !important; |
尺寸
样式参考 | 说明 | |
---|---|---|
width | ||
w-{0~750}r | width: {0~750}rpx; | |
w-{0~500} | width: {0~500}px; | |
w-{0~100}p | width: {0~100}%; | |
height | ||
h-{0~750}r | height: {0~750}rpx; | |
h-{0~500} | height: {0~500}px; | |
h-{0~100}p | height: {0~100}%; | |
Box Sizing | ||
box-border | box-sizing: border-box; | |
box-content | box-sizing: content-box; |
间隔
样式参考 | 说明 | |
---|---|---|
Padding | ||
pt-{0~100} | padding-top: {0~100}px; | |
pt-{1~200}r | padding-top: {1~200}rpx; | |
pr-{0~100} | padding-right: {0~100}px; | |
pr-{1~200}r | padding-right: {1~200}rpx; | |
pb-{0~100} | padding-bottom: {0~100}px; | |
pb-{1~200}r | padding-bottom: {1~200}rpx; | |
pl-{0~100} | padding-left: {0~100}px; | |
pl-{1~200}r | padding-left: {1~200}rpx; | |
p-{0-100} | padding: {0~100}px; | |
p-{1-200}r | padding: {1~200}rpx; | |
px-{0-100} | padding-right: {0\~100}px; padding-left: {0\~100}px; |
|
px-{1-200}r | padding-right: {1\~200}rpx; padding-left: {1\~200}rpx; |
|
py-{0-100} | padding-top: {0\~100}px; padding-bottom: {0\~100}px; |
|
py-{1-200}r | padding-top: {1\~200}rpx; padding-bottom: {1\~200}rpx; |
|
Margin | ||
mt-{0~100} | margin-top: {0~100}px; | |
mt-{1~200}r | margin-top: {1~200}rpx; | |
mr-{0~100} | margin-right: {0~100}px; | |
mr-{1~200}r | margin-right: {1~200}rpx; | |
mb-{0~100} | margin-bottom: {0~100}px; | |
mb-{1~200}r | margin-bottom: {1~200}rpx; | |
ml-{0~100} | margin-left: {0~100}px; | |
ml-{1~200}r | margin-left: {1~200}rpx; | |
m-{0-100} | margin: {0~100}px; | |
m-{1-200}r | margin: {1~200}rpx; | |
mx-{0-100} | margin-right: {0\~100}px; margin-left: {0\~100}px; |
|
mx-{1-200}r | margin-right: {1\~200}rpx; margin-left: {1\~200}rpx; |
|
my-{0-100} | margin-top: {0\~100}px; margin-bottom: {0\~100}px; |
|
my-{1-200}r | margin-top: {1\~200}rpx; margin-bottom: {1\~200}rpx; |
|
mx-auto | margin-right: auto; margin-left: auto; |
5️⃣ 问题?
-
为什么没有
max-width
、min-width
、max-height
、min-height
等类?付出 > 收益,性价比不高,项目中用到的地方不多。增加之后文件增大了 100 多 kb。没有必要。
6️⃣ 更新日志(CHANGELOG)
0.1.0
- 文档修正
0.0.8
- 文档增加插件市场下载方式安装使用,支持
uni_modules
0.0.7
- 移除 nvue 下的断字相关的类,避免警告
- break-normal
- break-words
- break-all
0.0.6
- 文档颜色描述修正
0.0.5
- 修正文本溢出行数无效
0.0.4
- 增加文本溢出功能类
- 增加 nvue 下 lines-{1~8} 功能类
0.0.3
- 文档颜色描述修正
- 增加边框颜色 border-black
- 增加边框颜色 border-{000~999}
0.0.2
- 增加背景色 bg-{000~999}
- 增加背景色 bg-black
- 增加文字颜色 text-fff、text-white
- 增加文字颜色 text-black
0.0.1
- 第一个可用版本