ソースを参照

v2.0.2

v2.0.2 2.0版本上线
Weilanwl 6 年 前
コミット
967f46ae3d
100 ファイル変更6073 行追加258 行削除
  1. 0 21
      LICENSE
  2. 0 27
      README.md
  3. 0 35
      app.json
  4. 0 170
      app.wxss
  5. 0 5
      colorui.wxss
  6. 2 0
      demo/.gitattributes
  7. 89 0
      demo/app.js
  8. 65 0
      demo/app.json
  9. 132 0
      demo/app.wxss
  10. 2953 0
      demo/colorui.wxss
  11. 57 0
      demo/icon.wxss
  12. BIN
      demo/images/BasicsBg.png
  13. BIN
      demo/images/cjkz.png
  14. BIN
      demo/images/componentBg.png
  15. BIN
      demo/images/logo.png
  16. BIN
      demo/images/tabbar/basics.png
  17. BIN
      demo/images/tabbar/basics_cur.png
  18. BIN
      demo/images/tabbar/component.png
  19. BIN
      demo/images/tabbar/component_cur.png
  20. BIN
      demo/images/tabbar/plugin.png
  21. BIN
      demo/images/tabbar/plugin_cur.png
  22. 14 0
      demo/pages/basics/avatar/avatar.js
  23. 0 0
      demo/pages/basics/avatar/avatar.json
  24. 72 0
      demo/pages/basics/avatar/avatar.wxml
  25. 1 0
      demo/pages/basics/avatar/avatar.wxss
  26. 11 0
      demo/pages/basics/background/background.js
  27. 0 0
      demo/pages/basics/background/background.json
  28. 130 0
      demo/pages/basics/background/background.wxml
  29. 0 0
      demo/pages/basics/background/background.wxss
  30. 18 0
      demo/pages/basics/button/button.js
  31. 0 0
      demo/pages/basics/button/button.json
  32. 99 0
      demo/pages/basics/button/button.wxml
  33. 1 0
      demo/pages/basics/button/button.wxss
  34. 59 0
      demo/pages/basics/button/design.js
  35. 0 0
      demo/pages/basics/button/design.json
  36. 81 0
      demo/pages/basics/button/design.wxml
  37. 6 0
      demo/pages/basics/button/design.wxss
  38. 10 0
      demo/pages/basics/form/form.js
  39. 0 0
      demo/pages/basics/form/form.json
  40. 61 0
      demo/pages/basics/form/form.wxml
  41. 0 0
      demo/pages/basics/form/form.wxss
  42. 23 0
      demo/pages/basics/home/home.js
  43. 0 0
      demo/pages/basics/home/home.json
  44. 8 0
      demo/pages/basics/home/home.wxml
  45. 0 0
      demo/pages/basics/home/home.wxss
  46. 5 0
      demo/pages/basics/icon/icon.js
  47. 0 0
      demo/pages/basics/icon/icon.json
  48. 22 0
      demo/pages/basics/icon/icon.wxml
  49. 6 0
      demo/pages/basics/icon/icon.wxss
  50. 10 0
      demo/pages/basics/image/image.js
  51. 0 0
      demo/pages/basics/image/image.json
  52. 14 0
      demo/pages/basics/image/image.wxml
  53. 19 0
      demo/pages/basics/image/image.wxss
  54. 16 0
      demo/pages/basics/layout/layout.js
  55. 0 0
      demo/pages/basics/layout/layout.json
  56. 185 0
      demo/pages/basics/layout/layout.wxml
  57. 3 0
      demo/pages/basics/layout/layout.wxss
  58. 12 0
      demo/pages/basics/loading/loading.js
  59. 0 0
      demo/pages/basics/loading/loading.json
  60. 31 0
      demo/pages/basics/loading/loading.wxml
  61. 1 0
      demo/pages/basics/loading/loading.wxss
  62. 38 0
      demo/pages/basics/progress/progress.js
  63. 0 0
      demo/pages/basics/progress/progress.json
  64. 116 0
      demo/pages/basics/progress/progress.wxml
  65. 0 0
      demo/pages/basics/progress/progress.wxss
  66. 12 0
      demo/pages/basics/shadow/shadow.js
  67. 0 0
      demo/pages/basics/shadow/shadow.json
  68. 34 0
      demo/pages/basics/shadow/shadow.wxml
  69. 0 0
      demo/pages/basics/shadow/shadow.wxss
  70. 11 0
      demo/pages/basics/tag/tag.js
  71. 0 0
      demo/pages/basics/tag/tag.json
  72. 119 0
      demo/pages/basics/tag/tag.wxml
  73. 0 0
      demo/pages/basics/tag/tag.wxss
  74. 85 0
      demo/pages/basics/text/text.js
  75. 1 0
      demo/pages/basics/text/text.json
  76. 148 0
      demo/pages/basics/text/text.wxml
  77. 1 0
      demo/pages/basics/text/text.wxss
  78. 8 0
      demo/pages/component/bar/bar.js
  79. 1 0
      demo/pages/component/bar/bar.json
  80. 245 0
      demo/pages/component/bar/bar.wxml
  81. 0 0
      demo/pages/component/bar/bar.wxss
  82. 12 0
      demo/pages/component/card/card.js
  83. 1 0
      demo/pages/component/card/card.json
  84. 123 0
      demo/pages/component/card/card.wxml
  85. 0 0
      demo/pages/component/card/card.wxss
  86. 9 0
      demo/pages/component/chat/chat.js
  87. 1 0
      demo/pages/component/chat/chat.json
  88. 91 0
      demo/pages/component/chat/chat.wxml
  89. 3 0
      demo/pages/component/chat/chat.wxss
  90. 147 0
      demo/pages/component/form/form.js
  91. 1 0
      demo/pages/component/form/form.json
  92. 175 0
      demo/pages/component/form/form.wxml
  93. 3 0
      demo/pages/component/form/form.wxss
  94. 17 0
      demo/pages/component/home/home.js
  95. 1 0
      demo/pages/component/home/home.json
  96. 8 0
      demo/pages/component/home/home.wxml
  97. 0 0
      demo/pages/component/home/home.wxss
  98. 13 0
      demo/pages/component/list/list.js
  99. 1 0
      demo/pages/component/list/list.json
  100. 432 0
      demo/pages/component/list/list.wxml

+ 0 - 21
LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2018 weilanwl
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 27
README.md

@@ -1,27 +0,0 @@
-
- <h1 align="center">ColorUI组件</h1>
- <h3 align="center">鲜亮的高饱和色彩,专注视觉的小程序组件库</h3>
-<p>
-ColorUI组件是我根据开发经验,自己编写、整合的一套高颜值的微信小程序组件库。
-</p><p>
-里面包含常用的一些基本元素,比如按钮,徽章,进度条等。相比其他组件库,ColorUI的元素更符合大众的审美,在边距、行高、大小、颜色等方面做了更细微的调整,也解决了一些微信小程序自带的兼容问题。
-</p><p>
-除了基本元素外,还编写了一些经常用到的组件。比如时间线,导航,内容列表,商品等,极大的提高了开发者的效率。
-</p><p>
-ColorUI V1.5 不再进行更新与维护,接下来会是全新的V2.0
-</p><p>
-欢迎小程序开发者使用! 微信小程序开发 QQ群:240787041欢迎交流。
-</p><p>
- 微信小程序开发 微信群
-</p><p>
- 
- <img src="https://raw.githubusercontent.com/weilanwl/ColorUI/master/images/wxqrcode.jpg" width="200">
-</p><p>
-项目网站:  <a href="https://www.color-ui.com/" target="_blank" >https://www.color-ui.com//</a>
-</p>
-<p align="center">小程序扫码体验<br>
-
-<img src="https://raw.githubusercontent.com/weilanwl/ColorUI/master/images/ColorUI.jpg">  </p>
-<p align="center">
-您的赞赏!我的动力!<br>
-<img src="https://raw.githubusercontent.com/weilanwl/ColorUI/master/images/mm_reward_qrcode_1540462442829.png" width="300"></p>

+ 0 - 35
app.json

@@ -1,35 +0,0 @@
-{
-  "pages": [
-    "pages/index/index",
-    "pages/layout/layout",
-    "pages/button/button",
-    "pages/button/sub",
-    "pages/border/border",
-    "pages/badge/badge",
-    "pages/bar/bar",
-    "pages/label/label",
-    "pages/text/text",
-    "pages/icon/icon",
-    "pages/loading/loading",
-    "pages/image/image",
-    "pages/form/form",
-    "pages/nav/nav",
-    "pages/item/item",
-    "pages/list/list",
-    "pages/side/side",
-    "pages/comment/comment",
-    "pages/timeline/timeline",
-    "pages/slider/slider",
-    "pages/rating/rating",
-    "pages/modal/modal",
-    "pages/progress/progress",
-    "pages/chat/chat",
-    "pages/animation/animation"
-  ],
-  "window": {
-    "backgroundTextStyle": "black",
-    "navigationBarBackgroundColor": "#39b54a",
-    "navigationBarTitleText": "Color UI",
-    "navigationBarTextStyle": "light"
-  }
-}

+ 0 - 170
app.wxss

