以前已经发过关于CMUI的介绍,还不了解的小伙伴能够点击这里。今天要为你们放出的是CMUI中部分功能的使用包以及上手指南。须要上手体验的请移步文章底部。因为涉及内容较多,我尽可能用最简短的语言来向你描述使用方法,最好的方式仍是你直接上手尝试。javascript
本次放出的内容包括:css
cyan:CMUI样式库Cyan的完整版html
component:CMUI组件库中和布局相关的list组件(基于Vue)vue
styleInit:CMUI方法库中的动态样式java
针对人群:CMUI的开发主要针对的人群是配有设计师,可是没有本身的设计标准或者没有和设计标准匹配的UI框架的公司或团队。gulp
和UI库的区别:大部分UI库提供开箱即用的UI设计,一般适用于我的项目或中台系统,CMUI使用描述型样式来匹配设计稿,同时提供主题库进行开箱即用。bootstrap
和描述型库的区别:常见的描述型库如Tailwind,bulma等都是对css的彻底抽取,几乎就是使用class重写一遍CSS,不管从代码量,记忆量和上手难度都很高。Cyan尽可能使用减法对CSS进行抽取,你用过一次就知道它有多简单,你甚至不须要看文档。api
cmui依赖Vue而且采用rem布局,同时须要动态样式的支持,所以你须要在使用前进行初始化。数组
Cyan采用SASS编写,你可使用你喜欢的编译工具对其进行编译,建议使用koala或gulp,配合autoprefixer编译为CSS并插入你的HTML中。浏览器
<link rel="stylesheet" type="text/css" href="CMUI/style/cmuiMobile.css">
<script charset="utf-8" src="vue.js"></script><!--组件依赖VUE-->
<script charset="utf-8" src="lodash.js"></script><!--组件依赖lodash-->
<script charset="utf-8" src="CMUI/lib/index.umd.min.js"></script><!--加载组件库-->
<script charset="utf-8" src="CMUI/lib/styleInit.umd.min.js"></script><!--加载动态初始化文件-->
<script charset="utf-8"> styleInit()//初始化rem并添加动态样式支持 </script>
复制代码
你也能够在你的项目里引入源文件。
import vue from 'vue'
import _ from 'lodash'
import 'CMUI/cyan/cmuiMobile.scss'
import styleInit from 'CMUI/es/styleInit.es.js'
import cmui from 'CMUI/es/index.es.js'
vue.use(cmui)
styleInit()
复制代码
cyan封装了6种常见布局,几乎能够知足全部的布局要求。
使用方式和bootstrap彻底相同,12列用span,15列用col
.container>.row>.span3*4
.container>.row>.col3*5
复制代码
网格间距默认响应式20px,如需修改请修改_variables.scss中的$container_padding
和网格布局彻底相同,网格间无间距
.box-container>.box-row>.box-span3*4
.box-container>.box-row>.box-col3*5
复制代码
<div class="ratio-container">
<div>这个DIV以1:1展现</div>
</div>
复制代码
<div class="ratio-container" ratio="2/3">
<div>这个DIV以2:3展现</div>
</div>
复制代码
制做图片提示
<div class="ratio-container">
<img src="">
<div class="mask top-a padding20 text-white">这是一段文字</div>
</div>
<div class="ratio-container">
<img src="">
<div class="mask top-a padding20 mask-white">这是一段文字</div>
</div>
复制代码
<div class="img-container">
<img src="" alt="">
</div>
复制代码
拉伸 | 填充 | 边框 | 圆角 | 位置 |
---|---|---|---|---|
full | flex-x/flex-y | border | round/radius | top/left/bottom/right |
直接将class到img-container后面便可,值得注意的是这些class能够随意组合甚至所有组合到一块儿。
<!--让图片在容器的左上角显示-->
<div class="img-container top left">
<img src="" alt="">
</div>
<!--制做一个直径为50px的圆形容器并放置图片,可用于制做头像-->
<!--使用img-container并手动设置行内的width是一个常见的操做-->
<div class="img-container round" style="width:50px">
<img src="" alt="">
</div>
复制代码
<div class="flex-container">
这里填写内部结构,横向排列
</div>
<div class="flex-container-col">
这里填写内部结构,纵向排列
</div>
复制代码
默认的布局为between结构可选around,但你几乎不会用到。
间隔类型选择 | 顺序翻转 | 位置控制 | 子节点横纵向填满 |
---|---|---|---|
round/between | reverse | top/left/right/bottom/center | vfull/hfull |
子节点位置:为子节点添加top/left/right/bottom/center进行精确控制
子节点比例:为子节点添加flex1~flex5,来控制它占据剩余空间的比例
横向滚动
<div class="scroll-container"></div>
纵向滚动,一般须要设置高度
<div class="scroll-container"></div>
复制代码
demo:
<div class="scroll-container">
<div style="width:100px;" v-for="item in imgUrls">
<div class="img-container">
<img :src="item" alt="">
</div>
</div>
</div>
复制代码
列表样式可建立等分的行列结构,一般用于制做底部导航,图标导航,广告位,商品列表等
<div class="list">
<div class="list-item"></div>
<div class="list-item"></div>
...
</div>
复制代码
辅助class
控制列数 | 控制边框 | 位置控制 |
---|---|---|
list-col{num} num的范围为1~6 | border | radius |
建立三列 带有边框 外层边框圆角的列表
<div class="list list-col3 border radius">
<div class="list-item"></div>
<div class="list-item"></div>
...
</div>
复制代码
提示:
列表组件支持无限嵌套,自定义分组,自定义间距和自定义色彩边框色彩
props:
属性名称 | 类型 | 默认值 | 用途 | 说明 |
---|---|---|---|---|
col | Number | [Nmuber] | 1 | 设置列数 | 列数,若是是数字表示平分为N列,若是是数组,数组长度表示列数,数组中的数字表示每列所占比例 |
space | Number | 0 | 设置间距 | 每列之间的间距,对应750设计稿中的值 |
border | Boolean | String | false | 设置边框 | 若是是Boolean类型表示是否使用默认值设置边框,若是是String类型,表示边框的颜色值 |
输入
<template>
<cmui-list :col="col" :space="space" :border="border">
<cmui-list-item v-for="i in 8">
<cmui-list :col="3" :border="true">
<cmui-list-item v-for="i in 3">{{i}}</cmui-list-item>
</cmui-list>
</cmui-list-item>
</cmui-list>
</template>
<script>
export default {
data() {
return {
col:[2,3,4,5],//设置为4列,比例为2:3:4:5
space:22,//间距为22,对应到375的显示上为11px
border:'#e2b453'//设置边框颜色为#e2b453
}
}
}
</script>
复制代码
输出
使用提示:
须要在列表内展现大量数据可使用虚拟列表,仅渲染在可视区内的数据
<template>
<cmui-virtual-list height="500px" :listData="data" v-slot="xxx">
<div class="borderb padding10">
{{xxx.item.value}}
</div>
</cmui-virtual-list>
</template>
<script> export default { data() { return { data:Array.from({length:10000}).map(faker.lorem.sentences) } } } </script>
复制代码
输出
props
属性名 | 类型 | 默认值 | Description |
---|---|---|---|
listData | Array | [] | 列表所须要的数据 |
bufferScale | Number | 1 | 在可见区域以外的上/下方预渲染比例,避免快速滑动时出现闪烁 |
estimatedItemSize | Number | 150 | 列表项的预估高度,用于预先计算可视区域的显示项数 |
height | String | 100% | 包裹元素的高度。 |
类名 | 做用 |
---|---|
float-right | 向右浮动 |
float-left | 向左浮动 |
clearfix | 清除浮动 |
类名 | 做用 |
---|---|
pos-r | 设置position为relative |
pos-a | 设置position为absolute |
pos-f | 设置position为fixed |
pos-s | 设置position为sticky |
类名 | 做用 |
---|---|
vcenter | 绝对定位,水平居中 |
hcenter | 绝对定位,垂直居中 |
fullcenter | 绝对定位,彻底居中 |
abs-{position} | 在某个方向上绝对定位,你可使用top,right,bottom,left,full,center六个值当中的任意一个代替position |
fixed-{position} | 在某个方向上固定定位,你可使用top,right,bottom,left,full,center六个值当中的任意一个代替position |
<!--使用vcenter hcenter fullcenter abs-{position}须要为外层容器增长pos-r-->
<div class="pos-r">
<div class="vcenter"></div>
<div class="abs-bottom"></div>
</div>
<!--使用fixed-{position}能够直接使用-->
<div class="fixed-bottom"></div>
复制代码
类名 | 做用 |
---|---|
overflow-h | 溢出隐藏 |
overflow-xh | 水平方向上溢出隐藏 |
overflow-yh | 垂直方向上溢出隐藏 |
overflow-i | 溢出初始化 有些时候你须要关闭overflow:hidden的时候能够用到这个class |
<body class="overflow-xh">body不会出现横向滚动条</body>
复制代码
类名 | 做用 |
---|---|
dis-b | display:block |
dis-i | display:inline |
dis-n | display:none |
dis-t | display:table |
dis-it | display:inline-table |
<div class="dis-n"></div>
复制代码
对于padding margin top bottom left right这些样式咱们采用了动态样式,会根据你class自动生成并插入动态样式表,因此直接使用就行了。
结构:
<div class="paddingt24 marginv22 paddingh34 top4 right-n12"></div>
复制代码
为何不支持width和height?
在实际开发中width和height会同时使用px或rem,这是设计和交互决定的,咱们没法判断你的实际需求。
上面介绍的内容已经彻底能够解决你布局的需求,下面咱们将介绍和内容排版有关的用法
_variables中的$colorList定义了7种颜色,这些色彩会同时被继承到按钮,文本,背景,表单,徽标等元素。建议你删除全部的色彩,并根据设计须要从新定义颜色。
色彩系统会继承到按钮,表单,文本等多项元素并再次进行翻转和深浅的拓展,所以每增长一种颜色都会增长大约1k的CSS(gzip后),咱们会在后面的版本的动态样式中加入对动态色彩的支持。
你能够直接将你定义的色彩名称应用到背景,按钮,徽标,文本,表单。
对于按钮,徽标,表单,你能够直接应用到对应元素上
<div class="btn red">按钮</div>
<div class="badge red">徽标</div>
<input type="checkbox" class="red">
复制代码
对于文本和背景须要设置前置名称
<p class="bg-blue text-red">红色的文本,蓝色背景</p>
复制代码
使用text-{color}的组合来设置文本的颜色,颜色的可取值为_variables中colorList和grayList的值。
<p class="text-red">红色的文本</p>
<p class="text-dark">深色的文本</p>
复制代码
使用fs-{size}或frs-{size}设置文字大小,文本的默认字号是14px
fs-{size}:size的范围为10-20;对应表示了已PX为单位的对应字体大小。
frs-{size}:size的范围为20-40之间的偶数;表示了已rem为单位的对应字体大小。
在实际的交互中缩放的字体大小会极大的影响美感,所以咱们的建议是尽可能使用fs-{size}来保持字体的尺寸,除非你有特殊的须要可使用frs-{size}。
下面两行文本在375的设备上显示效果彻底相同,可是在其余尺寸设备下,frs-30对应的文字会进行缩放
<p class="fs-15">15px的固定大小文字</p>
<p class="frs-30">15px的响应式文字</p>
复制代码
类名 | 做用 |
---|---|
text-left | 文本居左排列 |
text-right | 文本居右排列 |
text-center | 文本居中排列 |
text-justify | 文本两端对齐,仅最后一行有效,可是一般用于仅有一行的文本 |
text-nowrap | 强制禁止文本换行,会对flex布局形成影响 |
text-indent | 段落预留两个字符的空白 |
类名 | 做用 |
---|---|
text-lowercase | 将文本转换为小写 |
text-uppercase | 将文本转换为大写 |
text-capitalize | 将文本转换为驼峰形式 |
类名 | 做用 |
---|---|
text-bolder | 文本加粗 |
text-delete | 文本划线删除 |
text-vcenter | 文本垂直居中 |
text-vtop | 在一行文本大小不一的时候,文本垂直居顶部 |
text-vbottom | 在一行文本大小不一的时候,文本垂直居底部 |
提示: 对于排列在一行可是字体大小不一的文本,若是你须要使用text-vtop,text-vcenter,text-vbottom来对齐他们在上中下的位置,你须要为外层容器添加text-container
类名 | 做用 |
---|---|
text-limit{num} | 不管文本长度如何,限制文本不能超过num行,超出的部分用...显示 |
text-fixed{num} | 不管文本长度如何,固定文本为num行,即便文本长度不足,依旧占用高度 |
默认行高为1,能够为节点添加lh-{num}类来设置行高,num的取值范围是12~60之间4的倍数
<span class="lh-40">设置行高为40PX</span>
复制代码
<span class="btn">button</span>
复制代码
类名 | 做用 |
---|---|
{color} | 继承于色彩系统中的$colorList,默承认选值为red orange yellow green coffee blue purple |
{size} | 继承于尺寸系统,能够不写,默承认选值为small big |
radius | 为按钮增长圆角 |
reverse | 对按钮进行翻转 |
light | 进行浅色处理 |
block | 转换为block结构,从而使按钮充满所在容器,经常使用于登录等位置 |
修改_variables.scss中的$btn-size-list,你能够随意定义名称和尺寸,内部的转换关系已经帮你写好了,你只须要根据设计要求设置三个值,高度,左右的填充,字体大小。在设置的过程当中请注意如下几点
<div class="btn">默认</div>
<div class="btn blue">蓝色</div>
<div class="btn blue reverse">翻转</div>
<div class="btn blue reverse radius">圆角</div>
<div class="btn blue light">变淡</div>
<div class="btn blue small">small</div>
<div class="btn blue radius">
<i class="baseIcon baseIcon-add"></i>嵌套图标
</div>
<div class="btn blue radius">
<span class="badge red round">2</span>嵌套徽标
</div>
复制代码
输出
将按钮放置在.btn-group中能够造成按钮组,从而轻易制做出分页样式
<div class="btn-group">
<div class="btn green radius reverse" v-for="i in 10">{{i}}</div>
</div>
复制代码
<span class="badge">button</span>
复制代码
徽标在本质上和按钮是彻底相同的,所以全部按钮的使用方法均可以在徽标中使用。
它和按钮的区别以下
类名 | 做用 |
---|---|
pill | 药片形状的标签 |
round | 圆形标签 |
square | 正方形形状的标签 |
flag | 旗帜形状的标签,一般和绝对定位(pos-a)组合使用 |
修改_variables.scss中的$badge-size-list,具体内容参考按钮的尺寸调整,可使用和btn相同的名称,但若是值也相同那么最终它们将以相同的形式出现
这里仅展现不一样于btn的使用方法。其余方法可见btn案例
<div class="badge">默认</div>
<div class="badge green pill">药片</div>
<div class="badge green round">1</div>
<div class="badge green square">券</div>
<div class="badge green reverse round">1</div>
<div class="badge green reverse square">券</div>
<div class="badge green flag">券</div>
复制代码
输出
咱们保留的系统默认样式,若是须要用Cyan的样式,将表单元素包裹在.form中便可
<div class="form">
<input type="text">
</div>
复制代码
如下辅助class用于非radio和CheckBox的元素
类名 | 做用 |
---|---|
focus | 获取焦点样式,可手动添加class触发,也能够经过点击的方式触发 |
radius | 增长圆角 |
disabled | 禁用 |
reverse | 翻转样式 |
transparent | 透明样式 |
<div class="form">
<input type="text" class="radius">
<select name="" id="" class="radius"></select>
</div>
复制代码
如下class用于radio和CheckBox
类名 | 做用 |
---|---|
disabled | 禁用 |
reverse | 翻转样式 |
square | 正方形样式 |
right | 对号样式:仅用于radio |
switch | 滑动开关样式:仅用于CheckBox |
<div class="form">
<p>checkbox 样式</p>
<input type="checkbox" label="未选中">
<input type="checkbox" checked label="默认选中">
<input type="checkbox" class="reverse" checked label="reverse选中">
<input type="checkbox" class="square" checked label="square选中">
<input type="checkbox" class="square reverse" checked label="square reverse 选中">
<p>switch 样式</p>
<input type="checkbox" class="switch" checked label="square reverse 选中">
<p>radio样式</p>
<input type="radio" label="未选中">
<input type="radio" checked label="默认选中">
<input type="radio" class="reverse" checked label="reverse选中">
<input type="radio" class="square" checked label="square选中">
<input type="radio" class="square reverse" checked label="square reverse 选中">
<input type="radio" class="right" checked label="right选中">
<input type="radio" class="right reverse" checked label="right reverse 选中">
</div>
复制代码
CheckBox以及radio继承了按钮的样式,按钮的所有辅助class均可以组合使用,这对于实现分类选择的功能很是适用。
<div class="form">
<input type="checkbox" class="btn radius" label="未选中">
<input type="checkbox" class="btn radius" checked label="默认选中">
<input type="checkbox" class="btn radius light" checked label="light选中">
<input type="checkbox" class="btn radius reverse" checked label="reverse选中">
<input type="checkbox" class="btn radius square reverse" checked label="square reverse 选中">
<input type="radio" class="btn radius reverse" checked label="radio reverse 选中">
</div>
复制代码
为表单元素添加文本可使用label标签,若是同级使用它们会以底部对齐,若是但愿居中对齐,能够将表单元素包裹在label标签内部,对于CheckBox和radio,更好的办法是直接调用label属性。
同级使用,底部对齐
<input type="checkbox"/><label for="">label</label>
嵌套使用,居中对齐
<label for=""><input type="checkbox"/>label</label>
属性调用,居中对齐
<input type="checkbox" label="label"/>
复制代码
为了表单和按钮同时使用的美观和编码统一,表单元素的尺寸继承于按钮,所以每当你修改$btn-size-list,表单的尺寸也会同步修改,于此同时你也能够直接在表单元素上调用你设置的尺寸名称。
<div class="form flex-container">
<input type="text" class="big"/>
<span class="btn big">submit</span>
</div>
复制代码
默认色:_variables中的$form-color-base表示表单的默认色,在不添加额外颜色的时候全部表单元素在激活状态下均使用这个颜色。
色彩库:表单元素继承于色彩系统,所以在$colorList中设置的全部色彩你均可以应用到表单上,你能够有两种形式来使用
统一设置:全部的表单元素都将变为red对应的颜色
<div class="form red">
...表单元素
</div>
复制代码
单独设置:text设置为blue对应的颜色,CheckBox设置为green对应的颜色
<div class="form">
<input type="text" class="blue"/>
<input type="checkbox" class="green"/>
</div>
复制代码
对于偶尔使用的表单颜色,无需在色彩库中添加,为元素添加custom能够直接使用自定义颜色
<div class="form" style="color:#ab36cc">
使用自己的颜色#23546a
<input type="text" class="custom" style="color:#23546a"/>
从父容器继承,使用#ab36cc
<input type="text" class="custom"/>
<input type="text" class="custom"/>
</div>
复制代码
以上为你们介绍了CMUI的部分功能,但这只是所有框架的冰山一角,因为Demo和文档的美化工做以及部分收尾工做还在进行中,所以目前只能向你们提供本文所介绍的功能的安装包。可是你彻底能够应用到你的项目里,解决你的布局和UI问题,若是你是在使用VUE那么你可使用本文介绍的全部功能,若是你是使用其余框架,那么你能够直接使用cyan样式库和styleInit动态样式。