@@ -1,170 +0,0 @@
-@import "icon.wxss";
-@import "colorui.wxss";
-
-page {
-  counter-reset: header;
-}
-
-.indexImage {
-  width: 100%;
-}
-
-.screen {
-  display: flex;
-  align-items: center;
-  height: 100vh;
-  text-align: center;
-  justify-content: center;
-  font-size: 80rpx;
-}
-
-.desc text {
-  text-align: center;
-  color: #999;
-  display: block;
-  margin-bottom: 60rpx;
-}
-
-.nav-list {
-  display: flex;
-  color: #666;
-  align-items: center;
-  padding: 30rpx;
-  margin: 30rpx 30rpx 0;
-  background: #fff;
-  border-radius: 6rpx;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-
-.nav-list.cur {
-  color: #fff;
-  background: rgb(94, 185, 94);
-  box-shadow: 2px 2px 3px rgba(94, 185, 94, 0.4);
-}
-
-.nav-list .iconfont {
-  flex: 1;
-  text-align: right;
-}
-
-.nav-title {
-  margin-right: 20rpx;
-}
-
-.nav-name {
-  color: #aaa;
-  font-size: 24rpx;
-  text-transform: Capitalize;
-}
-
-.doc-top {
-  padding: 30rpx;
-  background: #39b54a;
-  position: relative;
-}
-
-.doc-top::after {
-  content: "";
-  position: absolute;
-  top: 30rpx;
-  border-radius: 6rpx;
-  display: block;
-  width: 50rpx;
-  height: 5rpx;
-  background: #fff;
-  box-shadow: 5rpx 7rpx 7rpx rgba(0, 0, 0, 0.15);
-}
-
-.doc-top-title {
-  margin-top: 30rpx;
-  font-size: 48rpx;
-  font-weight: 900;
-  color: #fff;
-  text-shadow: 10rpx 15rpx 15rpx rgba(0, 0, 0, 0.15);
-}
-
-.doc-top-name {
-  margin-top: 20rpx;
-  font-size: 32rpx;
-  font-weight: 600;
-  color: #fff;
-  text-transform: Capitalize;
-  text-shadow: 5rpx 7rpx 7rpx rgba(0, 0, 0, 0.15);
-}
-
-.doc-main {
-  background: #fff;
-  padding: 20rpx;
-  line-height: 52rpx;
-}
-
-.doc-main-title {
-  counter-increment: header;
-  line-height: 80rpx;
-  font-weight: 600;
-  font-size: 36rpx;
-}
-
-.doc-main-title::before {
-  content: counter(header) ". ";
-  color: #888;
-  font-weight: 400;
-}
-
-.doc-main-content {
-  margin-bottom: 20rpx;
-  line-height: 1.6;
-}
-
-.doc-example {
-  padding: 0 30rpx 30rpx;
-  position: relative;
-  margin-bottom: 30rpx;
-}
-
-.doc-example + .doc-example, .doc-example + .doc-main-content {
-  margin-top: 20rpx;
-}
-
-.doc-example::before {
-  content: 'Demo';
-  display: block;
-  color: #bbb;
-  text-transform: uppercase;
-  margin: 0 -30rpx 30rpx;
-  padding: 4px 10px;
-  font-size: 24rpx;
-  background: #f5f5f5;
-}
-
-.doc-example::after {
-  content: " ";
-  width: 200%;
-  height: 200%;
-  position: absolute;
-  top: 0;
-  left: 0;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  -webkit-transform: scale(0.5);
-  transform: scale(0.5);
-  -webkit-transform-origin: 0 0;
-  transform-origin: 0 0;
-  box-sizing: border-box;
-  border-radius: 10rpx;
-}
-
-.doc-box {
-  background: #f5f5f5;
-  border-radius: 10rpx;
-}
-
-.doc-box-sub {
-  background: #ddd;
-  line-height: 60rpx;
-  border-radius: 10rpx;
-}
-
-.big-sub {
-  line-height: 160rpx;
-  padding: 50rpx;
-}

ファイルの差分が大きいため隠しています
+ 0 - 5
colorui.wxss


+ 2 - 0
demo/.gitattributes

@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto

+ 89 - 0
demo/app.js

@@ -0,0 +1,89 @@
+//app.js
+App({
+  onLaunch: function() {
+    wx.getSystemInfo({
+      success: e=> {
+        this.globalData.StatusBar = e.statusBarHeight;
+        this.globalData.CustomBar = e.platform == 'android' ? e.statusBarHeight + 50 : e.statusBarHeight + 45;
+      }
+    })
+  },
+  globalData: {
+    ColorList: [{
+        title: '嫣红',
+        name: 'red',
+        color: '#e54d42'
+      },
+      {
+        title: '桔橙',
+        name: 'orange',
+        color: '#f37b1d'
+      },
+      {
+        title: '明黄',
+        name: 'yellow',
+        color: '#fbbd08'
+      },
+      {
+        title: '橄榄',
+        name: 'olive',
+        color: '#8dc63f'
+      },
+      {
+        title: '森绿',
+        name: 'green',
+        color: '#39b54a'
+      },
+      {
+        title: '天青',
+        name: 'cyan',
+        color: '#1cbbb4'
+      },
+      {
+        title: '海蓝',
+        name: 'blue',
+        color: '#0081ff'
+      },
+      {
+        title: '姹紫',
+        name: 'purple',
+        color: '#6739b6'
+      },
+      {
+        title: '木槿',
+        name: 'mauve',
+        color: '#9c26b0'
+      },
+      {
+        title: '桃粉',
+        name: 'pink',
+        color: '#e03997'
+      },
+      {
+        title: '棕褐',
+        name: 'brown',
+        color: '#a5673f'
+      },
+      {
+        title: '玄灰',
+        name: 'grey',
+        color: '#8799a3'
+      },
+      {
+        title: '草灰',
+        name: 'gray',
+        color: '#aaaaaa'
+      },
+      {
+        title: '墨黑',
+        name: 'black',
+        color: '#333333'
+      },
+      {
+        title: '雅白',
+        name: 'white',
+        color: '#ffffff'
+      },
+    ]
+  }
+})

+ 65 - 0
demo/app.json

@@ -0,0 +1,65 @@
+{
+  "pages": [
+    "pages/basics/home/home",
+    "pages/basics/layout/layout",
+    "pages/component/home/home",
+    "pages/plugin/home/home",
+    "pages/basics/button/button",
+    "pages/basics/tag/tag",
+    "pages/basics/avatar/avatar",
+    "pages/basics/image/image",
+    "pages/basics/progress/progress",
+    "pages/component/list/list",
+    "pages/basics/form/form",
+    "pages/component/bar/bar",
+    "pages/component/timeline/timeline",
+    "pages/basics/shadow/shadow",
+    "pages/component/chat/chat",
+    "pages/component/form/form",
+    "pages/basics/background/background",
+    "pages/basics/text/text",
+    "pages/basics/icon/icon",
+    "pages/basics/loading/loading",
+    "pages/component/nav/nav",
+    "pages/component/card/card",
+    "pages/component/swiper/swiper",
+    "pages/component/modal/modal",
+    "pages/plugin/indexes/indexes",
+    "pages/basics/button/design",
+    "pages/plugin/gradual/gradual",
+    "pages/plugin/animation/animation"
+  ],
+  "window": {
+    "navigationBarBackgroundColor": "#39b54a",
+    "navigationBarTitleText": "Color UI",
+    "navigationStyle": "custom",
+    "navigationBarTextStyle": "white"
+  },
+  "component": true,
+  "tabBar": {
+    "color": "#aaa",
+    "selectedColor": "#39b54a",
+    "borderStyle": "black",
+    "backgroundColor": "#ffffff",
+    "list": [
+      {
+        "pagePath": "pages/basics/home/home",
+        "iconPath": "/images/tabbar/basics.png",
+        "selectedIconPath": "/images/tabbar/basics_cur.png",
+        "text": "基础"
+      },
+      {
+        "pagePath": "pages/component/home/home",
+        "iconPath": "/images/tabbar/component.png",
+        "selectedIconPath": "/images/tabbar/component_cur.png",
+        "text": "组件"
+      },
+      {
+        "pagePath": "pages/plugin/home/home",
+        "iconPath": "/images/tabbar/plugin.png",
+        "selectedIconPath": "/images/tabbar/plugin_cur.png",
+        "text": "扩展"
+      }
+    ]
+  }
+}

+ 132 - 0
demo/app.wxss

@@ -0,0 +1,132 @@
+@import "icon.wxss";
+@import "colorui.wxss";
+
+.nav-list {
+  display: flex;
+  flex-wrap: wrap;
+  padding: 0px 20px 0px;
+  justify-content: space-between;
+}
+
+.nav-li {
+  color: #666;
+  padding: 15px;
+  border-radius: 6px;
+  width: 45%;
+  margin: 0 2.5% 20px;
+  background-image: url(https://image.weilanwl.com/color2.0/cardBg.png);
+  background-size: cover;
+  background-position: center;
+  position: relative;
+  z-index: 1;
+}
+
+.nav-li::after {
+  content: "";
+  position: absolute;
+  z-index: -1;
+  background-color: inherit;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  bottom: -10%;
+  border-radius: 5px;
+  opacity: 0.2;
+  transform: scale(0.9, 0.9);
+}
+
+.nav-li.cur {
+  color: #fff;
+  background: rgb(94, 185, 94);
+  box-shadow: 2px 2px 3px rgba(94, 185, 94, 0.4);
+}
+
+.nav-title {
+  font-size: 16px;
+  font-weight: 300;
+}
+
+.nav-title::first-letter {
+  font-size: 20px;
+  margin-right: 2px;
+}
+
+.nav-name {
+  font-size: 14px;
+  text-transform: Capitalize;
+  margin-top: 10px;
+  position: relative;
+}
+
+.nav-name::before {
+  content: "";
+  position: absolute;
+  display: block;
+  width: 20px;
+  height: 3px;
+  background: #fff;
+  bottom: 0;
+  right: 0;
+  opacity: 0.5;
+}
+
+.nav-name::after {
+  content: "";
+  position: absolute;
+  display: block;
+  width: 50px;
+  height: 1px;
+  background: #fff;
+  bottom: 0;
+  right: 20px;
+  opacity: 0.3;
+}
+
+.nav-name::first-letter {
+  font-weight: bold;
+  font-size: 18px;
+  margin-right: 1px;
+}
+
+.nav-li icon {
+  position: absolute;
+  right: 15px;
+  top: 15px;
+  font-size: 26px;
+  width: 30px;
+  height: 30px;
+  text-align: center;
+  line-height: 30px;
+}
+
+.text-light {
+  font-weight: 300;
+}
+
+@keyframes show {
+  0% {
+    transform: translateY(-50px);
+  }
+
+  60% {
+    transform: translateY(20px);
+  }
+
+  100% {
+    transform: translateY(0px);
+  }
+}
+
+@-webkit-keyframes show {
+  0% {
+    transform: translateY(-50px);
+  }
+
+  60% {
+    transform: translateY(20px);
+  }
+
+  100% {
+    transform: translateY(0px);
+  }
+}

+ 2953 - 0
demo/colorui.wxss

@@ -0,0 +1,2953 @@
+/*
+  Color UI v2.0.2 | by 文晓港 
+  仅供学习交流,如作它用所承受的法律责任一概与作者无关   
+  (QQ交流群:240787041)
+  文档:http://www.color-ui.com/
+*/
+
+/* ==================
+        初始化
+ ==================== */
+
+page {
+  background: #f1f1f1;
+  font-size: 14px;
+  color: #333;
+  line-height: 1;
+  font-family: Helvetica Neue, Helvetica, sans-serif;
+}
+
+view, text, custom, tag, capsule, scroll-view, swiper, button, timeline, form,
+form-group, info, bar, progress-bar, input, textarea, label, navigator, list,
+item, chat, image {
+  box-sizing: border-box;
+}
+
+/* ==================
+          布局
+ ==================== */
+
+/*  -- flex弹性布局 -- */
+
+.flex {
+  display: flex;
+}
+
+.basis-xs {
+  flex-basis: 20%;
+}
+
+.basis-sm {
+  flex-basis: 40%;
+}
+
+.basis-df {
+  flex-basis: 50%;
+}
+
+.basis-lg {
+  flex-basis: 60%;
+}
+
+.basis-xl {
+  flex-basis: 80%;
+}
+
+.flex-sub {
+  flex: 1;
+}
+
+.flex-twice {
+  flex: 2;
+}
+
+.flex-treble {
+  flex: 3;
+}
+
+.flex-direction {
+  flex-direction: column;
+}
+
+.flex-wrap {
+  flex-wrap: wrap;
+}
+
+.align-start {
+  align-items: flex-start;
+}
+
+.align-end {
+  align-items: flex-end;
+}
+
+.align-center {
+  align-items: center;
+}
+
+.align-stretch {
+  align-items: stretch;
+}
+
+.self-start {
+  align-self: flex-start;
+}
+
+.self-center {
+  align-self: flex-center;
+}
+
+.self-end {
+  align-self: flex-end;
+}
+
+.self-stretch {
+  align-self: stretch;
+}
+
+.align-stretch {
+  align-items: stretch;
+}
+
+.justify-start {
+  justify-content: flex-start;
+}
+
+.justify-end {
+  justify-content: flex-end;
+}
+
+.justify-center {
+  justify-content: center;
+}
+
+.justify-between {
+  justify-content: space-between;
+}
+
+.justify-around {
+  justify-content: space-around;
+}
+
+/* grid布局 */
+
+.grid {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.grid.grid-square {
+  margin-bottom: -10px;
+  overflow: hidden;
+}
+
+.grid.grid-square tag {
+  position: absolute;
+  right: 0;
+  top: 0;
+  border-bottom-left-radius: 3px;
+}
+
+.grid.grid-square view> icon, .grid.grid-square item> icon {
+  font-size: 26px;
+  position: absolute;
+  color: #aaa;
+  margin: auto;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+}
+
+.grid.grid-square view, .grid.grid-square item {
+  margin-right: 10px;
+  margin-bottom: 10px;
+  border-radius: 3px;
+  position: relative;
+  overflow: hidden;
+}
+
+.grid.col-1.grid-square view, .grid.col-1.grid-square item {
+  padding-bottom: 100%;
+  height: 0;
+  margin-right: 0;
+}
+
+.grid.col-2.grid-square view, .grid.col-2.grid-square item {
+  padding-bottom: calc((100% - 10px)/2);
+  height: 0;
+  width: calc((100% - 10px)/2);
+}
+
+.grid.col-2.grid-square view:nth-child(2n),
+.grid.col-2.grid-square item:nth-child(2n) {
+  margin-right: 0;
+}
+
+.grid.col-3.grid-square view, .grid.col-3.grid-square item {
+  padding-bottom: calc((100% - 20px)/3);
+  height: 0;
+  width: calc((100% - 20px)/3);
+}
+
+.grid.col-3.grid-square view:nth-child(3n),
+.grid.col-3.grid-square item:nth-child(3n) {
+  margin-right: 0;
+}
+
+.grid.col-4.grid-square view, .grid.col-4.grid-square item {
+  padding-bottom: calc((100% - 30px)/4);
+  height: 0;
+  width: calc((100% - 30px)/4);
+}
+
+.grid.col-4.grid-square view:nth-child(4n),
+.grid.col-4.grid-square item:nth-child(4n) {
+  margin-right: 0;
+}
+
+.grid.col-5.grid-square view, .grid.col-5.grid-square item {
+  padding-bottom: calc((100% - 40px)/5);
+  height: 0;
+  width: calc((100% - 40px)/5);
+}
+
+.grid.col-1>item, .grid.col-1>view {
+  width: 100%;
+}
+
+.grid.col-2>item, .grid.col-2>view {
+  width: 50%;
+}
+
+.grid.col-3>item, .grid.col-3>view {
+  width: 33.33%;
+}
+
+.grid.col-4>item, .grid.col-4>view {
+  width: 25%;
+}
+
+.grid.col-5>item, .grid.col-5>view {
+  width: 20%;
+}
+
+/*  -- 内外边距 -- */
+
+.margin-0 {
+  margin: 0 !important;
+}
+
+.margin-xs {
+  margin: 5px;
+}
+
+.margin-sm {
+  margin: 10px;
+}
+
+.margin {
+  margin: 15px;
+}
+
+.margin-lg {
+  margin: 20px;
+}
+
+.margin-xl {
+  margin: 25px;
+}
+
+.margin-top-xs {
+  margin-top: 5px;
+}
+
+.margin-top-sm {
+  margin-top: 10px;
+}
+
+.margin-top {
+  margin-top: 15px;
+}
+
+.margin-top-lg {
+  margin-top: 20px;
+}
+
+.margin-top-xl {
+  margin-top: 25px;
+}
+
+.margin-right-xs {
+  margin-right: 5px;
+}
+
+.margin-right-sm {
+  margin-right: 10px;
+}
+
+.margin-right {
+  margin-right: 15px;
+}
+
+.margin-right-lg {
+  margin-right: 20px;
+}
+
+.margin-right-xl {
+  margin-right: 25px;
+}
+
+.margin-bottom-xs {
+  margin-bottom: 5px;
+}
+
+.margin-bottom-sm {
+  margin-bottom: 10px;
+}
+
+.margin-bottom {
+  margin-bottom: 15px;
+}
+
+.margin-bottom-lg {
+  margin-bottom: 20px;
+}
+
+.margin-bottom-xl {
+  margin-bottom: 25px;
+}
+
+.margin-left-xs {
+  margin-left: 5px;
+}
+
+.margin-left-sm {
+  margin-left: 10px;
+}
+
+.margin-left {
+  margin-left: 15px;
+}
+
+.margin-left-lg {
+  margin-left: 20px;
+}
+
+.margin-left-xl {
+  margin-left: 25px;
+}
+
+.margin-lr-xs {
+  margin-left: 5px;
+  margin-right: 5px;
+}
+
+.margin-lr-sm {
+  margin-left: 10px;
+  margin-right: 10px;
+}
+
+.margin-lr {
+  margin-left: 15px;
+  margin-right: 15px;
+}
+
+.margin-lr-lg {
+  margin-left: 20px;
+  margin-right: 20px;
+}
+
+.margin-lr-xl {
+  margin-left: 25px;
+  margin-right: 25px;
+}
+
+.margin-tb-xs {
+  margin-top: 5px;
+  margin-bottom: 5px;
+}
+
+.margin-tb-sm {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+
+.margin-tb {
+  margin-top: 15px;
+  margin-bottom: 15px;
+}
+
+.margin-tb-lg {
+  margin-top: 20px;
+  margin-bottom: 20px;
+}
+
+.margin-tb-xl {
+  margin-top: 25px;
+  margin-bottom: 25px;
+}
+
+.padding-0 {
+  padding: 0 !important;
+}
+
+.padding-xs {
+  padding: 5px;
+}
+
+.padding-sm {
+  padding: 10px;
+}
+
+.padding {
+  padding: 15px;
+}
+
+.padding-lg {
+  padding: 20px;
+}
+
+.padding-xl {
+  padding: 25px;
+}
+
+.padding-top-xs {
+  padding-top: 5px;
+}
+
+.padding-top-sm {
+  padding-top: 10px;
+}
+
+.padding-top {
+  padding-top: 15px;
+}
+
+.padding-top-lg {
+  padding-top: 20px;
+}
+
+.padding-top-xl {
+  padding-top: 25px;
+}
+
+.padding-right-xs {
+  padding-right: 5px;
+}
+
+.padding-right-sm {
+  padding-right: 10px;
+}
+
+.padding-right {
+  padding-right: 15px;
+}
+
+.padding-right-lg {
+  padding-right: 20px;
+}
+
+.padding-right-xl {
+  padding-right: 25px;
+}
+
+.padding-bottom-xs {
+  padding-bottom: 5px;
+}
+
+.padding-bottom-sm {
+  padding-bottom: 10px;
+}
+
+.padding-bottom {
+  padding-bottom: 15px;
+}
+
+.padding-bottom-lg {
+  padding-bottom: 20px;
+}
+
+.padding-bottom-xl {
+  padding-bottom: 25px;
+}
+
+.padding-left-xs {
+  padding-left: 5px;
+}
+
+.padding-left-sm {
+  padding-left: 10px;
+}
+
+.padding-left {
+  padding-left: 15px;
+}
+
+.padding-left-lg {
+  padding-left: 20px;
+}
+
+.padding-left-xl {
+  padding-left: 25px;
+}
+
+.padding-lr-xs {
+  padding-left: 5px;
+  padding-right: 5px;
+}
+
+.padding-lr-sm {
+  padding-left: 10px;
+  padding-right: 10px;
+}
+
+.padding-lr {
+  padding-left: 15px;
+  padding-right: 15px;
+}
+
+.padding-lr-lg {
+  padding-left: 20px;
+  padding-right: 20px;
+}
+
+.padding-lr-xl {
+  padding-left: 25px;
+  padding-right: 25px;
+}
+
+.padding-tb-xs {
+  padding-top: 5px;
+  padding-bottom: 5px;
+}
+
+.padding-tb-sm {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+.padding-tb {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+
+.padding-tb-lg {
+  padding-top: 20px;
+  padding-bottom: 20px;
+}
+
+.padding-tb-xl {
+  padding-top: 25px;
+  padding-bottom: 25px;
+}
+
+/* -- 浮动 --  */
+
+.cf::after, .cf::before {
+  content: " ";
+  display: table;
+}
+
+.cf::after {
+  clear: both;
+}
+
+.fl {
+  float: left;
+}
+
+.fr {
+  float: right;
+}
+
+/* ==================
+          图片
+ ==================== */
+
+image {
+  max-width: 100%;
+  display: inline-block;
+  position: relative;
+  z-index: 0;
+}
+
+image.loading::before {
+  content: "";
+  background: #f5f5f5;
+  display: block;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  z-index: -2;
+}
+
+image.loading::after {
+  content: "\e7f1";
+  font-family: "iconfont";
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 16px;
+  height: 16px;
+  line-height: 16px;
+  right: 0;
+  bottom: 0;
+  z-index: -1;
+  font-size: 16px;
+  margin: auto;
+  color: #ccc;
+  -webkit-animation: icon-spin 2s infinite linear;
+  animation: icon-spin 2s infinite linear;
+  display: block;
+}
+
+image.response {
+  width: 100%;
+}
+
+/* ==================
+         开关
+ ==================== */
+
+switch, checkbox, radio {
+  position: relative;
+}
+
+switch::after {
+  font-family: "iconfont" !important;
+  content: "\e645";
+  position: absolute;
+  color: #fff;
+  top: 50%;
+  margin-top: -8px;
+  left: 10px;
+  font-size: 16px;
+  line-height: 16px;
+  pointer-events: none;
+  transform: scale(0, 0);
+  transition: all 0.3s ease-in-out 0s;
+}
+
+switch[checked]::after {
+  transform: scale(1, 1);
+}
+
+switch::before {
+  font-family: "iconfont" !important;
+  content: "\e646";
+  position: absolute;
+  color: #fff;
+  top: 50%;
+  margin-top: -8px;
+  right: 10px;
+  font-size: 16px;
+  line-height: 16px;
+  pointer-events: none;
+  transform: scale(1, 1);
+  transition: all 0.3s ease-in-out 0s;
+  z-index: 9;
+}
+
+radio::before, checkbox::before {
+  font-family: "iconfont" !important;
+  content: "\e645";
+  position: absolute;
+  color: #fff;
+  top: 50%;
+  margin-top: -8px;
+  right: 5px;
+  font-size: 16px;
+  line-height: 16px;
+  pointer-events: none;
+  transform: scale(1, 1);
+  transition: all 0.3s ease-in-out 0s;
+  z-index: 9;
+}
+
+switch[checked]::before {
+  transform: scale(0, 0);
+}
+
+switch .wx-switch-input {
+  background: #aaa !important;
+  border-color: #aaa;
+  padding: 0 30px;
+  margin: 0;
+}
+
+radio-group {
+  display: inline-block;
+}
+
+radio .wx-radio-input, checkbox .wx-checkbox-input {
+  margin: 0;
+  width: 24px;
+  height: 24px;
+}
+
+checkbox.round .wx-checkbox-input {
+  border-radius: 50px;
+}
+
+switch .wx-switch-input-checked::after {
+  margin-left: 10px;
+  box-shadow: none;
+}
+
+switch.radius .wx-switch-input::after, switch.radius .wx-switch-input,
+switch.radius .wx-switch-input::before {
+  border-radius: 5px;
+}
+
+switch .wx-switch-input::before, radio.radio::before,
+checkbox .wx-checkbox-input::before, radio .wx-radio-input::before {
+  display: none;
+}
+
+radio.radio[checked]::after {
+  content: "";
+  background: transparent;
+  display: block;
+  position: absolute;
+  width: 8px;
+  height: 8px;
+  z-index: 999;
+  top: 0px;
+  left: 0px;
+  right: 0;
+  bottom: 0;
+  margin: auto;
+  border-radius: 100px;
+  border: 8px solid #fff;
+}
+
+switch.sm, checkbox.sm, radio.sm {
+  transform: scale(0.8);
+}
+
+.switch-sex::after {
+  content: "\e71c";
+}
+
+.switch-sex::before {
+  content: "\e71a";
+}
+
+.switch-sex .wx-switch-input {
+  background: #e54d42 !important;
+  border-color: #e54d42;
+}
+
+.switch-sex[checked] .wx-switch-input {
+  background: #0081ff !important;
+  border-color: #0081ff !important;
+}
+
+/* ==================
+          背景
+ ==================== */
+
+.line-red::after, .lines-red::after, switch.red[checked] .wx-switch-input,
+checkbox.red[checked] .wx-checkbox-input, radio.red[checked] .wx-radio-input {
+  border-color: #e54d42 !important;
+}
+
+.line-orange::after, .lines-orange::after,
+switch.orange[checked] .wx-switch-input,
+checkbox.orange[checked] .wx-checkbox-input,
+radio.orange[checked] .wx-radio-input {
+  border-color: #f37b1d !important;
+}
+
+.line-yellow::after, .lines-yellow::after,
+switch.yellow[checked] .wx-switch-input,
+checkbox.yellow[checked] .wx-checkbox-input,
+radio.yellow[checked] .wx-radio-input {
+  border-color: #fbbd08 !important;
+}
+
+.line-olive::after, .lines-olive::after, switch.olive[checked] .wx-switch-input,
+checkbox.olive[checked] .wx-checkbox-input, radio.olive[checked] .wx-radio-input {
+  border-color: #8dc63f !important;
+}
+
+.line-green::after, .lines-green::after, switch.green[checked] .wx-switch-input,
+checkbox.green[checked] .wx-checkbox-input, checkbox[checked] .wx-checkbox-input,
+radio.green[checked] .wx-radio-input {
+  border-color: #39b54a !important;
+}
+
+.line-cyan::after, .lines-cyan::after, switch.cyan[checked] .wx-switch-input,
+checkbox.cyan[checked] .wx-checkbox-input, radio.cyan[checked] .wx-radio-input {
+  border-color: #1cbbb4 !important;
+}
+
+.line-blue::after, .lines-blue::after, switch.blue[checked] .wx-switch-input,
+checkbox.blue[checked] .wx-checkbox-input, radio.blue[checked] .wx-radio-input {
+  border-color: #0081ff !important;
+}
+
+.line-purple::after, .lines-purple::after,
+switch.purple[checked] .wx-switch-input,
+checkbox.purple[checked] .wx-checkbox-input,
+radio.purple[checked] .wx-radio-input {
+  border-color: #6739b6 !important;
+}
+
+.line-mauve::after, .lines-mauve::after, switch.mauve[checked] .wx-switch-input,
+checkbox.mauve[checked] .wx-checkbox-input, radio.mauve[checked] .wx-radio-input {
+  border-color: #9c26b0 !important;
+}
+
+.line-pink::after, .lines-pink::after, switch.pink[checked] .wx-switch-input,
+checkbox.pink[checked] .wx-checkbox-input, radio.pink[checked] .wx-radio-input {
+  border-color: #e03997 !important;
+}
+
+.line-brown::after, .lines-brown::after, switch.brown[checked] .wx-switch-input,
+checkbox.brown[checked] .wx-checkbox-input, radio.brown[checked] .wx-radio-input {
+  border-color: #a5673f !important;
+}
+
+.line-grey::after, .lines-grey::after, switch.grey[checked] .wx-switch-input,
+checkbox.grey[checked] .wx-checkbox-input, radio.grey[checked] .wx-radio-input {
+  border-color: #8799a3 !important;
+}
+
+.line-gray::after, .lines-gray::after, switch.gray[checked] .wx-switch-input,
+checkbox.gray[checked] .wx-checkbox-input, radio.gray[checked] .wx-radio-input {
+  border-color: #aaa !important;
+}
+
+.line-black::after, .lines-black::after, switch.black[checked] .wx-switch-input,
+checkbox.black[checked] .wx-checkbox-input, radio.black[checked] .wx-radio-input {
+  border-color: #333 !important;
+}
+
+.line-white::after, .lines-white::after, switch.white[checked] .wx-switch-input,
+checkbox.white[checked] .wx-checkbox-input, radio.white[checked] .wx-radio-input {
+  border-color: #fff !important;
+}
+
+.bg-red, switch.red[checked] .wx-switch-input,
+checkbox.red[checked] .wx-checkbox-input, radio.red[checked] .wx-radio-input {
+  background-color: #e54d42 !important;
+  color: #fff !important;
+}
+
+.bg-orange, switch.orange[checked] .wx-switch-input,
+checkbox.orange[checked] .wx-checkbox-input,
+radio.orange[checked] .wx-radio-input {
+  background-color: #f37b1d !important;
+  color: #fff !important;
+}
+
+.bg-yellow, switch.yellow[checked] .wx-switch-input,
+checkbox.yellow[checked] .wx-checkbox-input,
+radio.yellow[checked] .wx-radio-input {
+  background-color: #fbbd08 !important;
+  color: #333 !important;
+}
+
+.bg-olive, switch.olive[checked] .wx-switch-input,
+checkbox.olive[checked] .wx-checkbox-input, radio.olive[checked] .wx-radio-input {
+  background-color: #8dc63f !important;
+  color: #fff !important;
+}
+
+.bg-green, switch.green[checked] .wx-switch-input,
+switch[checked] .wx-switch-input, checkbox.green[checked] .wx-checkbox-input,
+checkbox[checked] .wx-checkbox-input, radio.green[checked] .wx-radio-input,
+radio[checked] .wx-radio-input {
+  background-color: #39b54a !important;
+  color: #fff !important;
+}
+
+.bg-cyan, switch.cyan[checked] .wx-switch-input,
+checkbox.cyan[checked] .wx-checkbox-input, radio.cyan[checked] .wx-radio-input {
+  background-color: #1cbbb4 !important;
+  color: #fff !important;
+}
+
+.bg-blue, switch.blue[checked] .wx-switch-input,
+checkbox.blue[checked] .wx-checkbox-input, radio.blue[checked] .wx-radio-input {
+  background-color: #0081ff !important;
+  color: #fff !important;
+}
+
+.bg-purple, switch.purple[checked] .wx-switch-input,
+checkbox.purple[checked] .wx-checkbox-input,
+radio.purple[checked] .wx-radio-input {
+  background-color: #6739b6 !important;
+  color: #fff !important;
+}
+
+.bg-mauve, switch.mauve[checked] .wx-switch-input,
+checkbox.mauve[checked] .wx-checkbox-input, radio.mauve[checked] .wx-radio-input {
+  background-color: #9c26b0 !important;
+  color: #fff !important;
+}
+
+.bg-pink, switch.pink[checked] .wx-switch-input,
+checkbox.pink[checked] .wx-checkbox-input, radio.pink[checked] .wx-radio-input {
+  background-color: #e03997 !important;
+  color: #fff !important;
+}
+
+.bg-brown, switch.brown[checked] .wx-switch-input,
+checkbox.brown[checked] .wx-checkbox-input, radio.brown[checked] .wx-radio-input {
+  background-color: #a5673f !important;
+  color: #fff !important;
+}
+
+.bg-grey, switch.grey[checked] .wx-switch-input,
+checkbox.grey[checked] .wx-checkbox-input, radio.grey[checked] .wx-radio-input {
+  background-color: #8799a3 !important;
+  color: #fff !important;
+}
+
+.bg-gray, switch.gray[checked] .wx-switch-input,
+checkbox.gray[checked] .wx-checkbox-input, radio.gray[checked] .wx-radio-input {
+  background-color: #f0f0f0 !important;
+  color: #666 !important;
+}
+
+.bg-black, switch.black[checked] .wx-switch-input,
+checkbox.black[checked] .wx-checkbox-input, radio.black[checked] .wx-radio-input {
+  background-color: #333 !important;
+  color: #fff !important;
+}
+
+.bg-white, switch.white[checked] .wx-switch-input,
+checkbox.white[checked] .wx-checkbox-input, radio.white[checked] .wx-radio-input {
+  background-color: #fff !important;
+  color: #666;
+}
+
+.bg-shadeTop {
+  background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01));
+  color: #fff;
+}
+
+.bg-shadeBottom {
+  background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1));
+  color: #fff;
+}
+
+.none-bg, .line-white, .lines-white {
+  background-color: transparent !important;
+}
+
+.bg-red.light {
+  color: #e54d42 !important;
+  background: #fadbd9 !important;
+}
+
+.bg-orange.light {
+  color: #f37b1d !important;
+  background: #fde6d2 !important;
+}
+
+.bg-yellow.light {
+  color: #fbbd08 !important;
+  background: #fef2ce !important;
+}
+
+.bg-olive.light {
+  color: #8dc63f !important;
+  background: #e8f4d9 !important;
+}
+
+.bg-green.light {
+  color: #39b54a !important;
+  background: #d7f0db !important;
+}
+
+.bg-cyan.light {
+  color: #1cbbb4 !important;
+  background: #d2f1f0 !important;
+}
+
+.bg-blue.light {
+  color: #0081ff !important;
+  background: #cce6ff !important;
+}
+
+.bg-purple.light {
+  color: #6739b6 !important;
+  background: #e1d7f0 !important;
+}
+
+.bg-mauve.light {
+  color: #9c26b0 !important;
+  background: #ebd4ef !important;
+}
+
+.bg-pink.light {
+  color: #e03997 !important;
+  background: #f9d7ea !important;
+}
+
+.bg-brown.light {
+  color: #a5673f !important;
+  background: #ede1d9 !important;
+}
+
+.bg-grey.light {
+  color: #8799a3 !important;
+  background: #e7ebed !important;
+}
+
+.bg-gray.light {
+  color: #666 !important;
+  background: #fadbd9 !important;
+}
+
+.bg-gray.light {
+  color: #888 !important;
+  background: #f1f1f1 !important;
+}
+
+.gradual-red {
+  background-image: linear-gradient(45deg, #f43f3b, #ec008c) !important;
+  color: #fff !important;
+}
+
+.gradual-orange {
+  background-image: linear-gradient(45deg, #ff9700, #ed1c24) !important;
+  color: #fff !important;
+}
+
+.gradual-green {
+  background-image: linear-gradient(45deg, #39b54a, #8dc63f) !important;
+  color: #fff !important;
+}
+
+.gradual-purple {
+  background-image: linear-gradient(45deg, #9000ff, #5e00ff) !important;
+  color: #fff !important;
+}
+
+.gradual-pink {
+  background-image: linear-gradient(45deg, #ec008c, #6739b6) !important;
+  color: #fff !important;
+}
+
+.gradual-blue {
+  background-image: linear-gradient(45deg, #0081ff, #1cbbb4) !important;
+  color: #fff !important;
+}
+
+button.shadow[class*="-red"] {
+  box-shadow: 3px 3px 4px rgba(204, 69, 59, 0.2) !important;
+}
+
+button.shadow[class*="-orange"] {
+  box-shadow: 3px 3px 4px rgba(217, 109, 26, 0.2) !important;
+}
+
+button.shadow[class*="-yellow"] {
+  box-shadow: 3px 3px 4px rgba(224, 170, 7, 0.2) !important;
+}
+
+button.shadow[class*="-olive"] {
+  box-shadow: 3px 3px 4px rgba(124, 173, 55, 0.2) !important;
+}
+
+button.shadow[class*="-green"] {
+  box-shadow: 3px 3px 4px rgba(48, 156, 63, 0.2) !important;
+}
+
+button.shadow[class*="-cyan"] {
+  box-shadow: 3px 3px 4px rgba(28, 187, 180, 0.2) !important;
+}
+
+button.shadow[class*="-blue"] {
+  box-shadow: 3px 3px 4px rgba(0, 102, 204, 0.2) !important;
+}
+
+button.shadow[class*="-purple"] {
+  box-shadow: 3px 3px 4px rgba(88, 48, 156, 0.2) !important;
+}
+
+button.shadow[class*="-mauve"] {
+  box-shadow: 3px 3px 4px rgba(133, 33, 150, 0.2) !important;
+}
+
+button.shadow[class*="-pink"] {
+  box-shadow: 3px 3px 4px rgba(199, 50, 134, 0.2) !important;
+}
+
+button.shadow[class*="-brown"] {
+  box-shadow: 3px 3px 4px rgba(140, 88, 53, 0.2) !important;
+}
+
+button.shadow[class*="-grey"] {
+  box-shadow: 3px 3px 4px rgba(114, 130, 138, 0.2) !important;
+}
+
+button.shadow[class*="-gray"] {
+  box-shadow: 3px 3px 4px rgba(114, 130, 138, 0.2) !important;
+}
+
+button.shadow[class*="-black"] {
+  box-shadow: 3px 3px 4px rgba(26, 26, 26, 0.2) !important;
+}
+
+.bg-img {
+  background-size: cover;
+  background-position: center;
+  background-repeat: no-repeat;
+}
+
+.bg-mask {
+  background-color: #333;
+  position: relative;
+}
+
+.bg-mask::after {
+  content: "";
+  border-radius: inherit;
+  width: 100%;
+  height: 100%;
+  display: block;
+  background-color: rgba(0, 0, 0, 0.5);
+  position: absolute;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  top: 0;
+}
+
+.bg-mask view, .bg-mask cover-view {
+  z-index: 5;
+  position: relative;
+}
+
+.bg-mask>cover-view {
+  background-color: rgba(0, 0, 0, 0.5);
+}
+
+.bg-video {
+  position: relative;
+}
+
+.bg-video video {
+  display: block;
+  height: 100%;
+  width: 100%;
+  -o-object-fit: cover;
+  object-fit: cover;
+  position: absolute;
+  top: 0;
+  z-index: 0;
+  pointer-events: none;
+}
+
+/* ==================
+          文本
+ ==================== */
+
+.text-xs {
+  font-size: 10px;
+}
+
+.text-sm {
+  font-size: 12px;
+}
+
+.text-df {
+  font-size: 14px;
+}
+
+.text-lg {
+  font-size: 16px;
+}
+
+.text-xl {
+  font-size: 18px;
+}
+
+.text-xxl {
+  font-size: 22px;
+}
+
+.text-sl {
+  font-size: 40px;
+}
+
+.text-xsl {
+  font-size: 60px;
+}
+
+.text-Abc {
+  text-transform: Capitalize;
+}
+
+.text-ABC {
+  text-transform: Uppercase;
+}
+
+.text-abc {
+  text-transform: Lowercase;
+}
+
+.text-price::before {
+  content: "¥";
+  font-size: 80%;
+  margin-right: 2px;
+}
+
+.text-cut {
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+.text-bold {
+  font-weight: bold;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.text-content {
+  line-height: 1.6;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.text-red, .line-red, .lines-red {
+  color: #e54d42 !important;
+}
+
+.text-orange, .line-orange, .lines-orange {
+  color: #f37b1d !important;
+}
+
+.text-yellow, .line-yellow, .lines-yellow {
+  color: #fbbd08 !important;
+}
+
+.text-olive, .line-olive, .lines-olive {
+  color: #8dc63f !important;
+}
+
+.text-green, .line-green, .lines-green {
+  color: #39b54a !important;
+}
+
+.text-cyan, .line-cyan, .lines-cyan {
+  color: #1cbbb4 !important;
+}
+
+.text-blue, .line-blue, .lines-blue {
+  color: #0081ff !important;
+}
+
+.text-purple, .line-purple, .lines-purple {
+  color: #6739b6 !important;
+}
+
+.text-mauve, .line-mauve, .lines-mauve {
+  color: #9c26b0 !important;
+}
+
+.text-pink, .line-pink, .lines-pink {
+  color: #e03997 !important;
+}
+
+.text-brown, .line-brown, .lines-brown {
+  color: #a5673f !important;
+}
+
+.text-grey, .line-grey, .lines-grey {
+  color: #8799a3 !important;
+}
+
+.text-gray, .line-gray, .lines-gray {
+  color: #aaa !important;
+}
+
+.text-black, .line-black, .lines-black {
+  color: #333 !important;
+}
+
+.text-white, .line-white, .lines-white {
+  color: #fff !important;
+}
+
+/* ==================
+          边框
+ ==================== */
+
+/* -- 实线 -- */
+
+.solid, .solid-top, .solid-right, .solid-bottom, .solid-left, .solids,
+.solids-top, .solids-right, .solids-bottom, .solids-left, .dashed, .dashed-top,
+.dashed-right, .dashed-bottom, .dashed-left {
+  position: relative;
+}
+
+.solid::after, .solid-top::after, .solid-right::after, .solid-bottom::after,
+.solid-left::after, .solids::after, .solids-top::after, .solids-right::after,
+.solids-bottom::after, .solids-left::after, .dashed::after, .dashed-top::after,
+.dashed-right::after, .dashed-bottom::after, .dashed-left::after {
+  content: " ";
+  width: 200%;
+  height: 200%;
+  position: absolute;
+  top: 0;
+  left: 0;
+  border-radius: inherit;
+  transform: scale(0.5);
+  transform-origin: 0 0;
+  pointer-events: none;
+  box-sizing: border-box;
+}
+
+.solid::after {
+  border: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-top::after {
+  border-top: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-right::after {
+  border-right: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-bottom::after {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-left::after {
+  border-left: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+.solids::after {
+  border: 4rpx solid #eee;
+}
+
+.solids-top::after {
+  border-top: 4rpx solid #eee;
+}
+
+.solids-right::after {
+  border-right: 4rpx solid #eee;
+}
+
+.solids-bottom::after {
+  border-bottom: 4rpx solid #eee;
+}
+
+.solids-left::after {
+  border-left: 4rpx solid #eee;
+}
+
+/* -- 虚线 -- */
+
+.dashed::after {
+  border: 1px dashed #ddd;
+}
+
+.dashed-top::after {
+  border-top: 1px dashed #ddd;
+}
+
+.dashed-right::after {
+  border-right: 1px dashed #ddd;
+}
+
+.dashed-bottom::after {
+  border-bottom: 1px dashed #ddd;
+}
+
+.dashed-left::after {
+  border-left: 1px dashed #ddd;
+}
+
+/* -- 阴影 -- */
+
+.shadow {
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.shadow-lg {
+  box-shadow: 0px 20px 50px 0px rgba(0, 0, 0, 0.07);
+}
+
+.shadow-warp {
+  position: relative;
+  box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
+}
+
+.shadow-warp:before, .shadow-warp:after {
+  position: absolute;
+  content: "";
+  top: 10px;
+  bottom: 15px;
+  left: 10px;
+  width: 50%;
+  box-shadow: 0 15px 10px rgba(0, 0, 0, 0.2);
+  transform: rotate(-3deg);
+  z-index: -1;
+}
+
+.shadow-warp:after {
+  right: 10px;
+  left: auto;
+  transform: rotate(3deg);
+}
+
+.shadow-blur {
+  position: relative;
+}
+
+.shadow-blur::before {
+  content: "";
+  display: block;
+  background: inherit;
+  filter: blur(5px);
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 5px;
+  left: 5px;
+  z-index: -1;
+  opacity: 0.4;
+  transform-origin: 0 0;
+  border-radius: inherit;
+  transform: scale(1, 1);
+}
+
+/* ==================
+          按钮
+ ==================== */
+
+.round, button.icon {
+  border-radius: 5000px !important;
+}
+
+.radius {
+  border-radius: 3px !important;
+}
+
+button {
+  position: relative;
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  box-sizing: border-box;
+  padding: 10px 15px 8px;
+  font-size: 14px;
+  line-height: 1;
+  text-align: center;
+  text-decoration: none;
+  border-radius: 3px;
+  overflow: visible;
+  color: #666;
+  background-color: #fff !important;
+  margin-left: initial;
+  transform: translate(0px, 0px);
+  margin-right: initial;
+}
+
+button::after, tag[class*="line-"]::after {
+  content: " ";
+  width: 200%;
+  height: 200%;
+  position: absolute;
+  top: 0;
+  left: 0;
+  border: 1rpx solid rgba(0, 0, 0, 0.2);
+  transform: scale(0.5);
+  transform-origin: 0 0;
+  box-sizing: border-box;
+  border-radius: inherit;
+  z-index: 1;
+  pointer-events: none;
+}
+
+button[class*="line"]::after, tag.radius[class*="line"]::after {
+  border-radius: 6px;
+}
+
+button.round[class*="line"]::after, tag.round[class*="line"]::after {
+  border-radius: 500px;
+}
+
+button[class*="lines"]::after {
+  border: 3px solid rgba(0, 0, 0, 0.2);
+}
+
+button[class*="bg-"]::after {
+  display: none;
+}
+
+button.sm {
+  padding: 7px 10px 5px;
+  font-size: 12px;
+}
+
+button.lg {
+  padding: 16px 20px 14px;
+  font-size: 16px;
+}
+
+button.icon.sm {
+  width: 28px;
+  height: 28px;
+}
+
+button.icon {
+  width: 35px;
+  height: 35px;
+  padding: 0;
+}
+
+button.icon.lg {
+  width: 41px;
+  height: 41px;
+}
+
+button.shadow-blur::before {
+  top: 2px;
+  left: 2px;
+  filter: blur(3px);
+  opacity: 0.6;
+}
+
+button.button-hover {
+  transform: translate(1px, 1px);
+}
+
+.block {
+  display: block;
+}
+
+button.block {
+  display: flex;
+}
+
+button[disabled] {
+  opacity: 0.6;
+  color: #fff;
+}
+
+/* ==================
+          徽章
+ ==================== */
+
+tag {
+  font-size: 12px;
+  color: #666;
+  vertical-align: middle;
+  position: relative;
+  display: inline-flex;
+  align-items: stretch;
+  justify-content: center;
+  box-sizing: border-box;
+  padding: 6px 7px 5px;
+  line-height: 1;
+  background: #fff;
+  font-family: Helvetica Neue, Helvetica, sans-serif;
+}
+
+tag[class*="line-"]::after {
+  border-radius: 0;
+}
+
+tag+tag {
+  margin-left: 5px;
+}
+
+tag.sm {
+  font-size: 10px;
+  padding: 5px 6px 3px;
+}
+
+capsule {
+  display: inline-flex;
+  vertical-align: middle;
+}
+
+capsule + capsule {
+  margin-left: 5px;
+}
+
+capsule tag {
+  margin: 0;
+}
+
+capsule tag[class*="line-"]:last-child::after {
+  border-left: 0px solid transparent !important;
+}
+
+capsule tag[class*="line-"]:first-child::after {
+  border-right: 0px solid transparent !important;
+}
+
+capsule.radius tag:first-child {
+  border-top-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+
+capsule.radius tag:last-child::after, capsule.radius tag[class*="line-"] {
+  border-top-right-radius: 6px;
+  border-bottom-right-radius: 6px;
+}
+
+capsule.round tag:first-child {
+  border-top-left-radius: 100px;
+  border-bottom-left-radius: 100px;
+  text-indent: 2px;
+}
+
+capsule.round tag:last-child::after, capsule.round tag:last-child {
+  border-top-right-radius: 100px;
+  border-bottom-right-radius: 100px;
+  text-indent: -2px;
+}
+
+tag.badge {
+  background: #dd514c;
+  border-radius: 100px;
+  position: absolute;
+  top: -5px;
+  right: -5px;
+  font-size: 10px;
+  padding: 3px 5px 2px;
+  color: #fff;
+}
+
+tag:empty {
+  padding: 4px;
+  top: -2px;
+  right: -2px;
+}
+
+/* ==================
+          头像
+ ==================== */
+
+avatar {
+  font-variant: small-caps;
+  margin: 0;
+  padding: 0;
+  display: inline-block;
+  text-align: center;
+  background: #ccc;
+  color: #fff;
+  white-space: nowrap;
+  position: relative;
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+  background-size: cover;
+  background-position: center;
+  vertical-align: middle;
+}
+
+avatar text {
+  position: absolute;
+  left: 50%;
+  display: inline-block;
+  transform-origin: 0 center;
+  transform: scale(0.75) translateX(-50%);
+}
+
+avatar.sm {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+
+avatar > icon {
+  position: absolute;
+  left: 50%;
+  top: 0;
+  bottom: 0;
+  margin: auto;
+  transform-origin: 0 center;
+  transform: scale(1.2) translateX(-50%);
+}
+
+avatar.sm > icon {
+  transform: scale(0.75) translateX(-50%);
+}
+
+avatar.lg > icon {
+  transform: scale(1.75) translateX(-50%);
+}
+
+avatar.xl > icon {
+  transform: scale(2.2) translateX(-50%);
+}
+
+avatar.lg {
+  width: 45px;
+  height: 45px;
+  line-height: 45px;
+}
+
+avatar.xl {
+  width: 64px;
+  height: 64px;
+  line-height: 64px;
+}
+
+avatar-group {
+  direction: rtl;
+  unicode-bidi: bidi-override;
+  padding: 0 5px 0 20px;
+  display: inline-block;
+}
+
+avatar-group avatar {
+  margin-left: -15px;
+  border: 2px solid #f1f1f1;
+  vertical-align: middle;
+}
+
+avatar-group avatar.sm {
+  margin-left: -10px;
+  border: 1px solid #f1f1f1;
+}
+
+/* ==================
+         进度条
+ ==================== */
+
+progress-bar {
+  overflow: hidden;
+  height: 14px;
+  background-color: #ebeef5;
+  display: inline-flex;
+  align-items: center;
+  width: 100%;
+}
+
+progress-bar+view, progress-bar+text {
+  line-height: 1;
+}
+
+progress-bar.xs {
+  height: 5px;
+}
+
+progress-bar.sm {
+  height: 10px;
+}
+
+progress-bar view {
+  width: 0;
+  height: 100%;
+  align-items: center;
+  display: flex;
+  justify-items: flex-end;
+  justify-content: space-around;
+  font-size: 10px;
+  color: #fff;
+  background: #0081ff;
+  transition: width 0.6s ease;
+}
+
+progress-bar text {
+  align-items: center;
+  display: flex;
+  font-size: 10px;
+  color: #666;
+  text-indent: 5px;
+}
+
+progress-bar.text-progress {
+  padding-right: 30px;
+}
+
+progress-bar.striped view {
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-size: 36px 36px;
+}
+
+progress-bar.active view {
+  animation: progress-bar-stripes 2s linear infinite;
+}
+
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 36px 0;
+  }
+
+  to {
+    background-position: 0 0;
+  }
+}
+
+/* ==================
+          加载
+ ==================== */
+
+load {
+  display: block;
+  line-height: 3em;
+  text-align: center;
+}
+
+load::before {
+  font-family: "iconfont" !important;
+  display: inline-block;
+  margin-right: 3px;
+}
+
+load.loading::before {
+  content: "\e67a";
+  animation: icon-spin 2s infinite linear;
+}
+
+load.loading::after {
+  content: "加载中...";
+}
+
+load.over::before {
+  content: "\e64a";
+}
+
+load.over::after {
+  content: "没有更多了";
+}
+
+load.erro::before {
+  content: "\e658";
+}
+
+load.erro::after {
+  content: "加载失败";
+}
+
+load.load-icon::before {
+  font-size: 16px;
+}
+
+load.load-icon::after {
+  display: none;
+}
+
+load.load-icon.over {
+  display: none;
+}
+
+/* ==================
+          列表
+ ==================== */
+
+.grayscale {
+  filter: grayscale(1);
+}
+
+list.menu {
+  padding: 0 15px;
+  background: #fff;
+  display: block;
+}
+
+list.menu.no-padding {
+  padding: 0;
+}
+
+list.menu+list.menu {
+  margin-top: 15px;
+}
+
+list+list {
+  margin-top: 15px;
+}
+
+list.menu>item {
+  position: relative;
+  line-height: 18px;
+  font-size: 16px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border-bottom: 1px solid #eee;
+  min-height: 50px;
+}
+
+list.menu>item.cur {
+  background-color: #fcf7e9;
+}
+
+list.menu>item:last-child {
+  border: none;
+}
+
+list.menu.no-padding>item {
+  padding: 15px;
+}
+
+list.menu-avatar.no-padding>item {
+  padding-left: 70px;
+}
+
+list.menu-avatar.no-padding>item avatar {
+  left: 15px;
+}
+
+list.menu.no-padding>item.arrow {
+  padding-right: 33px;
+}
+
+list.menu>item .content {
+  line-height: 1.6em;
+  flex: 1;
+}
+
+list.menu>item button.content {
+  padding: 0;
+  justify-content: flex-start;
+  font-size: 16px;
+}
+
+list.menu>item button.content::after {
+  display: none;
+}
+
+list.menu>item .content>text[class*="icon"], list.menu>item .content>image,
+list.menu>item .content>icon {
+  margin-right: 5px;
+  display: inline-block;
+  width: 1.4em;
+  height: 1.6em;
+  vertical-align: middle;
+  text-align: center;
+}
+
+list.menu>item .action {
+  text-align: right;
+}
+
+list>item.grayscale {
+  background-color: #f5f5f5;
+}
+
+list.menu>item .action tag:empty {
+  right: 5px;
+}
+
+list.menu>item.arrow {
+  padding-right: 18px;
+}
+
+list.menu>item.arrow::after {
+  font-family: "iconfont" !important;
+  display: block;
+  content: "\e6a3";
+  position: absolute;
+  font-size: 17px;
+  color: #aaa;
+  line-height: 15px;
+  height: 15px;
+  width: 15px;
+  text-align: center;
+  top: 1px;
+  bottom: 0;
+  right: 0;
+  margin: auto;
+}
+
+list.menu.no-padding>item.arrow::after {
+  right: 15px;
+}
+
+list.menu>item avatar-group avatar {
+  border-color: #fff;
+}
+
+list.card-menu {
+  margin-left: 15px;
+  margin-right: 15px;
+  border-radius: 10px;
+  overflow: hidden;
+}
+
+list.menu-avatar>item>avatar {
+  position: absolute;
+  left: 0;
+}
+
+list.menu-avatar>item {
+  padding-left: 55px;
+  height: 70px;
+}
+
+list.menu>item .content tag.sm {
+  font-size: 8px;
+  line-height: 80%;
+  padding: 4px 3px 2px;
+  margin-top: -3px;
+}
+
+list.grid {
+  text-align: center;
+  background: #fff;
+}
+
+list.grid>item {
+  display: flex;
+  flex-direction: column;
+  border-right: 1rpx solid #eee;
+  border-bottom: 1rpx solid #eee;
+  padding: 10px;
+}
+
+list.grid>item icon {
+  display: block;
+  width: 100%;
+  position: relative;
+  font-size: 24px;
+  margin-top: 10px;
+}
+
+list.grid>item text {
+  display: block;
+  color: #888;
+  margin-top: 5px;
+  line-height: 20px;
+  font-size: 13px;
+}
+
+list.grid>item tag {
+  left: 50%;
+  right: auto;
+  margin-left: 10px;
+}
+
+list.grid.col-3>item:nth-child(3n) {
+  border-right: 0px;
+}
+
+list.grid.col-4>item:nth-child(4n) {
+  border-right: 0px;
+}
+
+list.grid.col-5>item:nth-child(5n) {
+  border-right: 0px;
+}
+
+list.grid.no-border {
+  padding: 10px 5px;
+}
+
+list.grid.no-border>item {
+  border: none !important;
+  padding-top: 5px;
+  padding-bottom: 5px;
+}
+
+list.menu-avatar.comment > item {
+  height: auto;
+  padding-top: 15px;
+  padding-bottom: 15px;
+  padding-left: 45px;
+}
+
+list.menu-avatar.comment  avatar {
+  align-self: flex-start;
+}
+
+/* ==================
+          操作条
+ ==================== */
+
+bar {
+  display: flex;
+  position: relative;
+  align-items: center;
+  background: #fff;
+  height: 50px;
+  justify-content: space-between;
+  font-size: 16px;
+}
+
+bar .action {
+  display: flex;
+  align-items: center;
+  height: 100%;
+  justify-content: flex-start;
+  max-width: 100%;
+}
+
+bar .action:first-child {
+  margin-left: 15px;
+  font-size: 15px;
+}
+
+bar .action:first-child text {
+  display: inline-block;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  text-align: left;
+  width: 100%;
+}
+
+bar avatar:first-child {
+  margin-left: 10px;
+}
+
+bar .action:first-child >icon[class*="icon"] {
+  margin-left: -0.5em;
+}
+
+bar .action:last-child {
+  margin-right: 15px;
+}
+
+bar .action>icon[class*="icon"] {
+  font-size: 18px;
+  height: 100%;
+  width: 1.4em;
+}
+
+bar .action>icon[class*="icon"]+icon[class*="icon"] {
+  margin-left: 0.5em;
+}
+
+bar .content {
+  position: absolute;
+  text-align: center;
+  width: 400rpx;
+  left: 0;
+  right: 0;
+  bottom: 8px;
+  margin: auto;
+  height: 30px;
+  font-size: 18px;
+  line-height: 30px;
+  cursor: none;
+  pointer-events: none;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+bar.btn-group {
+  justify-content: space-around;
+}
+
+bar.btn-group button {
+  padding: 10px 16px;
+}
+
+bar.btn-group button {
+  flex: 1;
+  margin: 0 10px;
+  max-width: 50%;
+}
+
+bar .serach-form {
+  background: #f5f5f5;
+  line-height: 32px;
+  height: 32px;
+  font-size: 12px;
+  color: #666;
+  flex: 1;
+  display: flex;
+  align-items: center;
+  margin: 0 10px;
+}
+
+bar .serach-form +.action {
+  margin-right: 10px;
+}
+
+bar .serach-form +.action text+icon {
+  margin-right: -0.5em;
+}
+
+bar .serach-form input {
+  flex: 1;
+  padding-right: 10px;
+  height: 32px;
+  line-height: 32px;
+  font-size: 13px;
+}
+
+bar .serach-form [class*="icon"] {
+  width: 2em;
+  height: auto;
+}
+
+bar .serach-form.round [class*="icon"] {
+  margin-left: 0.5em;
+}
+
+bar .serach-form [class*="icon"]::before {
+  top: 0px;
+}
+
+bar.fixed, .nav.fixed {
+  position: fixed;
+  width: 100%;
+  top: 0;
+  z-index: 1024;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+bar.foot {
+  position: fixed;
+  width: 100%;
+  bottom: 0;
+  z-index: 1024;
+  box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.1);
+}
+
+bar.shop {
+  padding: 0;
+}
+
+bar.shop .action {
+  font-size: 12px;
+  position: relative;
+  flex: 1;
+  text-align: center;
+  padding: 0 10px;
+  display: block;
+  height: auto !important;
+  line-height: 1;
+  margin: 0 !important;
+}
+
+bar.shop [class*="icon"] {
+  width: 50px !important;
+  position: relative;
+  display: block;
+  height: auto !important;
+  margin: 0 auto 5px !important;
+}
+
+bar.shop .submit {
+  align-items: center;
+  display: flex;
+  justify-content: center;
+  text-align: center;
+  position: relative;
+  flex: 2;
+  height: 100%;
+}
+
+bar.shop .submit:last-child {
+  flex: 2.6;
+}
+
+bar.shop .submit+.submit {
+  flex: 2;
+}
+
+bar.shop .submit button {
+  margin-left: 10px;
+}
+
+bar.shop .submit:last-child button {
+  margin-left: 0px;
+}
+
+bar.shop .submit+.submit button {
+  margin-left: 0px;
+  margin-right: 10px;
+}
+
+bar.shop .action::after {
+  content: " ";
+  width: 200%;
+  height: 200%;
+  position: absolute;
+  top: 0;
+  left: 0;
+  transform: scale(0.5);
+  transform-origin: 0 0;
+  border-right: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+bar.input {
+  padding-right: 10px;
+}
+
+bar.input input {
+  overflow: initial;
+  line-height: 32px;
+  height: 32px;
+  min-height: 32px;
+  flex: 1;
+  font-size: 15px;
+  margin: 0 10px;
+}
+
+bar.input .action {
+  margin-left: 10px;
+}
+
+bar.input .action [class*="icon"] {
+  font-size: 24px;
+}
+
+bar.input input+.action {
+  margin-right: 10px;
+  margin-left: 0px;
+}
+
+bar.input .action:first-child [class*="icon"] {
+  margin-left: 0px;
+}
+
+custom {
+  display: block;
+  position: relative;
+}
+
+custom bar {
+  padding-right: 110px;
+  box-shadow: 0px 0px 0px !important;
+}
+
+/* ==================
+         导航栏
+ ==================== */
+
+.nav {
+  white-space: nowrap;
+}
+
+::-webkit-scrollbar {
+  display: none;
+}
+
+.nav item {
+  height: 45px;
+  display: inline-block;
+  line-height: 45px;
+  margin: 0 5px;
+  padding: 0 10px;
+}
+
+.nav item.cur {
+  border-bottom: 2px solid;
+}
+
+/* ==================
+         时间轴
+ ==================== */
+
+timeline {
+  display: block;
+  background: #fff;
+}
+
+timeline time {
+  width: 60px;
+  text-align: center;
+  padding: 10px 0;
+  font-size: 13px;
+  color: #888;
+  display: block;
+}
+
+timeline>item {
+  padding: 15px 15px 15px 60px;
+  position: relative;
+  display: block;
+  color: #ccc;
+  z-index: 0;
+}
+
+timeline>item::after {
+  content: "";
+  display: block;
+  position: absolute;
+  width: 1rpx;
+  background: #ddd;
+  left: 30px;
+  height: 100%;
+  top: 0;
+  z-index: 8;
+}
+
+timeline>item::before {
+  font-family: "iconfont";
+  content: "\e763";
+  display: block;
+  position: absolute;
+  top: 18px;
+  z-index: 9;
+  background: #fff;
+  width: 25px;
+  height: 25px;
+  text-align: center;
+  border: none;
+  line-height: 25px;
+  left: 18px;
+}
+
+timeline>item[class*="icon"]::before {
+  background: #fff;
+  width: 25px;
+  height: 25px;
+  text-align: center;
+  border: none;
+  line-height: 25px;
+  left: 18px;
+}
+
+timeline>item>.content {
+  background: #f1f1f1;
+  padding: 15px;
+  border-radius: 3px;
+  display: block;
+  color: #666;
+}
+
+timeline>item>.content+.content {
+  margin-top: 10px;
+}
+
+/* ==================
+         聊天
+ ==================== */
+
+chat {
+  display: flex;
+  flex-direction: column;
+}
+
+chat item {
+  display: flex;
+  padding: 15px 15px 35px;
+  position: relative;
+}
+
+chat item>avatar {
+  width: 40px;
+  height: 40px;
+}
+
+chat item>.main {
+  max-width: calc(100% - 130px);
+  margin: 0 20px;
+  display: flex;
+  align-items: center;
+}
+
+chat item>image {
+  height: 160px;
+}
+
+chat item>.main .content {
+  background: #fff;
+  padding: 10px;
+  border-radius: 3px;
+  display: inline-flex;
+  max-width: 100%;
+  align-items: center;
+  color: #666;
+  font-size: 15px;
+  position: relative;
+  min-height: 40px;
+  line-height: 20px;
+  text-align: left;
+}
+
+chat item .date {
+  position: absolute;
+  font-size: 12px;
+  color: #aaa;
+  width: calc(100% - 160px);
+  bottom: 10px;
+  left: 80px;
+}
+
+chat item .action {
+  padding: 0 15px;
+  display: flex;
+  align-items: center;
+}
+
+chat item>.main .content::after {
+  content: "";
+  top: 12px;
+  transform: rotate(180deg);
+  position: absolute;
+  z-index: 100;
+  display: inline-block;
+  width: 0;
+  height: 0;
+  vertical-align: middle;
+  border-bottom: 8px solid transparent;
+  border-top: 8px solid transparent;
+  overflow: hidden;
+  border-right-color: #fff;
+  border-left: 8px solid #333;
+  border-right: 0 dotted;
+  border-left-color: #fff;
+  left: -7px;
+  right: initial;
+}
+
+chat item.self {
+  justify-content: flex-end;
+  text-align: right;
+}
+
+chat item.self>.main .content::after {
+  left: auto;
+  right: -7px;
+  border-right: 8px solid #fff;
+  border-left: 0 dotted;
+}
+
+chat item.self>.main .bg-green.content::after {
+  border-right-color: #39b50a;
+}
+
+chat info {
+  display: inline-block;
+  margin: 10px auto;
+  font-size: 12px;
+  padding: 4px 6px;
+  background-color: rgba(0, 0, 0, 0.2);
+  border-radius: 3px;
+  color: #fff;
+  max-width: 400rpx;
+  line-height: 1.4;
+}
+
+/* ==================
+         卡片
+ ==================== */
+
+card {
+  display: block;
+  overflow: hidden;
+}
+
+card > item {
+  display: block;
+  background: #fff;
+  overflow: hidden;
+  border-radius: 5px;
+  margin: 15px;
+}
+
+card > item.shadow-blur {
+  overflow: initial;
+}
+
+card.no-card > item {
+  margin: 0px;
+  border-radius: 0px;
+}
+
+card.case .image {
+  position: relative;
+}
+
+card.case .image image {
+  width: 100%;
+}
+
+card.case .image tag {
+  position: absolute;
+  right: 0;
+  top: 0;
+}
+
+card.case .image bar {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  background-color: transparent;
+  padding: 0px 15px;
+  word-wrap: normal;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+card.case.no-card .image {
+  margin: 15px 15px 0;
+  overflow: hidden;
+  border-radius: 5px;
+}
+
+card.dynamic {
+  display: block;
+}
+
+card.dynamic>item {
+  display: block;
+  background-color: #fff;
+  overflow: hidden;
+}
+
+card.dynamic>item > .text-content {
+  padding: 0 15px 0;
+  max-height: 6.4em;
+  overflow: hidden;
+  font-size: 15px;
+  margin-bottom: 10px;
+}
+
+card.dynamic>item .square-img {
+  width: 100%;
+  height: 100px;
+  border-radius: 3px;
+}
+
+card.dynamic>item .only-img {
+  width: 100%;
+  height: 160px;
+  border-radius: 3px;
+}
+
+/* card.dynamic>item .comment {
+  padding: 10px;
+  background: #f1f1f1;
+  margin: 0 15px 15px;
+  border-radius: 3px;
+} */
+
+card.article {
+  display: block;
+}
+
+card.article>item {
+  padding-bottom: 15px;
+}
+
+card.article>item .title {
+  font-size: 15px;
+  font-weight: 900;
+  word-wrap: normal;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  color: #333;
+  line-height: 50px;
+  padding: 0 15px;
+}
+
+card.article>item .content {
+  display: flex;
+  padding: 0 15px;
+}
+
+card.article>item .content > image {
+  width: 120px;
+  height: 6.4em;
+  margin-right: 10px;
+  border-radius: 3px;
+}
+
+card.article>item .content .desc {
+  flex: 1;
+  width: 500rpx;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
+
+card.article>item .content .text-content {
+  font-size: 14px;
+  color: #888;
+  height: 4.8em;
+  overflow: hidden;
+}
+
+/* ==================
+         表单
+ ==================== */
+
+form-group {
+  background: #fff;
+  padding: 0 15px;
+  display: flex;
+  align-items: center;
+  min-height: 100rpx;
+  justify-content: space-between;
+}
+
+form-group + form-group {
+  border-top: 1rpx solid #eee;
+}
+
+form-group .title {
+  text-align: justify;
+  padding-right: 15px;
+  font-size: 15px;
+  position: relative;
+  height: 30px;
+  line-height: 30px;
+}
+
+form-group.top {
+  align-items: baseline;
+}
+
+form-group input {
+  flex: 1;
+  font-size: 15px;
+  color: #555;
+  padding-right: 10px;
+}
+
+form-group > icon[class*="icon-"] {
+  font-size: 18px;
+  padding: 0;
+  box-sizing: border-box;
+}
+
+form-group textarea, form-group textarea textarea {
+  margin: 16px 0 15px;
+  height: 4.8em;
+  width: 100%;
+  line-height: 1.2em;
+  flex: 1;
+  font-size: 14px;
+  padding: 0;
+  box-sizing: content-box;
+  display: inline-block;
+  vertical-align: top;
+}
+
+form-group textarea::after {
+  content: "测试文字";
+  opacity: 0;
+}
+
+form-group .grid-square {
+  margin: 15px 0 0 !important;
+}
+
+form-group picker {
+  flex: 1;
+  padding-right: 20px;
+  overflow: hidden;
+  position: relative;
+}
+
+form-group picker .picker {
+  line-height: 50px;
+  font-size: 14px;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+  width: 100%;
+  text-align: right;
+}
+
+form-group picker::after {
+  font-family: iconfont !important;
+  display: block;
+  content: "\e6a3";
+  position: absolute;
+  font-size: 17px;
+  color: #aaa;
+  line-height: 50px;
+  width: 30px;
+  text-align: center;
+  top: 0;
+  bottom: 0;
+  right: -10px;
+  margin: auto;
+}
+
+form-group textarea[disabled], form-group textarea[disabled] .placeholder {
+  color: transparent;
+}
+
+/* ==================
+         模态窗口
+ ==================== */
+
+modal-box {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1110;
+  opacity: 0;
+  outline: 0;
+  text-align: center;
+  -ms-transform: scale(1.185);
+  transform: scale(1.185);
+  backface-visibility: hidden;
+  perspective: 1000px;
+  background: rgba(0, 0, 0, 0.6);
+  transition: all 0.6s ease-in-out 0;
+  pointer-events: none;
+}
+
+modal-box::before {
+  content: "\200B";
+  display: inline-block;
+  height: 100%;
+  vertical-align: middle;
+}
+
+modal-box.show {
+  opacity: 1;
+  transition-duration: 0.3s;
+  -ms-transform: scale(1);
+  transform: scale(1);
+  overflow-x: hidden;
+  overflow-y: auto;
+  pointer-events: auto;
+}
+
+dialog {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+  margin-left: auto;
+  margin-right: auto;
+  width: 680rpx;
+  max-width: 100%;
+  background: #f8f8f8;
+  border-radius: 10rpx;
+  overflow: hidden;
+}
+
+modal-box.bottom-modal::before {
+  vertical-align: bottom;
+}
+
+modal-box.bottom-modal dialog {
+  width: 100%;
+  border-radius: 0;
+}
+
+modal-box.bottom-modal {
+  margin-bottom: -500px;
+}
+
+modal-box.bottom-modal.show {
+  margin-bottom: 0;
+}
+
+/* ==================
+         轮播
+ ==================== */
+
+swiper.square-dot .wx-swiper-dot {
+  background: #fff;
+  opacity: 0.4;
+  width: 5px !important;
+  height: 5px !important;
+  border-radius: 10px !important;
+  transition: all 0.3s ease-in-out 0s !important;
+}
+
+swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active {
+  opacity: 1;
+  width: 15px !important;
+}
+
+swiper.round-dot .wx-swiper-dot {
+  /* background: #39b54a; */
+  width: 5px !important;
+  height: 5px !important;
+  top: -2px !important;
+  transition: all 0.3s ease-in-out 0s !important;
+  position: relative;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after {
+  content: "";
+  position: absolute;
+  width: 5px;
+  height: 5px;
+  top: 0px;
+  left: 0px;
+  right: 0;
+  bottom: 0;
+  margin: auto;
+  background: #fff;
+  border-radius: 10px;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active {
+  width: 9px !important;
+  height: 9px !important;
+  top: 0px !important;
+}
+
+.screen-swiper {
+  min-height: 375rpx;
+}
+
+.screen-swiper image {
+  width: 100%;
+  display: block;
+  height: 100%;
+  margin: 0;
+}
+
+.card-swiper {
+  height: 420rpx;
+}
+
+.card-swiper swiper-item {
+  width: 610rpx !important;
+  left: 70rpx !important;
+  box-sizing: border-box;
+  padding: 20px 0px 35px;
+  overflow: initial !important;
+}
+
+.card-swiper swiper-item .bg-img {
+  width: 100%;
+  display: block;
+  height: 100%;
+  border-radius: 5px;
+  transform: scale(0.9);
+  transition: all 0.2s ease-in 0s;
+}
+
+.card-swiper swiper-item.cur .bg-img {
+  transform: none;
+  transition: all 0.2s ease-in 0s;
+}
+
+.tower-swiper {
+  height: 420rpx;
+  position: relative;
+}
+
+.tower-swiper .tower-item {
+  position: absolute;
+  width: 300rpx;
+  height: 380rpx;
+  top: 0;
+  bottom: 0;
+  left:50%;
+  margin: auto;
+  transition: all 0.3s ease-in 0s;
+  opacity: 1;
+}
+.tower-swiper .tower-item.none {
+  opacity: 0;
+}
+
+.tower-swiper .tower-item .bg-img {
+  width: 100%;
+  height: 100%;
+  border-radius: 3px;
+}

ファイルの差分が大きいため隠しています
+ 57 - 0
demo/icon.wxss


BIN
demo/images/BasicsBg.png


BIN
demo/images/cjkz.png


BIN
demo/images/componentBg.png


BIN
demo/images/logo.png


BIN
demo/images/tabbar/basics.png


BIN
demo/images/tabbar/basics_cur.png


BIN
demo/images/tabbar/component.png


BIN
demo/images/tabbar/component_cur.png


BIN
demo/images/tabbar/plugin.png


BIN
demo/images/tabbar/plugin_cur.png


+ 14 - 0
demo/pages/basics/avatar/avatar.js

@@ -0,0 +1,14 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    ColorList: app.globalData.ColorList,
+  },
+  onLoad: function() {},
+  pageBack() {
+    wx.navigateBack({
+      delta: 1
+    });
+  }
+});

+ 0 - 0
pages/animation/animation.json → demo/pages/basics/avatar/avatar.json


+ 72 - 0
demo/pages/basics/avatar/avatar.wxml

@@ -0,0 +1,72 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 头像
+    </navigator>
+  </bar>
+</custom>
+<bar>
+  <view class='action'>
+    <icon class='icon-title text-blue' />头像形状
+  </view>
+</bar>
+<view class="padding">
+  <avatar class="round" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);"></avatar>
+  <avatar class="radius margin-left" style="background-image:url(https://image.weilanwl.com/img/square-2.jpg);"></avatar>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />头像尺寸
+  </view>
+</bar>
+<view class="padding">
+  <avatar class="sm round margin-left" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);"></avatar>
+  <avatar class="round margin-left" style="background-image:url(https://image.weilanwl.com/img/square-2.jpg);"></avatar>
+  <avatar class="lg round margin-left" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+  <avatar class="xl round margin-left" style="background-image:url(https://image.weilanwl.com/img/square-4.jpg);"></avatar>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />内嵌文字(图标)
+  </view>
+</bar>
+<view class="padding">
+  <avatar class="radius">
+    <icon class='icon-people' />
+  </avatar>
+  <avatar class="radius  margin-left">
+    <text>港</text>
+  </avatar>
+</view>
+
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />头像颜色
+  </view>
+</bar>
+<view class="padding-sm">
+  <avatar class="round lg bg-{{item.name}} margin-xs" wx:for="{{ColorList}}" wx:key>
+    <text>{{item.name}}</text>
+  </avatar>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />头像组
+  </view>
+</bar>
+<view class='padding'>
+  <avatar-group>
+    <avatar class="round lg" wx:for="{{4}}" wx:key style="background-image:url(https://image.weilanwl.com/img/square-{{index+1}}.jpg);"></avatar>
+  </avatar-group>
+</view>
+
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />头像标签
+  </view>
+</bar>
+<view class='padding'>
+  <avatar class="round lg margin-left" wx:for="{{4}}" wx:key style="background-image:url(https://image.weilanwl.com/img/square-{{index+1}}.jpg);">
+    <tag class="badge {{index%2==0?'icon-female bg-pink':'icon-male bg-blue'}}"></tag>
+  </avatar>
+</view>

+ 1 - 0
demo/pages/basics/avatar/avatar.wxss

@@ -0,0 +1 @@
+/* pages/basics/avatar/avatar.wxss */

+ 11 - 0
demo/pages/basics/background/background.js

@@ -0,0 +1,11 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    ColorList: app.globalData.ColorList,
+    
+  },
+  onLoad: function() {},
+
+})

+ 0 - 0
pages/chat/chat.json → demo/pages/basics/background/background.json


+ 130 - 0
demo/pages/basics/background/background.wxml

@@ -0,0 +1,130 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 背景颜色
+    </navigator>
+  </bar>
+</custom>
+
+<bar class="solid-bottom">
+  <view class='action'>
+    <icon class='icon-title text-blue' />深色背景
+  </view>
+</bar>
+<view class='grid col-3 padding-sm'>
+  <view class='padding-sm' wx:for="{{ColorList}}" wx:key>
+    <view class='bg-{{item.name}} padding radius text-center shadow-blur'>
+      <view class="text-lg">{{item.title}}</view>
+      <view class='margin-top-sm text-Abc'>{{item.name}}</view>
+    </view>
+  </view>
+</view>
+
+<bar class="solid-bottom">
+  <view class='action'>
+    <icon class='icon-title text-blue' />淡色背景
+  </view>
+</bar>
+<view class='grid col-3 bg-white padding-sm'>
+  <view class='padding-sm' wx:for="{{ColorList}}" wx:key wx:if="{{index<12}}">
+    <view class='bg-{{item.name}} padding radius text-center light'>
+      <view class="text-lg">{{item.title}}</view>
+      <view class='margin-top-sm text-Abc'>{{item.name}}</view>
+    </view>
+  </view>
+</view>
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />渐变背景
+  </view>
+</bar>
+<view class='grid col-2 padding-sm'>
+  <view class='padding-sm'>
+    <view class='gradual-red padding radius text-center shadow-blur'>
+      <view class="text-lg">魅红</view>
+      <view class='margin-top-sm text-Abc'>#f43f3b - #ec008c</view>
+    </view>
+  </view>
+  <view class='padding-sm'>
+    <view class='gradual-orange padding radius text-center shadow-blur'>
+      <view class="text-lg">鎏金</view>
+      <view class='margin-top-sm text-Abc'>#ff9700 - #ed1c24</view>
+    </view>
+  </view>
+  <view class='padding-sm'>
+    <view class='gradual-green padding radius text-center shadow-blur'>
+      <view class="text-lg">翠柳</view>
+      <view class='margin-top-sm text-Abc'>#39b54a - #8dc63f</view>
+    </view>
+  </view>
+  <view class='padding-sm'>
+    <view class='gradual-blue padding radius text-center shadow-blur'>
+      <view class="text-lg">靛青</view>
+      <view class='margin-top-sm text-Abc'>#0081ff - #1cbbb4</view>
+    </view>
+  </view>
+  <view class='padding-sm'>
+    <view class='gradual-purple padding radius text-center shadow-blur'>
+      <view class="text-lg">惑紫</view>
+      <view class='margin-top-sm text-Abc'>#9000ff - #5e00ff</view>
+    </view>
+  </view>
+  <view class='padding-sm'>
+    <view class='gradual-pink padding radius text-center shadow-blur'>
+      <view class="text-lg">霞彩</view>
+      <view class='margin-top-sm text-Abc'>#ec008c - #6739b6</view>
+    </view>
+  </view>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />图片背景
+  </view>
+</bar>
+<view class="bg-img bg-mask padding-tb-xl" style="background-image: url('https://albedo-theme.com/wp-content/uploads/2016/08/pexels-photo-26180.jpg')">
+  <view class='padding-xl text-white'>
+    <view class='padding-xs text-xl'>
+      我和春天有个约会
+    </view>
+    <view class='padding-xs'>
+      I Have a Date with Spring
+    </view>
+  </view>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />视频背景
+  </view>
+</bar>
+<view class="bg-video bg-mask">
+  <video src='https://www.weilanwl.com/theme/wl/assets/images/slider1.mp4' autoplay loop muted show-play-btn="{{false}}" controls="{{false}}" objectFit="cover"></video>
+  <cover-view class='padding-xl text-white'>
+    <cover-view class='padding-xs text-xl'>
+      开源是创新的动力之源
+    </cover-view>
+    <cover-view class='padding-xs'>
+      Open Source is the Power Source of Innovation
+    </cover-view>
+  </cover-view>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />透明背景(文字层)
+  </view>
+</bar>
+<view class='grid col-2 padding-sm'>
+  <view class='padding-sm'>
+    <view class="bg-img padding-bottom-xl" style="background-image: url('https://image.weilanwl.com/img/square-3.jpg')">
+      <view class='bg-shadeTop padding padding-bottom-xl'>
+        上面开始
+      </view>
+    </view>
+  </view>
+  <view class='padding-sm'>
+    <view class="bg-img padding-top-xl" style="background-image: url('https://image.weilanwl.com/img/square-3.jpg')">
+      <view class='bg-shadeBottom padding padding-top-xl '>
+        下面开始
+      </view>
+    </view>
+  </view>
+</view>

+ 0 - 0
demo/pages/basics/background/background.wxss


+ 18 - 0
demo/pages/basics/button/button.js

@@ -0,0 +1,18 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    ColorList: app.globalData.ColorList,
+  },
+  SetShadow(e) {
+    this.setData({
+      shadow: e.detail.value
+    })
+  },
+  SetBorderSize(e) {
+    this.setData({
+      bordersize: e.detail.value
+    })
+  },
+});

+ 0 - 0
pages/comment/comment.json → demo/pages/basics/button/button.json


+ 99 - 0
demo/pages/basics/button/button.wxml

@@ -0,0 +1,99 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 按钮
+    </navigator>
+    <navigator class='action' url='design' hover-class="none">
+      <icon class='icon-skinfill' />
+      <text class="text-df">设计</text>
+    </navigator>
+  </bar>
+</custom>
+<bar>
+  <view class='action'>
+    <icon class='icon-title text-blue' />按钮形状
+  </view>
+</bar>
+<view class="padding flex flex-wrap justify-between align-center">
+  <button>默认</button>
+  <button class='round'>圆角</button>
+  <button class='icon'>
+    <icon class='icon-emojifill' />
+  </button>
+</view>
+<bar class="margin-top ">
+  <view class='action'>
+    <icon class='icon-title text-blue' />按钮尺寸
+  </view>
+</bar>
+<view class="padding flex flex-wrap justify-between align-center">
+  <button class='round sm'>小尺寸</button>
+  <button class='round'>默认</button>
+  <button class='round lg'>大尺寸</button>
+</view>
+<bar class="margin-top ">
+  <view class='action'>
+    <icon class='icon-title text-blue' />按钮颜色
+  </view>
+  <view class='action'>
+    <text class='text-df'>阴影</text>
+    <switch class='sm' bindchange='SetShadow'></switch>
+  </view>
+</bar>
+<view class='grid col-5 padding-sm'>
+  <view class='margin-tb-sm text-center' wx:for="{{ColorList}}" wx:key>
+    <button class='round bg-{{item.name}} {{shadow?"shadow":""}}'>{{item.title}}</button>
+  </view>
+</view>
+<bar class="margin-top ">
+  <view class='action'>
+    <icon class='icon-title text-blue' />镂空按钮
+  </view>
+  <view class='action'>
+    <radio-group bindchange='SetBorderSize'>
+      <label class='margin-left-sm'>
+        <radio class='blue sm radio' value='' checked/>
+        <text> 小</text>
+      </label>
+      <label class='margin-left-sm'>
+        <radio class='blue sm radio' value='s' />
+        <text> 大</text>
+      </label>
+    </radio-group>
+  </view>
+</bar>
+<view class='grid col-5 padding-sm'>
+  <view class='margin-tb-sm text-center' wx:for="{{ColorList}}">
+    <button class='round line{{bordersize?bordersize:""}}-{{item.name}} {{shadow?"shadow":""}}'>{{item.title}}</button>
+  </view>
+</view>
+<bar class="margin-top ">
+  <view class='action'>
+    <icon class='icon-title text-blue' />块状按钮
+  </view>
+</bar>
+<view class="padding flex flex-direction">
+  <button class='bg-grey lg'>玄灰</button>
+  <button class='bg-red margin-tb-sm lg'>嫣红</button>
+</view>
+<bar class="margin-top ">
+  <view class='action'>
+    <icon class='icon-title text-blue' />无效状态
+  </view>
+</bar>
+<view class="padding">
+  <button class='block bg-blue margin-tb-sm lg' disabled type=''>无效状态</button>
+  <button class='block line-blue margin-tb-sm lg' disabled>无效状态</button>
+</view>
+<bar class="margin-top ">
+  <view class='action'>
+    <icon class='icon-title text-blue' />按钮加图标
+  </view>
+</bar>
+<view class="padding-xl">
+  <button class='block line-orange lg'>
+    <icon class='icon-upload' /> 图标</button>
+  <button class='block bg-blue margin-tb-sm lg'>
+    <icon class='icon-loading2 iconfont-spin' /> 加载</button>
+  <button class='block bg-black margin-tb-sm lg' loading> 微信加载</button>
+</view>

+ 1 - 0
demo/pages/basics/button/button.wxss

@@ -0,0 +1 @@
+  

+ 59 - 0
demo/pages/basics/button/design.js

@@ -0,0 +1,59 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    ColorList: app.globalData.ColorList,
+  },
+  showModal(e) {
+    this.setData({
+      modalName: e.currentTarget.dataset.target
+    })
+  },
+  hideModal(e) {
+    this.setData({
+      modalName: null
+    })
+  },
+  SetRound (e) {
+    this.setData({
+      round: e.detail.value
+    })
+  },
+  SetSize(e) {
+    this.setData({
+      size: e.detail.value
+    })
+  },
+  SetColor(e) {
+    this.setData({
+      color: e.currentTarget.dataset.color,
+      modalName: null
+    })
+  },
+  SetShadow(e) {
+    this.setData({
+      shadow: e.detail.value
+    })
+  },
+  SetBorder(e){
+    this.setData({
+      border: e.detail.value
+    })
+    if (!e.detail.value){
+      this.setData({
+        bordersize: false
+      })
+    }
+  },   
+  SetBorderSize(e) {
+    this.setData({
+      bordersize: e.detail.value
+    })
+  },
+  SetBlock(e) {
+    this.setData({
+      block: e.detail.value
+    })
+  },  
+});

+ 0 - 0
pages/image/image.json → demo/pages/basics/button/design.json


+ 81 - 0
demo/pages/basics/button/design.wxml

@@ -0,0 +1,81 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 按钮 / 设计
+    </navigator>
+  </bar>
+</custom>
+<view class="padding-xl">
+  <view class="box bg-white text-center radius {{block?'flex-direction':''}}">
+    <button class='{{border?"line":"bg"}}{{bordersize?bordersize:""}}-{{color}} {{round?"round":""}} {{size}} {{shadow?"shadow":""}} {{block?"block":""}}'>我是一个按钮</button>
+  </view>
+  <view class='padding text-center'> class="<text wx:if="{{color}}">{{border?"line":"bg"}}{{bordersize?bordersize:""}}-{{color}} {{round?"round":""}} {{size}} {{shadow?"shadow":""}} {{block?"block":""}}</text>" </view>
+</view>
+
+<form-group class="margin-top" bindtap="showModal" data-target="ColorModal">
+  <view class='title'>选择颜色</view>
+  <view class='padding-sm bg-{{color}} solid radius shadow-blur'></view>
+</form-group>
+<form-group>
+  <view class='title'>是否圆角</view>
+  <switch class='sm' bindchange='SetRound'></switch>
+</form-group>
+<form-group>
+  <view class='title'>选择尺寸</view>
+  <radio-group bindchange='SetSize'>
+    <label class='margin-left-sm'>
+      <radio class='blue sm radio' value='sm' />
+      <text> 小</text>
+    </label>
+    <label class='margin-left-sm'>
+      <radio class='blue sm radio' value='' checked/>
+      <text> 中</text>
+    </label>
+    <label class='margin-left-sm'>
+      <radio class='blue sm radio' value='lg' />
+      <text> 大</text>
+    </label>
+  </radio-group>
+</form-group>
+<form-group>
+  <view class='title'>是否添加阴影</view>
+  <switch class='sm' bindchange='SetShadow'></switch>
+</form-group>
+<form-group>
+  <view class='title'>是否镂空</view>
+  <switch class='sm' bindchange='SetBorder'></switch>
+</form-group>
+<form-group wx:if="{{border}}">
+  <view class='title'>边框大小</view>
+   <radio-group bindchange='SetBorderSize'>
+    <label class='margin-left-sm'>
+      <radio class='blue sm radio' value='' checked/>
+      <text> 小</text>
+    </label>
+    <label class='margin-left-sm'>
+      <radio class='blue sm radio' value='s' />
+      <text> 大</text>
+    </label>
+  </radio-group>
+</form-group>
+
+<!-- <form-group>
+  <view class='title'>定义为块元素</view>
+  <switch class='sm' bindchange='SetBlock'></switch>
+</form-group> -->
+
+<modal-box class="{{modalName=='ColorModal'?'show':''}}">
+  <dialog>
+    <bar class="justify-end">
+      <view class='content'>选择颜色</view>
+      <view class='action' bindtap='hideModal'>
+        <icon class='icon-close text-red'></icon>
+      </view>
+    </bar>
+    <view class='grid col-5 padding'>
+      <view class='padding-xs' wx:for="{{ColorList}}" wx:key bindtap='SetColor' data-color='{{item.name}}'>
+        <view class='padding-tb bg-{{item.name}} radius'> {{item.title}} </view>
+      </view>
+    </view>
+  </dialog>
+</modal-box>

+ 6 - 0
demo/pages/basics/button/design.wxss

@@ -0,0 +1,6 @@
+.box{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 100px;
+}

+ 10 - 0
demo/pages/basics/form/form.js

@@ -0,0 +1,10 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar
+  },
+  onLoad: function() {
+
+  },
+});

+ 0 - 0
pages/item/item.json → demo/pages/basics/form/form.json


+ 61 - 0
demo/pages/basics/form/form.wxml

@@ -0,0 +1,61 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back'/>
+      表单控件
+    </navigator>
+    <view class='action'>
+
+    </view>
+  </bar>
+</custom>
+<view class='text-center'>
+  <view class="padding-xl ">
+    <checkbox class=''></checkbox>
+    <radio-group>
+      <radio class='' checked name="sex" />
+      <radio class='blue sm' name="sex" />
+    </radio-group>
+  </view>
+  <view class="padding-xl ">
+    <switch class='' />
+    <radio-group>
+      <radio class='red radio' checked name="sex" />
+      <radio class='blue radio' name="sex" />
+    </radio-group>
+    <checkbox class='blue'></checkbox>
+    <checkbox class='cyan round'></checkbox>
+  </view>
+  <view class="padding-xl ">
+    <switch class=' sm' />
+    <radio-group>
+      <radio class='red radio sm' checked name="sex" />
+      <radio class='blue radio sm' name="sex" />
+    </radio-group>
+    <checkbox class='red sm'></checkbox>    
+    <checkbox class='cyan round sm'></checkbox>
+  </view>
+  <view class="padding-xl ">
+    <switch class='switch-sex' checked/>
+    <switch class='switch-sex sm' />
+  </view>
+  <view class="padding-xl ">
+    <switch class='red' checked/>
+    <switch class='blue sm' checked/>
+  </view>
+  <view class="padding-xl ">
+    <switch class='' checked/>
+    <switch class=' sm' checked/>
+  </view>
+  <view class="padding-xl ">
+    <switch class='' />
+    <switch class=' sm' />
+  </view>
+  <view class="padding-xl ">
+    <switch class='orange sm radius' />
+    <switch class='yellow radius' />
+  </view>
+  <view class="padding-xl ">
+    <switch class='blue radius' />
+  </view>
+</view>

+ 0 - 0
demo/pages/basics/form/form.wxss


+ 23 - 0
demo/pages/basics/home/home.js

@@ -0,0 +1,23 @@
+Page({
+  data: {
+    elements: [
+      { title: '布局', name: 'layout', color: 'cyan', icon: 'newsfill' },
+      { title: '背景', name: 'background', color: 'blue', icon: 'colorlens' },
+      { title: '文本', name: 'text', color: 'purple', icon: 'font' },
+      { title: '图标 ', name: 'icon', color: 'mauve', icon: 'icon' },
+      { title: '按钮', name: 'button', color: 'pink', icon: 'btn' },
+      { title: '标签', name: 'tag', color: 'brown', icon: 'tagfill' },
+      { title: '头像', name: 'avatar', color: 'red', icon: 'myfill' },
+      { title: '进度条', name: 'progress', color: 'orange', icon: 'icloading' },
+      { title: '边框阴影', name: 'shadow', color: 'olive', icon: 'copy' },
+      { title: '加载', name: 'loading', color: 'green', icon: 'loading2' },
+    ],
+  },  
+  onShareAppMessage(){
+    return {
+      title: 'ColorUI-高颜值的小程序UI组件库',
+      imageUrl:'https://image.weilanwl.com/color2.0/share2215.jpg',
+      path: '/pages/basics/home/home'
+    }    
+  }
+})

+ 0 - 0
pages/label/label.json → demo/pages/basics/home/home.json


+ 8 - 0
demo/pages/basics/home/home.wxml

@@ -0,0 +1,8 @@
+<image src='/images/BasicsBg.png' mode='widthFix' class='png' style='width:100%;height:486rpx'></image>
+<view class='nav-list'>
+  <navigator open-type="navigate" hover-class='none' url="../{{item.name}}/{{item.name}}" class="nav-li bg-{{item.color}}" wx:for="{{elements}}" wx:key>
+    <view class="nav-title">{{item.title}}</view>
+    <view class="nav-name">{{item.name}}</view>
+    <icon class='icon-{{item.icon}}'/>
+  </navigator>
+</view>

+ 0 - 0
demo/pages/basics/home/home.wxss


ファイルの差分が大きいため隠しています
+ 5 - 0
demo/pages/basics/icon/icon.js


+ 0 - 0
pages/modal/modal.json → demo/pages/basics/icon/icon.json


+ 22 - 0
demo/pages/basics/icon/icon.wxml

@@ -0,0 +1,22 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back'/> 图标
+    </navigator>
+    <view class='action'>
+
+    </view>
+  </bar>
+</custom>
+<bar class="search fixed" style="top:{{CustomBar}}px">
+  <view class='serach-form round'>
+    <icon class="icon-search"/>
+    <input type="text" placeholder="搜索icon" confirm-type="search" bindinput='searchIcon'/>
+  </view>
+</bar>
+<list class="grid col-3">
+  <item wx:for="{{icon}}" wx:key wx:if="{{item.isShow}}">
+    <icon class='icon-{{item.name}} lg text-gray'/>
+    <text>{{item.name}}</text>
+  </item>
+</list>

+ 6 - 0
demo/pages/basics/icon/icon.wxss

@@ -0,0 +1,6 @@
+page{
+  padding-top: 50px;
+}
+item.none{
+  display: none;
+}

+ 10 - 0
demo/pages/basics/image/image.js

@@ -0,0 +1,10 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar
+  },
+  onLoad: function() {
+    
+  },
+});

+ 0 - 0
pages/progress/progress.json → demo/pages/basics/image/image.json


+ 14 - 0
demo/pages/basics/image/image.wxml

@@ -0,0 +1,14 @@
+<custom style="height:{{CustomBar}}px;">
+    <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+        <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+            <icon class='icon-back'/>
+            图片
+        </navigator>
+        <view class='action'>
+
+        </view>
+    </bar>
+</custom>
+
+<image class="" src="https://image.weilanwl.com/img/square-4.jpg" mode="widthFix" lazy-load="true" binderror="" bindload=""></image>
+<view><text>好</text></view>

+ 19 - 0
demo/pages/basics/image/image.wxss

@@ -0,0 +1,19 @@
+/* view {
+  background: RED;
+  width: 100px;
+  height: 100px;
+  margin: 100px;
+  border-top-left-radius: 38.2% 61.8%;
+  border-top-right-radius: 61.8% 38.2%;
+  border-bottom-right-radius: 38.2% 61.8%;
+  border-bottom-left-radius: 61.8% 38.2%;
+  transform: rotate(-20deg);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  font-size: 50px;
+  color: #fff;
+}
+view text{  
+  transform: rotate(20deg);
+} */

+ 16 - 0
demo/pages/basics/layout/layout.js

@@ -0,0 +1,16 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    TabCur:0,
+    tabNav: ['Flex布局', 'Grid布局', '辅助布局']
+  },
+  tabSelect(e) {
+    console.log(e);
+    this.setData({
+      TabCur: e.currentTarget.dataset.id,
+      scrollLeft: (e.currentTarget.dataset.id - 1) * 60
+    })
+  }
+})

+ 0 - 0
pages/rating/rating.json → demo/pages/basics/layout/layout.json


+ 185 - 0
demo/pages/basics/layout/layout.wxml

@@ -0,0 +1,185 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 布局
+    </navigator>
+  </bar>
+</custom>
+<scroll-view scroll-x class="bg-white nav text-center fixed" style="top:{{CustomBar}}px">
+  <item class="{{index==TabCur?'text-blue cur':''}}" wx:for="{{tabNav}}" wx:key bindtap='tabSelect' data-id="{{index}}">
+    {{tabNav[index]}}
+  </item>
+</scroll-view>
+<block wx:if="{{TabCur==0}}">
+  <bar class="solid-bottom margin-top">
+    <view class='action'>
+      <icon class='icon-title text-blue' />固定尺寸
+    </view>
+  </bar>
+  <view class="padding bg-white">
+    <view class="flex flex-wrap">
+      <view class='basis-xs bg-grey margin-xs padding-sm radius'>xs(20%)</view>
+      <view class='basis-df'></view>
+      <view class='basis-sm bg-grey margin-xs padding-sm radius'>sm(40%)</view>
+      <view class='basis-df'></view>
+      <view class='basis-df bg-grey margin-xs padding-sm radius'>sub(50%)</view>
+      <view class='basis-lg bg-grey margin-xs padding-sm radius'>lg(60%)</view>
+      <view class='basis-xl bg-grey margin-xs padding-sm radius'>xl(80%)</view>
+    </view>
+  </view>
+  <bar class="margin-top solid-bottom">
+    <view class='action'>
+      <icon class='icon-title text-blue' />比例布局
+    </view>
+  </bar>
+  <view class="padding bg-white">
+    <view class="flex">
+      <view class='flex-sub bg-grey padding-sm margin-xs radius'>1</view>
+      <view class='flex-sub bg-grey padding-sm margin-xs radius'>1</view>
+    </view>
+    <view class="flex  p-xs margin-bottom-sm mb-sm">
+      <view class='flex-sub bg-grey padding-sm margin-xs radius'>1</view>
+      <view class='flex-twice bg-grey padding-sm margin-xs radius'>2</view>
+    </view>
+    <view class="flex  p-xs margin-bottom-sm mb-sm">
+      <view class='flex-sub bg-grey padding-sm margin-xs radius'>1</view>
+      <view class='flex-twice bg-grey padding-sm margin-xs radius'>2</view>
+      <view class='flex-treble bg-grey padding-sm margin-xs radius'>3</view>
+    </view>
+  </view>
+  <bar class="margin-top solid-bottom">
+    <view class='action'>
+      <icon class='icon-title text-blue' />水平对齐(justify)
+    </view>
+  </bar>
+  <view class="bg-white">
+    <view class="flex solid-bottom padding justify-start">
+      <view class='bg-grey padding-sm margin-xs radius'>start</view>
+      <view class='bg-grey padding-sm margin-xs radius'>start</view>
+    </view>
+    <view class="flex solid-bottom padding justify-end">
+      <view class='bg-grey padding-sm margin-xs radius'>end</view>
+      <view class='bg-grey padding-sm margin-xs radius'>end</view>
+    </view>
+    <view class="flex solid-bottom padding justify-center">
+      <view class='bg-grey padding-sm margin-xs radius'>center</view>
+      <view class='bg-grey padding-sm margin-xs radius'>center</view>
+    </view>
+    <view class="flex solid-bottom padding justify-between">
+      <view class='bg-grey padding-sm margin-xs radius'>between</view>
+      <view class='bg-grey padding-sm margin-xs radius'>between</view>
+    </view>
+    <view class="flex solid-bottom padding justify-around">
+      <view class='bg-grey padding-sm margin-xs radius'>around</view>
+      <view class='bg-grey padding-sm margin-xs radius'>around</view>
+    </view>
+  </view>
+  <bar class="margin-top solid-bottom">
+    <view class='action'>
+      <icon class='icon-title text-blue' />垂直对齐(align)
+    </view>
+  </bar>
+  <view class="bg-white">
+    <view class="flex solid-bottom padding align-start">
+      <view class='bg-grey padding-lg margin-xs radius'>ColorUi</view>
+      <view class='bg-grey padding-sm margin-xs radius'>start</view>
+    </view>
+    <view class="flex solid-bottom padding align-end">
+      <view class='bg-grey padding-lg margin-xs radius'>ColorUi</view>
+      <view class='bg-grey padding-sm margin-xs radius'>end</view>
+    </view>
+    <view class="flex solid-bottom padding align-center">
+      <view class='bg-grey padding-lg margin-xs radius'>ColorUi</view>
+      <view class='bg-grey padding-sm margin-xs radius'>center</view>
+    </view>
+  </view>
+</block>
+<block wx:if="{{TabCur==1}}">
+  <bar class="margin-top solid-bottom">
+    <view class='action'>
+      <icon class='icon-title text-blue' />等分列
+    </view>
+    <view class='action'></view>
+  </bar>
+  <view class="bg-white padding">
+    <view class="grid col-{{index+1}} margin-bottom text-center" wx:for="{{5}}" wx:key>
+      <view class="{{index%2==0?'bg-cyan':'bg-blue'}} padding" wx:for="{{(index+1)*2}}" wx:key>{{index+1}}</view>
+    </view>
+  </view>
+  <bar class="margin-top solid-bottom">
+    <view class='action'>
+      <icon class='icon-title text-blue' />等高
+    </view>
+    <view class='action'></view>
+  </bar>
+  <view class="bg-white padding">
+    <view class="grid col-4 grid-square">
+      <view class="bg-img" wx:for="{{4}}" wx:key style="background-image:url(https://image.weilanwl.com/img/square-{{index+1}}.jpg);"></view>
+    </view>
+  </view>
+</block>
+<block wx:if="{{TabCur==2}}">
+  <bar class="margin-top solid-bottom">
+    <view class='action'>
+      <icon class='icon-title text-blue' />浮动
+    </view>
+  </bar>
+  <view class="bg-white padding">
+    <view class=" cf padding-sm">
+      <view class='bg-grey radius fl padding-sm'>ColorUi fl</view>
+      <view class='bg-grey radius fr padding-sm'>ColorUi fr</view>
+    </view>
+  </view>
+</block>
+<block wx:if="{{TabCur==3}}">
+  <bar class="margin-top solid-bottom">
+    <view class='action'>
+      <icon class='icon-title text-blue' />内外边距
+    </view>
+  </bar>
+  <view class="bg-white">
+    <view class='padding bg-gray'>{size}的尺寸有xs/sm/df/lg/xl</view>
+    <view class='flex flex-wrap padding solid-top'>
+      <view class="basis-df padding-bottom-xs">外边距</view>
+      <view class="basis-df padding-bottom-xs">内边距</view>
+      <view class="basis-df">.margin-{size}</view>
+      <view class="basis-df">.padding-{size}</view>
+    </view>
+    <view class='flex flex-wrap padding solid-top'>
+      <view class="basis-df padding-bottom-xs">水平方向外边距</view>
+      <view class="basis-df padding-bottom-xs">水平方向内边距</view>
+      <view class="basis-df">.margin-lr-{size}</view>
+      <view class="basis-df">.padding-lr-{size}</view>
+    </view>
+    <view class='flex flex-wrap padding solid-top'>
+      <view class="basis-df padding-bottom-xs">垂直方向外边距</view>
+      <view class="basis-df padding-bottom-xs">垂直方向内边距</view>
+      <view class="basis-df">.margin-tb-{size}</view>
+      <view class="basis-df">.padding-tb-{size}</view>
+    </view>
+    <view class='flex flex-wrap padding solid-top'>
+      <view class="basis-df padding-bottom-xs">上外边距</view>
+      <view class="basis-df padding-bottom-xs">上内边距</view>
+      <view class="basis-df">.margin-top-{size}</view>
+      <view class="basis-df">.padding-top-{size}</view>
+    </view>
+    <view class='flex flex-wrap padding solid-top'>
+      <view class="basis-df padding-bottom-xs">右外边距</view>
+      <view class="basis-df padding-bottom-xs">右内边距</view>
+      <view class="basis-df">.margin-right-{size}</view>
+      <view class="basis-df">.padding-right-{size}</view>
+    </view>
+    <view class='flex flex-wrap padding solid-top'>
+      <view class="basis-df padding-bottom-xs">下外边距</view>
+      <view class="basis-df padding-bottom-xs">下内边距</view>
+      <view class="basis-df">margin-bottom-{size}</view>
+      <view class="basis-df">.padding-bottom-{size}</view>
+    </view>
+    <view class='flex flex-wrap padding solid-top'>
+      <view class="basis-df padding-bottom-xs">左外边距</view>
+      <view class="basis-df padding-bottom-xs">左内边距</view>
+      <view class="basis-df">.margin-left-{size}</view>
+      <view class="basis-df">.padding-left-{size}</view>
+    </view>
+  </view>
+</block>

+ 3 - 0
demo/pages/basics/layout/layout.wxss

@@ -0,0 +1,3 @@
+page{
+  padding-top: 45px;
+}

+ 12 - 0
demo/pages/basics/loading/loading.js

@@ -0,0 +1,12 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar
+  },
+  isLoading (e) {
+    this.setData({
+      isLoad: e.detail.value
+    })
+  },
+});

+ 0 - 0
pages/side/side.json → demo/pages/basics/loading/loading.json


+ 31 - 0
demo/pages/basics/loading/loading.wxml

@@ -0,0 +1,31 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 加载
+    </navigator>
+    <view class='action'>
+      <load class="load-icon {{!isLoad?'loading':'over'}}"></load>
+    </view>
+  </bar>
+</custom>
+<bar>
+  <view class='action'>
+    <icon class='icon-title text-blue'/>背景
+  </view>
+</bar>
+<load class="bg-blue {{!isLoad?'loading':'over'}}"></load>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue'/>加载状态
+  </view>
+  <view class='action'>
+  <switch class='sm' bindchange='isLoading'></switch>
+  </view>
+</bar>
+<load class="bg-grey {{!isLoad?'loading':'over'}}"></load>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue'/>加载错误
+  </view>
+</bar>
+<load class="bg-red erro"></load>

+ 1 - 0
demo/pages/basics/loading/loading.wxss

@@ -0,0 +1 @@
+/* pages/basics/load/load.wxss */

+ 38 - 0
demo/pages/basics/progress/progress.js

@@ -0,0 +1,38 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    ColorList: app.globalData.ColorList,
+    color:'red',
+  },
+  onLoad() {
+    let that = this;
+    setTimeout(function() {
+      that.setData({
+        loading: true
+      })
+    }, 500)
+  },
+  showModal(e) {
+    this.setData({
+      modalName: e.currentTarget.dataset.target
+    })
+  },
+  hideModal(e) {
+    this.setData({
+      modalName: null
+    })
+  },
+  SetColor(e) {
+    this.setData({
+      color: e.currentTarget.dataset.color,
+      modalName: null
+    })
+  },
+  SetActive(e) {
+    this.setData({
+      active: e.detail.value
+    })
+  },
+});

+ 0 - 0
pages/slider/slider.json → demo/pages/basics/progress/progress.json


+ 116 - 0
demo/pages/basics/progress/progress.wxml

@@ -0,0 +1,116 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 进度条
+    </navigator>
+  </bar>
+</custom>
+<bar class="solid-bottom">
+  <view class='action'>
+    <icon class='icon-title text-blue' />进度条形状
+  </view>
+</bar>
+<view class="padding bg-white">
+  <progress-bar>
+    <view class='bg-red' style="width:{{loading?'61.8%':''}};">61.8%</view>
+  </progress-bar>
+  <progress-bar class="radius margin-top">
+    <view class='bg-red' style="width:{{loading?'61.8%':''}};">61.8%</view>
+  </progress-bar>
+  <progress-bar class="round margin-top">
+    <view class='bg-red' style="width:{{loading?'61.8%':''}};">61.8%</view>
+  </progress-bar>
+</view>
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />进度条尺寸
+  </view>
+</bar>
+<view class="padding bg-white">
+  <progress-bar class="round">
+    <view class='bg-red' style="width:{{loading?'61.8%':''}};"></view>
+  </progress-bar>
+  <progress-bar class="round margin-top sm">
+    <view class='bg-red' style="width:{{loading?'61.8%':''}};"></view>
+  </progress-bar>
+  <progress-bar class="round margin-top xs">
+    <view class='bg-red' style="width:{{loading?'61.8%':''}};"></view>
+  </progress-bar>
+</view>
+
+<bar class="solid-bottom margin-top" bindtap="showModal" data-target="ColorModal">
+  <view class='action'>
+    <icon class='icon-title text-blue' />进度条颜色
+  </view>
+  <view class='action'>
+    <view class='padding-sm bg-{{color}} solid radius shadow-blur'></view>
+  </view>
+</bar>
+<view class="padding {{color=='white'?'bg-grey':'bg-white'}}">
+  <progress-bar class="round">
+    <view class='bg-{{color}}' style="width:{{loading?'61.8%':''}};"></view>
+  </progress-bar>
+</view>
+
+
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />进度条条纹
+  </view>
+  <switch class='sm margin-right-sm' bindchange='SetActive'></switch>
+</bar>
+<view class="padding bg-white">
+  <progress-bar class="round sm striped {{active?'active':''}}">
+    <view class='bg-green' style="width:{{loading?'60%':''}};"></view>
+  </progress-bar>
+  <progress-bar class="round sm margin-top-sm striped {{active?'active':''}}">
+    <view class='bg-black' style="width:{{loading?'40%':''}};"></view>
+  </progress-bar>
+</view>
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />进度条比例
+  </view>
+</bar>
+<view class="padding bg-white">
+  <progress-bar class="radius striped active">
+    <view class='bg-red' style="width:{{loading?'30%':''}};">30%</view>
+    <view class='bg-olive' style="width:{{loading?'45%':''}};">45%</view>
+    <view class='bg-cyan' style="width:{{loading?'25%':''}};">25%</view>
+  </progress-bar>
+</view>
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />进度条布局
+  </view>
+</bar>
+<view class="padding bg-white ">
+  <view class='flex'>
+    <progress-bar class="round">
+      <view class='bg-green' style="width:{{loading?'100%':''}};"></view>
+    </progress-bar>
+    <icon class='icon-roundcheckfill text-green margin-left-sm' />
+  </view>
+  <view class='flex margin-top'>
+    <progress-bar class="round">
+      <view class='bg-green' style="width:{{loading?'80%':''}};"></view>
+    </progress-bar>
+    <text class='margin-left'>80%</text>
+  </view>
+</view>
+
+<modal-box class="{{modalName=='ColorModal'?'show':''}}">
+  <dialog>
+    <bar class="justify-end">
+      <view class='content'>选择颜色</view>
+      <view class='action' bindtap='hideModal'>
+        <icon class='icon-close text-red'></icon>
+      </view>
+    </bar>
+    <view class='grid col-5 padding'>
+      <view class='padding-xs' wx:for="{{ColorList}}" wx:key bindtap='SetColor' data-color='{{item.name}}' wx:if="{{item.name!='gray'}}">
+        <view class='padding-tb bg-{{item.name}} radius'> {{item.title}} </view>
+      </view>
+    </view>
+  </dialog>
+</modal-box>

+ 0 - 0
demo/pages/basics/progress/progress.wxss


+ 12 - 0
demo/pages/basics/shadow/shadow.js

@@ -0,0 +1,12 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar
+  },
+  SetSize(e) {
+    this.setData({
+      size: e.detail.value
+    })
+  },
+});

+ 0 - 0
pages/sub/sub.json → demo/pages/basics/shadow/shadow.json


+ 34 - 0
demo/pages/basics/shadow/shadow.wxml

@@ -0,0 +1,34 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 边框阴影
+    </navigator>
+  </bar>
+</custom>
+<bar class="solid-bottom">
+  <view class='action'>
+    <icon class='icon-title text-blue' />边框
+  </view>  
+  <view class='action'>
+   <switch class='sm' bindchange='SetSize'></switch>
+  </view>   
+</bar>
+<view class='padding bg-white text-center'>
+  <view class='padding solid{{size?"s":""}}'>四周</view>
+  <view class='padding solid{{size?"s":""}}-top margin-top'>上</view>
+  <view class='padding solid{{size?"s":""}}-right margin-top'>右</view>
+  <view class='padding solid{{size?"s":""}}-bottom margin-top'>下</view>
+  <view class='padding solid{{size?"s":""}}-left margin-top'>左</view>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />阴影
+  </view>
+</bar>
+<view class="padding text-center">
+  <view class="padding-xl radius shadow bg-white"> 默认阴影</view>
+  <view class="padding-xl radius shadow-lg bg-white margin-top">长阴影</view>
+  <view class="padding-xl radius shadow-warp bg-white margin-top">翘边阴影</view>
+  <view class="padding-xl radius shadow-blur bg-red margin-top">根据背景颜色而改变的阴影</view>
+  <view class="padding-xl radius shadow-blur bg-red margin-top bg-img" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"><view>根据背景颜色而改变的阴影</view></view>
+</view>

+ 0 - 0
demo/pages/basics/shadow/shadow.wxss


+ 11 - 0
demo/pages/basics/tag/tag.js

@@ -0,0 +1,11 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    ColorList: app.globalData.ColorList,
+  },
+  onLoad: function() {
+    
+  }
+});

+ 0 - 0
pages/timeline/timeline.json → demo/pages/basics/tag/tag.json


+ 119 - 0
demo/pages/basics/tag/tag.wxml

@@ -0,0 +1,119 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 标签
+    </navigator>
+  </bar>
+</custom>
+
+<bar>
+  <view class='action'>
+    <icon class='icon-title text-blue' />标签形状
+  </view>
+</bar>
+<view class="padding">
+  <tag>默认</tag>
+  <tag class='round'>椭圆</tag>
+  <tag class='radius'>圆角</tag>
+</view>
+
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />标签尺寸
+  </view>
+</bar>
+<view class="padding">
+  <tag class='radius sm'>小尺寸</tag>
+  <tag class='radius'>普通尺寸</tag>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />标签颜色
+  </view>
+</bar>
+<view class='padding-sm flex flex-wrap'>
+  <view class="padding-xs" wx:for="{{ColorList}}" wx:key>
+    <tag class='bg-{{item.name}}'>{{item.title}}</tag>
+  </view>
+  <view class="padding-xs" wx:for="{{ColorList}}" wx:key wx:if="{{index<12}}">
+    <tag class='bg-{{item.name}} light'>{{item.title}}</tag>
+  </view>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />镂空标签
+  </view>
+</bar>
+<view class='padding-sm flex flex-wrap'>
+  <view class="padding-xs" wx:for="{{ColorList}}" wx:key>
+    <tag class='line-{{item.name}}'>{{item.title}}</tag>
+  </view>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />胶囊样式
+  </view>
+</bar>
+<view class="padding">
+  <capsule>
+    <tag class='bg-red'>
+      <icon class='icon-likefill' />
+    </tag>
+    <tag class="line-red">
+      12
+    </tag>
+  </capsule>
+  <capsule class="round">
+    <tag class='bg-blue '>
+      <icon class='icon-likefill' />
+    </tag>
+    <tag class="line-blue">
+      23
+    </tag>
+  </capsule>
+  <capsule class="round">
+    <tag class='bg-blue '>
+      说明
+    </tag>
+    <tag class="line-blue">
+      123
+    </tag>
+  </capsule>
+  <capsule class="radius">
+    <tag class='bg-grey '>
+      <icon class='icon-likefill' />
+    </tag>
+    <tag class="line-grey">
+      23
+    </tag>
+  </capsule>
+  <capsule class="radius">
+    <tag class='bg-brown sm'>
+      <icon class='icon-likefill' />
+    </tag>
+    <tag class="line-brown sm">
+      23
+    </tag>
+  </capsule>
+</view>
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue' />数字标签
+  </view>
+</bar>
+<view class="padding flex justify-between align-center">
+  <avatar class='xl radius'>
+    港
+    <tag class="badge">99+</tag>
+  </avatar>
+  <avatar class='xl radius' style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);">
+    <tag class='badge'>9</tag>
+  </avatar>
+  <avatar class='xl radius'>
+    <tag class='badge'>99</tag>
+    <icon class='icon-people' />
+  </avatar>
+  <avatar class='xl radius'>
+    <tag class='badge'>99+</tag>
+  </avatar>
+</view>

+ 0 - 0
demo/pages/basics/tag/tag.wxss


+ 85 - 0
demo/pages/basics/text/text.js

@@ -0,0 +1,85 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    list: [{
+      title: '嫣红',
+      name: 'red',
+      color: '#e54d42'
+    },
+    {
+      title: '桔橙',
+      name: 'orange',
+      color: '#f37b1d'
+    },
+    {
+      title: '明黄',
+      name: 'yellow',
+      color: '#fbbd08'
+    },
+    {
+      title: '橄榄',
+      name: 'olive',
+      color: '#8dc63f'
+    },
+    {
+      title: '森绿',
+      name: 'green',
+      color: '#39b54a'
+    },
+    {
+      title: '天青',
+      name: 'cyan',
+      color: '#1cbbb4'
+    },
+    {
+      title: '海蓝',
+      name: 'blue',
+      color: '#0081ff'
+    },
+    {
+      title: '姹紫',
+      name: 'purple',
+      color: '#6739b6'
+    },
+    {
+      title: '木槿',
+      name: 'mauve',
+      color: '#9c26b0'
+    },
+    {
+      title: '桃粉',
+      name: 'pink',
+      color: '#e03997'
+    },
+    {
+      title: '棕褐',
+      name: 'brown',
+      color: '#a5673f'
+    },
+    {
+      title: '玄灰',
+      name: 'grey',
+      color: '#8799a3'
+    },
+    {
+      title: '草灰',
+      name: 'gray',
+      color: '#aaaaaa'
+    },
+    {
+      title: '墨黑',
+      name: 'black',
+      color: '#333333'
+    },
+    {
+      title: '雅白',
+      name: 'white',
+      color: '#ffffff'
+    },
+    ]
+  },
+  onLoad: function () { },
+
+})

+ 1 - 0
demo/pages/basics/text/text.json

@@ -0,0 +1 @@
+{}

+ 148 - 0
demo/pages/basics/text/text.wxml

@@ -0,0 +1,148 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-blue" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back'/> 文本
+    </navigator>
+    <view class='action'>
+
+    </view>
+  </bar>
+</custom>
+<bar class="solid-bottom">
+  <view class='action'>
+    <icon class='icon-title text-blue'/>文字大小
+  </view>
+</bar>
+<view class='bg-white padding-lr'>
+  <view class='solids-bottom padding-xs flex align-center'>
+    <view class='padding'>60</view>
+    <view class='flex-sub text-center'>
+      <view class='solid-bottom text-xsl padding'>
+        <icon class=' icon-roundcheckfill text-green'/>
+      </view>
+      <view class='padding'>用于图标、数字等特大显示</view>
+    </view>
+  </view>
+  <view class='solids-bottom padding-xs flex align-center'>
+    <view class='padding'>40</view>
+    <view class='flex-sub text-center'>
+      <view class='solid-bottom text-sl padding'>
+        <icon class=' icon-roundcheckfill text-green'/>
+      </view>
+      <view class='padding'>用于图标、数字等较大显示</view>
+    </view>
+  </view>
+  <view class='solids-bottom padding-xs flex align-center'>
+    <view class='padding'>22</view>
+    <view class='flex-sub text-center'>
+      <view class='solid-bottom text-xxl padding'>
+        <text class='text-price text-red'>80.00</text>
+      </view>
+      <view class='padding'>用于金额数字等信息</view>
+    </view>
+  </view>
+  <view class='solids-bottom padding-xs flex align-center'>
+    <view class='padding'>18</view>
+    <view class='flex-sub text-center'>
+      <view class='solid-bottom text-xl padding'>
+        <text class='text-black text-bold'>您的订单已提交成功!</text>
+      </view>
+      <view class='padding'>页面大标题,用于结果页等单一信息页</view>
+    </view>
+  </view>
+  <view class='solids-bottom padding-xs flex align-center'>
+    <view class='padding'>16</view>
+    <view class='flex-sub text-center'>
+      <view class='solid-bottom text-lg padding'>
+        <text class='text-black'>ColorUI组件库</text>
+      </view>
+      <view class='padding'>页面小标题,首要层级显示内容</view>
+    </view>
+  </view>
+  <view class='solids-bottom padding-xs flex align-center'>
+    <view class='padding'>14</view>
+    <view class='flex-sub text-center'>
+      <view class='solid-bottom text-df padding'>专注视觉的小程序组件库</view>
+      <view class='padding'>页面默认字号,用于摘要或阅读文本</view>
+    </view>
+  </view>
+  <view class='solids-bottom padding-xs flex align-center'>
+    <view class='padding'>12</view>
+    <view class='flex-sub text-center'>
+      <view class='solid-bottom text-sm padding'>
+        <text class='text-grey'>衬衫的价格是9磅15便士</text>
+      </view>
+      <view class='padding'>页面辅助信息,次级内容等</view>
+    </view>
+  </view>
+  <view class='padding-xs flex align-center'>
+    <view class='padding'>10</view>
+    <view class='flex-sub text-center'>
+      <view class='solid-bottom text-xs padding'>
+        <text class='text-gray'>我于杀戮之中绽放 亦如黎明中的花朵</text>
+      </view>
+      <view class='padding'>说明文本,标签文字等关注度低的文字</view>
+    </view>
+  </view>
+</view>
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue'/>文字颜色
+  </view>
+</bar>
+<view class='grid col-5 padding-sm'>
+  <view class='padding-sm' wx:for="{{list}}" wx:key>
+    <view class='text-{{item.name}} text-center'>
+      {{item.title}}
+    </view>
+  </view>
+</view>
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue'/>文字截断
+  </view>
+</bar>
+<view class='padding bg-white'>
+  <view class='text-cut padding bg-grey radius' style='width:220px'>我于杀戮之中绽放 ,亦如黎明中的花朵</view>
+</view>
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue'/>文字对齐
+  </view>
+</bar>
+<view class='padding bg-white'>
+  <view class='text-left padding'>我于杀戮之中绽放 ,亦如黎明中的花朵</view>
+  <view class='text-center padding'>我于杀戮之中绽放 ,亦如黎明中的花朵</view>
+  <view class='text-right padding'>我于杀戮之中绽放 ,亦如黎明中的花朵</view>
+</view>
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-title text-blue'/>特殊文字
+  </view>
+</bar>
+<view class='padding text-center'>
+  <view class='padding-lr bg-white'>
+    <view class='solid-bottom padding'>
+    <text class='text-price'>80.00</text>
+    </view>
+    <view class='padding'>价格文本,利用伪元素添加"¥"符号</view>
+  </view>
+  <view class='padding-lr bg-white margin-top'>
+    <view class='solid-bottom padding'>
+    <text class='text-Abc'>color Ui</text>
+    </view>
+    <view class='padding'>英文单词首字母大写</view>
+  </view>
+  <view class='padding-lr bg-white margin-top'>
+    <view class='solid-bottom padding'>
+    <text class='text-ABC'>color Ui</text>
+    </view>
+    <view class='padding'>全部字母大写</view>
+  </view>
+  <view class='padding-lr bg-white margin-top'>
+    <view class='solid-bottom padding'>
+    <text class='text-abc'>color Ui</text>
+    </view>
+    <view class='padding'>全部字母小写</view>
+  </view>
+</view>

+ 1 - 0
demo/pages/basics/text/text.wxss

@@ -0,0 +1 @@
+/* pages/basics/text/text.wxss */

+ 8 - 0
demo/pages/component/bar/bar.js

@@ -0,0 +1,8 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+  },
+
+})

+ 1 - 0
demo/pages/component/bar/bar.json

@@ -0,0 +1 @@
+{}

+ 245 - 0
demo/pages/component/bar/bar.wxml

@@ -0,0 +1,245 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-pink" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' />
+      <text>操作条</text>
+    </navigator>
+  </bar>
+</custom>
+
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-back text-gray' />
+    <text>返回</text>
+  </view>
+</bar>
+
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-title text-green ' />
+    <text>案例</text>
+  </view>
+  <view class='action'>
+    <button class='bg-green shadow-blur sm'>添加
+      <icon class='icon-add' /> </button>
+  </view>
+</bar>
+
+<bar class="margin-top justify-end">
+  <view class='action'>
+    <icon class='icon-close text-red'></icon>
+  </view>
+</bar>
+
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-back text-gray' /> 返回
+  </view>
+  <view class='content'>
+    操作条
+  </view>
+</bar>
+
+<bar class="margin-top">
+  <view class='action'>
+    <icon class='icon-homefill text-gray' /> 首页
+  </view>
+  <view class='content'>
+    鲜亮的高饱和色彩,专注视觉的小程序组件库
+  </view>
+  <view class='action'>
+    <icon class='icon-cardboardfill text-grey' />
+    <icon class='icon-recordfill text-red' />
+  </view>
+</bar>
+
+<bar class="margin-top bg-blue">
+  <view class='action'>
+    <icon class='icon-close' /> 关闭
+  </view>
+  <view class='content'>
+    海蓝
+  </view>
+</bar>
+<bar class="margin-top bg-orange">
+  <view class='action'>
+    <icon class='icon-back' /> 返回
+  </view>
+  <view class='content'>
+    操作条
+  </view>
+</bar>
+
+<bar class="margin-top bg-black search">
+  <avatar class="round" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+  <view class='content'>
+    ColorUI
+  </view>
+  <view class='action'>
+    <icon class="icon-more" />
+  </view>
+</bar>
+
+<bar class="margin-top bg-red search">
+  <avatar class="round" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);"></avatar>
+  <view class='serach-form radius'>
+    <icon class="icon-search" />
+    <input type="text" placeholder="搜索图片、文章、视频" confirm-type="search" />
+  </view>
+  <view class='action'>
+    <text>广州</text>
+    <icon class="icon-triangledownfill" />
+  </view>
+</bar>
+
+<bar class="margin-top search">
+  <avatar class="round" style="background-image:url(https://image.weilanwl.com/img/square-2.jpg);"></avatar>
+  <view class='serach-form round'>
+    <icon class="icon-search" />
+    <input type="text" placeholder="搜索图片、文章、视频" confirm-type="search" />
+  </view>
+  <view class='action'>
+    <text>广州</text>
+    <icon class="icon-triangledownfill" />
+  </view>
+</bar>
+
+<bar class="margin-top bg-cyan search">
+  <view class='serach-form radius'>
+    <icon class="icon-search" />
+    <input type="text" placeholder="搜索图片、文章、视频" confirm-type="search" />
+  </view>
+  <view class='action'>
+    <icon class='icon-close' />
+    <text>取消</text>
+  </view>
+</bar>
+
+<bar class="margin-top search">
+  <view class='serach-form round'>
+    <icon class="icon-search" />
+    <input type="text" placeholder="搜索图片、文章、视频" confirm-type="search" />
+  </view>
+  <view class='action'>
+    <button class='bg-green shadow-blur round'>搜索</button>
+  </view>
+</bar>
+
+<bar class="margin-top btn-group">
+  <button class='bg-green shadow-blur round'>保存</button>
+</bar>
+
+<bar class="margin-top btn-group">
+  <button class='bg-green shadow-blur round lg'>保存</button>
+</bar>
+
+<bar class="margin-top btn-group">
+  <button class='bg-green shadow-blur'>保存</button>
+  <button class='text-green line-green shadow'>上传</button>
+</bar>
+
+<bar class="margin-top btn-group">
+  <button class='bg-green shadow-blur round'>保存</button>
+  <button class='bg-blue shadow-blur round'>提交</button>
+</bar>
+
+<bar class="margin-top shop">
+  <view class="action">
+    <icon class='icon-service text-green'>
+      <tag class='badge'></tag>
+    </icon>
+    客服
+  </view>
+  <view class="action text-orange">
+    <icon class='icon-favorfill' /> 已收藏
+  </view>
+  <view class="action">
+    <icon class='icon-cart'>
+      <tag class='badge'>99</tag>
+    </icon>
+    购物车
+  </view>
+  <view class='bg-red submit'>立即订购</view>
+</bar>
+
+<bar class="margin-top shop">
+  <view class="action">
+    <icon class='icon-service text-green'>
+      <tag class='badge'></tag>
+    </icon>
+    客服
+  </view>
+  <view class="action">
+    <icon class='icon-cart'>
+      <tag class='badge'>99</tag>
+    </icon>
+    购物车
+  </view>
+  <view class='bg-orange submit'>加入购物车</view>
+  <view class='bg-red submit'>立即订购</view>
+</bar>
+
+<bar class="margin-top shop">
+  <view class="action">
+    <icon class='icon-service text-green'>
+      <tag class='badge'></tag>
+    </icon>
+    客服
+  </view>
+  <view class="action">
+    <icon class=' icon-shop' /> 店铺
+  </view>
+  <view class="action">
+    <icon class='icon-cart'>
+      <tag class='badge'>99</tag>
+    </icon>
+    购物车
+  </view>
+  <view class='submit'>
+    <button class='bg-red round shadow-blur'>立即订购</button>
+  </view>
+</bar>
+
+<bar class="margin-top shop">
+  <view class="action">
+    <icon class='icon-service text-green'>
+      <tag class='badge'></tag>
+    </icon>
+    客服
+  </view>
+  <view class="action">
+    <icon class='icon-cart'>
+      <tag class='badge'>99</tag>
+    </icon>
+    购物车
+  </view>
+  <view class='submit'>
+    <button class='bg-orange round shadow-blur'>加入购物车</button>
+  </view>
+  <view class='submit'>
+    <button class='bg-red round shadow-blur'>立即订购</button>
+  </view>
+</bar>
+
+<bar class="margin-top input">
+  <view class='action'>
+    <icon class='icon-sound text-grey' />
+  </view>
+  <input class='solid-bottom' focus="{{false}}" maxlength="300" cursor-spacing="10"></input>
+  <view class='action'>
+    <icon class='icon-emojifill text-grey' />
+  </view>
+  <button class='bg-green shadow-blur'>发送</button>
+</bar>
+
+<bar class="margin-top input">
+  <avatar class="round" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+  <view class='action'>
+    <icon class='icon-roundaddfill text-grey' />
+  </view>
+  <input class='solid-bottom' maxlength="300" cursor-spacing="10"></input>
+  <view class='action'>
+    <icon class='icon-emojifill text-grey' />
+  </view>
+  <button class='bg-green shadow-blur'>发送</button>
+</bar>

+ 0 - 0
demo/pages/component/bar/bar.wxss


+ 12 - 0
demo/pages/component/card/card.js

@@ -0,0 +1,12 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar
+  },
+  isCard(e) {
+    this.setData({
+      isCard: e.detail.value
+    })
+  },
+});

+ 1 - 0
demo/pages/component/card/card.json

@@ -0,0 +1 @@
+{}

+ 123 - 0
demo/pages/component/card/card.wxml

@@ -0,0 +1,123 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-pink" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 卡片
+    </navigator>
+  </bar>
+</custom>
+<bar class="solid-bottom">
+  <view class='action'>
+    <icon class='icon-titles text-orange ' /> 案例类卡片
+  </view>
+  <view class='action'>
+    <switch class='sm' checked='{{isCard}}' bindchange='isCard'></switch>
+  </view>
+</bar>
+<card class="case {{isCard?'no-card':''}}">
+  <item wx:for="{{1}}" wx:key class="shadow">
+    <view class='image'>
+      <image src="https://image.weilanwl.com/img/4x3-1.jpg" mode="widthFix"></image>
+      <tag class="bg-blue">福利</tag>
+      <bar class='bg-shadeBottom'>我和制服不得不说的那些事!</bar>
+    </view>
+    <list class="menu menu-avatar">
+      <item>
+        <avatar class="round lg" style="background-image:url(https://image.weilanwl.com/img/square-4.jpg);"></avatar>
+        <view class='content flex-sub'>
+          <view class='text-grey'>猪皮蛋</view>
+          <view class='text-gray text-sm flex justify-between'>
+            十天前
+            <view class="text-gray text-sm">
+              <icon class="icon-attentionfill" /> 10
+              <icon class="icon-appreciatefill" /> 20
+              <icon class="icon-messagefill" /> 30
+            </view>
+          </view>
+        </view>
+      </item>
+    </list>
+  </item>
+</card>
+<bar class="solid-bottom {{isCard?'margin-top':''}}">
+  <view class='action'>
+    <icon class='icon-titles text-orange ' /> 动态类卡片
+  </view>
+  <view class='action'>
+    <switch class='sm' checked='{{isCard}}' bindchange='isCard'></switch>
+  </view>
+</bar>
+<card class="dynamic {{isCard?'no-card':''}}">
+  <item wx:for="1" wx:key class="shadow">
+    <list class="menu menu-avatar">
+      <item>
+        <avatar class="round lg" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);"></avatar>
+        <view class='content flex-sub'>
+          <view>晓晓萌</view>
+          <view class='text-gray text-sm flex justify-between'>
+            2018年12月3日
+          </view>
+        </view>
+      </item>
+    </list>
+    <view class='text-content'>
+      你们的铲屎官是不是经常突然对手机傻笑?我家铲屎官常常坐沙发上笑的发抖!(暗中观察.jpg)
+    </view>
+    <view class="grid {{isCard?'col-3 grid-square':'col-1'}} flex-sub padding-lr">
+      <view class="bg-img {{isCard?'':'only-img'}}" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);" wx:for="{{isCard?9:1}}" wx:key>
+      </view>
+    </view>
+    <view class='text-gray text-sm text-right padding'>
+      <icon class="icon-attentionfill" /> 10
+      <icon class="icon-appreciatefill" /> 20
+      <icon class="icon-messagefill" /> 30
+    </view>
+    <list class="menu menu-avatar comment solids-top">
+      <item wx:for="{{2}}" wx:key>
+        <avatar class="round" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);"></avatar>
+        <view class='content'>
+          <view class='text-grey'>猪皮蛋</view>
+          <view class='text-gray text-content text-df'>
+            我家铲屎官不舔毛,还抠脚!
+          </view>
+          <view class='bg-grey padding-sm radius margin-top-sm  text-sm' wx:if="{{index==1}}">
+            <view class="flex {{index!=0?'margin-top-sm':'' }}" wx:for="{{2}}" wx:key>
+              <view>我:</view>
+              <view class='flex-sub'>我家的铲屎官也不舔毛!</view>
+            </view>
+          </view>
+          <view class='margin-top-sm flex justify-between'>
+            <view class='text-gray text-df'>2018年12月4日</view>
+            <view>
+              <icon class="icon-appreciate{{!isZan?'fill':''}} text-{{!isZan?'red':'gray'}}" />
+              <icon class="icon-messagefill text-gray margin-left-sm" />
+            </view>
+          </view>
+        </view>
+      </item>
+    </list>
+  </item>
+</card>
+
+<bar class="solid-bottom margin-top">
+  <view class='action'>
+    <icon class='icon-titles text-orange ' /> 文章类卡片
+  </view>
+  <view class='action'>
+    <switch class='sm' checked='{{isCard}}' bindchange='isCard'></switch>
+  </view>
+</bar>
+<card class="article {{isCard?'no-card':''}}">
+  <item wx:for="1" wx:key class="shadow">
+    <view class="title">这里有个戏精铲屎官,主子了解一下?</view>
+    <view class="content">
+      <image src="https://image.weilanwl.com/img/4x3-3.jpg" mode="aspectFill"></image>
+      <view class="desc">
+        <view class='text-content'> 这是一个伪铲屎官为了给自己的程序凑字数瞎几把乱写的一堆文字,了解一下就OK!ヾ(=・ω・=)o</view>
+        <view>
+          <tag class='bg-red light sm round'>假装有猫系列</tag>
+          <tag class='bg-green light sm round'>戏精系列</tag>
+        </view>
+      </view>
+    </view>
+  </item>
+</card>

+ 0 - 0
demo/pages/component/card/card.wxss


+ 9 - 0
demo/pages/component/chat/chat.js

@@ -0,0 +1,9 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar
+  },
+  onLoad: function () { },
+
+});

+ 1 - 0
demo/pages/component/chat/chat.json

@@ -0,0 +1 @@
+{}

+ 91 - 0
demo/pages/component/chat/chat.wxml

@@ -0,0 +1,91 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-pink" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back'/>
+      聊天
+    </navigator>
+  </bar>
+</custom>
+
+<chat>
+  <item class="self">
+    <view class="main">
+      <view class='content bg-green shadow-blur'>
+        <text>喵喵喵!喵喵喵!喵喵喵!喵喵!喵喵!!喵!喵喵喵!</text>
+      </view>
+    </view>
+    <avatar class="radius" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+    <view class='date'>2018年3月23日 13:23</view>
+  </item>
+  <info class='round'>对方撤回一条消息!</info>
+  <item>
+    <avatar class="radius" style="background-image:url(https://image.weilanwl.com/img/square-2.jpg);"></avatar>
+    <view class="main">
+      <view class='content shadow'>
+        <text>喵喵喵!喵喵喵!</text>
+      </view>
+    </view>
+    <view class='date '> 13:23</view>
+  </item>
+  <info>
+    <icon class='icon-roundclosefill text-red '/> 对方拒绝了你的消息
+  </info>
+  <info>
+    对方开启了好友验证,你还不是他(她)的好友。请先发送好友验证请求,对方验证通过后,才能聊天。
+    <text class='text-blue'>发送好友验证</text>
+  </info>
+  <item class="self">
+    <view class="main">
+      <image src="https://image.weilanwl.com/img/3x4-1.jpg" class='radius' mode="widthFix"></image>
+    </view>
+    <avatar class="radius" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+    <view class='date'> 13:23</view>
+  </item>
+  <item class="self">
+    <view class="main">
+      <view class='action text-bold text-grey'>
+        3"
+      </view>
+      <view class='content shadow'>
+        <icon class='icon-sound text-xxl padding-right-xl'> </icon>
+      </view>
+    </view>
+    <avatar class="radius" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+    <view class='date'>13:23</view>
+  </item>
+  <item class="self">
+    <view class="main">
+      <view class='action'>
+        <icon class='icon-locationfill text-orange text-xxl'/>
+      </view>
+      <view class='content shadow'>
+        喵星球,喵喵市
+      </view>
+    </view>
+    <avatar class="radius" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+    <view class='date'>13:23</view>
+  </item>
+  <item>
+    <avatar class="radius" style="background-image:url(https://image.weilanwl.com/img/square-2.jpg);"></avatar>
+    <view class="main">
+      <view class='content shadow'>
+       @#$^&**
+      </view>      
+      <view class='action text-grey'>
+        <icon class='icon-warnfill text-red text-xxl'/> <text class='text-sm margin-left-sm'>翻译错误</text> 
+      </view>
+    </view>
+    <view class='date'>13:23</view>
+  </item>
+</chat>
+
+<bar class="foot input">
+  <view class='action'>
+    <icon class='icon-sound text-grey'/>
+  </view>
+  <input class='solid-bottom' focus="{{false}}" maxlength="300" cursor-spacing="10"></input>
+  <view class='action'>
+    <icon class='icon-emojifill text-grey'/>
+  </view>
+  <button class='bg-green shadow-blur'>发送</button>
+</bar>

+ 3 - 0
demo/pages/component/chat/chat.wxss

@@ -0,0 +1,3 @@
+page{
+  padding-bottom: 60px;
+}

+ 147 - 0
demo/pages/component/form/form.js

@@ -0,0 +1,147 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    index: null,
+    picker: ['喵喵喵', '汪汪汪', '哼唧哼唧'],
+    multiArray: [
+      ['无脊柱动物', '脊柱动物'],
+      ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'],
+      ['猪肉绦虫', '吸血虫']
+    ],
+    objectMultiArray: [
+      [
+        {
+          id: 0,
+          name: '无脊柱动物'
+        },
+        {
+          id: 1,
+          name: '脊柱动物'
+        }
+      ], [
+        {
+          id: 0,
+          name: '扁性动物'
+        },
+        {
+          id: 1,
+          name: '线形动物'
+        },
+        {
+          id: 2,
+          name: '环节动物'
+        },
+        {
+          id: 3,
+          name: '软体动物'
+        },
+        {
+          id: 3,
+          name: '节肢动物'
+        }
+      ], [
+        {
+          id: 0,
+          name: '猪肉绦虫'
+        },
+        {
+          id: 1,
+          name: '吸血虫'
+        }
+      ]
+    ],
+    multiIndex: [0, 0, 0],
+    time: '12:01',
+    date: '2018-12-25',
+    region: ['广东省', '广州市', '海珠区'],
+  },
+  PickerChange(e) {
+    console.log(e);
+    this.setData({
+      index: e.detail.value
+    })
+  },
+  MultiChange (e) {
+    this.setData({
+      multiIndex: e.detail.value
+    })
+  },
+  MultiColumnChange(e) {
+    let data = {
+      multiArray: this.data.multiArray,
+      multiIndex: this.data.multiIndex
+    };
+    data.multiIndex[e.detail.column] = e.detail.value;
+    switch (e.detail.column) {
+      case 0:
+        switch (data.multiIndex[0]) {
+          case 0:
+            data.multiArray[1] = ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'];
+            data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
+            break;
+          case 1:
+            data.multiArray[1] = ['鱼', '两栖动物', '爬行动物'];
+            data.multiArray[2] = ['鲫鱼', '带鱼'];
+            break;
+        }
+        data.multiIndex[1] = 0;
+        data.multiIndex[2] = 0;
+        break;
+      case 1:
+        switch (data.multiIndex[0]) {
+          case 0:
+            switch (data.multiIndex[1]) {
+              case 0:
+                data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
+                break;
+              case 1:
+                data.multiArray[2] = ['蛔虫'];
+                break;
+              case 2:
+                data.multiArray[2] = ['蚂蚁', '蚂蟥'];
+                break;
+              case 3:
+                data.multiArray[2] = ['河蚌', '蜗牛', '蛞蝓'];
+                break;
+              case 4:
+                data.multiArray[2] = ['昆虫', '甲壳动物', '蛛形动物', '多足动物'];
+                break;
+            }
+            break;
+          case 1:
+            switch (data.multiIndex[1]) {
+              case 0:
+                data.multiArray[2] = ['鲫鱼', '带鱼'];
+                break;
+              case 1:
+                data.multiArray[2] = ['青蛙', '娃娃鱼'];
+                break;
+              case 2:
+                data.multiArray[2] = ['蜥蜴', '龟', '壁虎'];
+                break;
+            }
+            break;
+        }
+        data.multiIndex[2] = 0;
+        break;
+    }
+    this.setData(data);
+  },
+  TimeChange(e) {
+    this.setData({
+      time: e.detail.value
+    })
+  },
+  DateChange (e) {
+    this.setData({
+      date: e.detail.value
+    })
+  },
+  RegionChange: function (e) {
+    this.setData({
+      region: e.detail.value
+    })
+  },
+})

+ 1 - 0
demo/pages/component/form/form.json

@@ -0,0 +1 @@
+{}

+ 175 - 0
demo/pages/component/form/form.wxml

@@ -0,0 +1,175 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-pink" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back' /> 表单
+    </navigator>
+  </bar>
+</custom>
+<form>
+
+  <form-group class="margin-top">
+    <view class='title'>邮件</view>
+    <input placeholder="两字短标题" class='radius' name='input'></input>
+  </form-group>
+  <form-group>
+    <view class='title'>输入框</view>
+    <input placeholder="三字标题" class='radius' name='input'></input>
+  </form-group>
+  <form-group>
+    <view class='title'>收货地址</view>
+    <input placeholder="统一标题的宽度" class='radius' name='input'></input>
+  </form-group>
+  <form-group>
+    <view class='title'>收货地址</view>
+    <input placeholder="输入框带个图标" class='radius' name='input'></input>
+    <icon class='icon-locationfill text-orange' />
+  </form-group>
+  <form-group>
+    <view class='title'>验证码</view>
+    <input placeholder="输入框带个按钮" class='radius' name='input'></input>
+    <button class='bg-green shadow'>验证码</button>
+  </form-group>
+  <form-group>
+    <view class='title'>手机号码</view>
+    <input placeholder="输入框带标签" class='radius' name='input'></input>
+    <capsule class="radius">
+      <tag class='bg-blue '>
+        +86
+      </tag>
+      <tag class="line-blue">
+        中国大陆
+      </tag>
+    </capsule>
+  </form-group>
+
+
+  <form-group class="margin-top">
+    <view class='title'>普通选择</view>
+    <picker bindchange="PickerChange" value="{{index}}" range="{{picker}}">
+      <view class="picker">
+        {{index?picker[index]:'禁止换行,超出容器部分会以 ... 方式截断'}}
+      </view>
+    </picker>
+  </form-group>
+  <form-group>
+    <view class='title'>多列选择</view>
+    <picker mode="multiSelector" bindchange="MultiChange" bindcolumnchange="MultiColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
+      <view class="picker">
+        {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
+      </view>
+    </picker>
+  </form-group>
+  <form-group>
+    <view class='title'>时间选择</view>
+    <picker mode="time" value="{{time}}" start="09:01" end="21:01" bindchange="TimeChange">
+      <view class="picker">
+        {{time}}
+      </view>
+    </picker>
+  </form-group>
+  <form-group>
+    <view class='title'>日期选择</view>
+    <picker mode="date" value="{{date}}" start="2015-09-01" end="2020-09-01" bindchange="DateChange">
+      <view class="picker">
+        {{date}}
+      </view>
+    </picker>
+  </form-group>
+  <form-group>
+    <view class='title'>地址选择</view>
+    <picker mode="region" bindchange="RegionChange" value="{{region}}" custom-item="{{customItem}}">
+      <view class="picker">
+        {{region[0]}},{{region[1]}},{{region[2]}}
+      </view>
+    </picker>
+  </form-group>
+
+  <form-group class="margin-top">
+    <view class='title'>开关选择</view>
+    <switch class='sm'></switch>
+  </form-group>
+  <form-group>
+    <view class='title'>大号开关</view>
+    <switch class=''></switch>
+  </form-group>
+  <form-group>
+    <view class='title'>定义颜色</view>
+    <switch class='red sm' checked/>
+  </form-group>
+  <form-group>
+    <view class='title'>定义图标</view>
+    <switch class='switch-sex sm' checked/>
+  </form-group>
+  <form-group>
+    <view class='title'>方形开关</view>
+    <switch class='orange radius sm' checked/>
+  </form-group>
+  <radio-group class="block">
+    <form-group class="margin-top">
+      <view class='title'>单选操作(radio)</view>
+      <radio checked />
+    </form-group>
+    <form-group>
+      <view class='title'>定义尺寸</view>
+      <radio class='sm' />
+    </form-group>
+    <form-group>
+      <view class='title'>定义样式</view>
+      <radio class='radio' />
+    </form-group>
+    <form-group>
+      <view class='title'>定义颜色</view>
+      <view>
+        <radio class='blue radio' />
+        <radio class='red margin-left-sm' />
+      </view>
+    </form-group>
+  </radio-group>
+
+  <form-group class="margin-top">
+    <view class='title'>复选选操作(checkbox)</view>
+    <checkbox></checkbox>
+  </form-group>
+  <form-group>
+    <view class='title'>定义尺寸</view>
+    <checkbox class='sm' checked></checkbox>
+  </form-group>
+  <form-group>
+    <view class='title'>定义形状</view>
+    <checkbox class='round' checked></checkbox>
+  </form-group>
+  <form-group>
+    <view class='title'>定义颜色</view>
+    <checkbox class='round blue' checked></checkbox>
+  </form-group>
+  <form-group class="margin-top">
+    <view class="grid col-3 grid-square flex-sub">
+      <view class="padding-xs bg-img" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);">
+      </view>
+      <view class="padding-xs bg-img" style="background-image:url(https://image.weilanwl.com/img/square-2.jpg);">
+        <tag class="bg-red">
+          <icon class='icon-close'></icon>
+        </tag>
+      </view>
+      <view class="padding-xs solids">
+        <icon class='icon-cameraadd'></icon>
+      </view>
+    </view>
+  </form-group>
+  <form-group class="margin-top" wx:hide="{{modalName==null}}">
+    <textarea placeholder="多行文本输入框" maxlength="-1" disabled="{{modalName!=null}}" placeholder-class='placeholder'></textarea>
+  </form-group>
+  <form-group class="top" wx:hide="{{modalName==null}}">
+    <view class='title'>点文本框</view>
+    <textarea placeholder="多行文本输入框" maxlength="-1" disabled="{{modalName!=null}}" placeholder-class='placeholder'></textarea>
+  </form-group>
+<!-- 
+  <form-group class="margin-top">
+    <view class='title'>多级联动</view>
+    <picker mode="region" bindchange="RegionChange" value="{{region}}" custom-item="{{customItem}}">
+      <view class="picker">
+        {{region[0]}},{{region[1]}},{{region[2]}}
+      </view>
+    </picker>
+  </form-group> -->
+</form>

+ 3 - 0
demo/pages/component/form/form.wxss

@@ -0,0 +1,3 @@
+form-group .title {
+  min-width: calc(4em + 15px);
+}

+ 17 - 0
demo/pages/component/home/home.js

@@ -0,0 +1,17 @@
+Page({
+  data: {
+    elements: [
+      { title: '操作条', name: 'bar', color: 'purple', icon: 'vipcard' },
+      { title: '导航栏 ', name: 'nav', color: 'mauve', icon: 'formfill' },
+      { title: '列表', name: 'list', color: 'pink', icon: 'list' },
+      { title: '卡片', name: 'card', color: 'brown', icon: 'newsfill' },
+      { title: '表单', name: 'form', color: 'red', icon: 'formfill' },
+      { title: '时间轴', name: 'timeline', color: 'orange', icon: 'timefill' },
+      { title: '聊天', name: 'chat', color: 'green', icon: 'messagefill' },
+      { title: '轮播', name: 'swiper', color: 'olive', icon: 'album'},
+      { title: '模态框', name: 'modal', color: 'grey', icon: 'squarecheckfill' },
+    ],
+  },
+  onLoad: function () {
+  },
+})

+ 1 - 0
demo/pages/component/home/home.json

@@ -0,0 +1 @@
+{}

+ 8 - 0
demo/pages/component/home/home.wxml

@@ -0,0 +1,8 @@
+<image src='/images/componentBg.png' mode='widthFix' class='response'></image>
+<view class='nav-list'>
+  <navigator hover-class='none' url="../{{item.name}}/{{item.name}}" class="nav-li bg-{{item.color}}" style='animation: show {{(index+1)*0.2+1}}s 1;-webkit-animation: show {{(index+1)*0.2+1}}s 1;' wx:for="{{elements}}" wx:key>
+    <view class="nav-title">{{item.title}}</view>
+    <view class="nav-name">{{item.name}}</view>
+    <icon class='icon-{{item.icon}}'/>
+  </navigator>
+</view>

+ 0 - 0
demo/pages/component/home/home.wxss


+ 13 - 0
demo/pages/component/list/list.js

@@ -0,0 +1,13 @@
+const app = getApp();
+Page({
+  data: {
+    StatusBar: app.globalData.StatusBar,
+    CustomBar: app.globalData.CustomBar,
+    skin: false
+  },
+  switchSex: function(e) {
+    this.setData({
+      skin: e.detail.value
+    });    
+  },
+})

+ 1 - 0
demo/pages/component/list/list.json

@@ -0,0 +1 @@
+{}

+ 432 - 0
demo/pages/component/list/list.wxml

@@ -0,0 +1,432 @@
+<custom style="height:{{CustomBar}}px;">
+  <bar class="fixed gradual-pink" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;">
+    <navigator class='action' open-type="navigateBack" delta="1" hover-class="none">
+      <icon class='icon-back'/> 列表
+    </navigator>
+  </bar>
+</custom>
+<view class="page {{skin?' invert ':' '}}">
+  <list class="grid col-3">
+    <item>
+      <icon class='icon-cardboardfill text-red'/>
+      <text>VR</text>
+    </item>
+    <item>
+      <icon class='icon-recordfill text-orange'/>
+      <text>录像</text>
+    </item>
+    <item>
+      <icon class='icon-picfill text-yellow'/>
+      <text>图像</text>
+    </item>
+    <item>
+      <icon class='icon-noticefill text-olive'>
+        <tag class="badge">99+</tag>
+      </icon>
+      <text>通知</text>
+    </item>
+    <item>
+      <icon class='icon-upstagefill text-cyan'/>
+      <text>排行榜</text>
+    </item>
+    <item>
+      <icon class='icon-clothesfill text-blue'>
+        <tag class="badge"></tag>
+      </icon>
+      <text>皮肤</text>
+    </item>
+    <item>
+      <icon class='icon-discoverfill text-purple'/>
+      <text>发现</text>
+    </item>
+    <item>
+      <icon class='icon-questionfill text-mauve'/>
+      <text>帮助</text>
+    </item>
+    <item>
+      <icon class='icon-servicefill text-pink'/>
+      <text>反馈</text>
+    </item>
+  </list>
+  <list class="grid col-4">
+    <item>
+      <icon class='icon-cardboardfill text-red'/>
+      <text>VR</text>
+    </item>
+    <item>
+      <icon class='icon-recordfill text-orange'/>
+      <text>录像</text>
+    </item>
+    <item>
+      <icon class='icon-picfill text-yellow'/>
+      <text>图像</text>
+    </item>
+    <item>
+      <icon class='icon-noticefill text-olive'>
+        <tag class="badge">99+</tag>
+      </icon>
+      <text>通知</text>
+    </item>
+    <item>
+      <icon class='icon-upstagefill text-cyan'/>
+      <text>排行榜</text>
+    </item>
+    <item>
+      <icon class='icon-clothesfill text-blue'>
+        <tag class="badge"></tag>
+      </icon>
+      <text>皮肤</text>
+    </item>
+    <item>
+      <icon class='icon-discoverfill text-purple'/>
+      <text>发现</text>
+    </item>
+    <item>
+      <icon class='icon-questionfill text-mauve'/>
+      <text>帮助</text>
+    </item>
+  </list>
+  <list class="grid no-border col-4">
+    <item>
+      <icon class='icon-cardboardfill text-red'/>
+      <text>VR</text>
+    </item>
+    <item>
+      <icon class='icon-recordfill text-orange'/>
+      <text>录像</text>
+    </item>
+    <item>
+      <icon class='icon-picfill text-yellow'/>
+      <text>图像</text>
+    </item>
+    <item>
+      <icon class='icon-noticefill text-olive'>
+        <tag class="badge">99+</tag>
+      </icon>
+      <text>通知</text>
+    </item>
+    <item>
+      <icon class='icon-upstagefill text-cyan'/>
+      <text>排行榜</text>
+    </item>
+    <item>
+      <icon class='icon-clothesfill text-blue'>
+        <tag class="badge"></tag>
+      </icon>
+      <text>皮肤</text>
+    </item>
+    <item>
+      <icon class='icon-discoverfill text-purple'/>
+      <text>发现</text>
+    </item>
+    <item>
+      <icon class='icon-questionfill text-mauve'/>
+      <text>帮助</text>
+    </item>
+  </list>
+  <list class="grid col-5 no-border">
+    <item>
+      <icon class='icon-cardboardfill text-red'>
+        <tag class="badge">99+</tag>
+      </icon>
+      <text>VR</text>
+    </item>
+    <item>
+      <icon class='icon-recordfill text-orange'/>
+      <text>录像</text>
+    </item>
+    <item>
+      <icon class='icon-picfill text-yellow'/>
+      <text>图像</text>
+    </item>
+    <item>
+      <icon class='icon-noticefill text-olive'>
+      </icon>
+      <text>通知</text>
+    </item>
+    <item>
+      <icon class='icon-upstagefill text-cyan'/>
+      <text>排行榜</text>
+    </item>
+    <item>
+      <icon class='icon-clothesfill text-blue'>
+        <tag class="badge"></tag>
+      </icon>
+      <text>皮肤</text>
+    </item>
+    <item>
+      <icon class='icon-discoverfill text-purple'/>
+      <text>发现</text>
+    </item>
+    <item>
+      <icon class='icon-questionfill text-mauve'/>
+      <text>帮助</text>
+    </item>
+    <item>
+      <icon class='icon-commandfill text-purple'/>
+      <text>问答</text>
+    </item>
+    <item>
+      <icon class='icon-brandfill text-mauve'/>
+      <text>版权</text>
+    </item>
+  </list>
+  <list class="menu no-padding">
+    <item>
+      <view class='content'>
+        <view>
+          <icon class='icon-clothesfill text-blue'/> 皮肤设置</view>
+        <view class='text-gray text-sm'>
+          <icon class='icon-infofill'/> 皮肤需要付费购买</view>
+      </view>
+      <view class='action'>
+        <switch class='switch-sex sm' bindchange="switchSex" />
+      </view>
+    </item>
+    <item>
+      <view class='content'>
+        <view>
+          <icon class='icon-musicfill text-red'/> 声音控制</view>
+        <view class='text-gray text-sm'>
+          <icon class='icon-infofill'/> 需要获得系统权限</view>
+      </view>
+      <view class='action'>
+        <switch class='switch-music' />
+      </view>
+    </item>
+  </list>
+  <list class="menu menu-avatar inverts">
+    <item>
+      <avatar class="round lg" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);"></avatar>
+      <view class='content'>
+        <view class='text-grey'>文晓港</view>
+        <view class='text-gray text-sm'>
+          <icon class='icon-infofill text-red'/> 消息未送达</view>
+      </view>
+      <view class='action'>
+        <view class='text-grey text-xs'>22:20</view>
+        <tag class="round bg-grey sm">5</tag>
+      </view>
+    </item>
+    <item>
+      <avatar class="round lg" style="background-image:url(https://image.weilanwl.com/img/square-2.jpg);">
+        <tag class="badge">99+</tag>
+      </avatar>
+      <view class='content'>
+        <view class='text-grey'>文晓港
+          <tag class="round bg-orange sm">SVIP</tag>
+        </view>
+        <view class='text-gray text-sm'>
+          <icon class='icon-redpacket_fill text-red'/> 收到红包</view>
+      </view>
+      <view class='action'>
+        <view class='text-grey text-xs'>22:20</view>
+        <icon class='icon-notice_forbid_fill text-gray'/>
+      </view>
+    </item>
+  </list>
+  <list class="menu menu-avatar no-padding">
+    <item class="">
+      <avatar class="radius lg" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+      <view class='content'>
+        <view>喵星人互动群</view>
+        <view class='text-gray text-sm'>
+          喵星酱:喵喵喵!</view>
+      </view>
+      <view class='action'>
+        <view class='text-grey text-xs'>22:20</view>
+        <tag class="round bg-red sm">5</tag>
+      </view>
+    </item>
+    <item class="grayscale">
+      <avatar class="radius lg" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+      <view class='content'>
+        <view>喵星人互动群</view>
+        <view class='text-gray text-sm'>
+          喵星酱:喵喵喵!</view>
+      </view>
+      <view class='action'>
+        <view class='text-grey text-xs'>22:20</view>
+        <tag class="round bg-red sm">5</tag>
+      </view>
+    </item>
+    <item class="cur">
+      <avatar class="radius lg" style="background-image:url(https://image.weilanwl.com/img/square-4.jpg);">
+        <tag class="badge"></tag>
+      </avatar>
+      <view class='content'>
+        <view>喵星人互动群
+          <tag class="round bg-orange sm">6人</tag>
+        </view>
+        <view class='text-gray text-sm'>
+          喵星酱:
+          <icon class='icon-picfill text-orange'/> 图片传输中...</view>
+      </view>
+      <view class='action'>
+        <view class='text-grey text-xs'>22:20</view>
+        <icon class='icon-notice_forbid_fill text-gray'/>
+      </view>
+    </item>
+  </list>
+  <list class="menu">
+    <item>
+      <view class='content'>
+        <icon class='icon-circlefill text-grey'/>
+        <text class='text-grey'>默认</text>
+      </view>
+    </item>
+    <item>
+      <view class='content'>
+        <icon class='icon-emojifill text-red'/>
+        <text class='text-grey'>头像</text>
+      </view>
+      <view class='action'>
+        <avatar class="sm round">
+          <icon class='icon-people'/>
+        </avatar>
+      </view>
+    </item>
+    <item>
+      <view class='content'>
+        <icon class='icon-emojiflashfill text-pink'/>
+        <text class='text-grey'>头像组</text>
+      </view>
+      <view class='action'>
+        <avatar-group>
+          <avatar class="round sm" style="background-image:url(https://image.weilanwl.com/img/square-4.jpg);"></avatar>
+          <avatar class="round sm" style="background-image:url(https://image.weilanwl.com/img/square-3.jpg);"></avatar>
+          <avatar class="round sm" style="background-image:url(https://image.weilanwl.com/img/square-2.jpg);"></avatar>
+          <avatar class="round sm" style="background-image:url(https://image.weilanwl.com/img/square-1.jpg);"></avatar>
+        </avatar-group>
+        <text class='text-grey text-sm'>4 人</text>
+      </view>
+    </item>
+    <item>
+      <view class='content'>
+        <icon class='icon-crown text-green'/>
+        <text class='text-grey'>按钮</text>
+      </view>
+      <view class='action'>
+        <button class='round bg-green sm'>
+          <icon class='icon-upload'/> 上传</button>
+      </view>
+    </item>
+    <item>
+      <view class='content'>
+        <icon class='icon-crownfill text-green'/>
+        <text class='text-grey'>按钮</text>
+      </view>
+      <view class='action'>
+        <button class='round bg-blue'>
+          <icon class='icon-down'/> 下载</button>
+      </view>
+    </item>
+  </list>
+  <list class="menu">
+    <item class="arrow">
+      <view class='content'>
+        <icon class='icon-roundrightfill text-grey'/>
+        <text class='text-grey'>箭头</text>
+      </view>
+    </item>
+    <item class="arrow">
+      <view class='content'>
+        <icon class='icon-tagfill text-red'/>
+        <text class='text-grey'>标签</text>
+      </view>
+      <view class='action'>
+        <tag class="round bg-orange light">音乐</tag>
+        <tag class="round bg-olive light">电影</tag>
+        <tag class="round bg-blue light">旅行</tag>
+      </view>
+    </item>
+    <item class="arrow">
+      <view class='content'>
+        <icon class='icon-warn text-green'/>
+        <text class='text-grey'>文本</text>
+      </view>
+      <view class='action'>
+        <text class='text-grey text-sm'>小目标还没有实现!</text>
+      </view>
+    </item>
+    <item class="arrow">
+      <view class='content'>
+        <icon class='icon-warnfill text-green'/>
+        <text class='text-grey'>文本</text>
+        <text class='text-grey text-sm margin-left-sm'>小目标还没有实现!</text>
+      </view>
+    </item>
+  </list>
+  <list class="menu no-padding">
+    <item>
+      <view class='content'>
+        <icon class='icon-radiobox text-orange'/>
+        <text class='text-grey'>徽章</text>
+      </view>
+      <view class='action'>
+        <tag class='bg-red round'></tag>
+      </view>
+    </item>
+    <item>
+      <view class='content'>
+        <icon class='icon-tagfill text-olive'/>
+        <text class='text-grey'>标签</text>
+      </view>
+      <view class='action'>
+        <tag class='bg-olive round'>9</tag>
+      </view>
+    </item>
+    <item class="arrow">
+      <view class='content'>
+        <icon class='icon-radioboxfill text-blue'/>
+        <text class='text-grey'>胶囊</text>
+      </view>
+      <view class='action'>
+        <capsule class="round">
+          <tag class='bg-blue'>
+            <icon class='icon-locationfill'/>
+          </tag>
+          <tag class="line-blue">
+            广州
+          </tag>
+        </capsule>
+      </view>
+    </item>
+  </list>
+  <list class="menu no-padding card-menu margin-bottom-xl">
+    <item>
+      <view class='content'>
+        <icon class='icon-radiobox text-orange'/>
+        <text class='text-grey'>徽章</text>
+      </view>
+      <view class='action'>
+        <tag class='bg-red round'></tag>
+      </view>
+    </item>
+    <item>
+      <view class='content'>
+        <icon class='icon-tagfill text-olive'/>
+        <text class='text-grey'>标签</text>
+      </view>
+      <view class='action'>
+        <tag class='bg-olive round'>9</tag>
+      </view>
+    </item>
+    <item class="arrow">
+      <view class='content'>
+        <icon class='icon-radioboxfill text-blue'/>
+        <text class='text-grey'>胶囊</text>
+      </view>
+      <view class='action'>
+        <capsule class="round">
+          <tag class='bg-blue'>
+            <icon class='icon-locationfill'/>
+          </tag>
+          <tag class="line-blue">
+            广州
+          </tag>
+        </capsule>
+      </view>
+    </item>
+  </list>
+</view>

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません