From c0064d8a90631a7a59ae42abc1a2c94f373dd12a Mon Sep 17 00:00:00 2001
From: iwx <525029662@qq.com>
Date: Sat, 9 Jan 2016 10:50:59 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0less=E5=92=8Cgulp?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1、增加less,降低配置sass环境的复杂过程
2、增加gulp打包方式,打包更容易
---
.csscomb.json | 10 +
gulpfile.js | 167 ++++++++++++
less/badges.less | 88 ++++++
less/bars.less | 312 ++++++++++++++++++++++
less/base.less | 196 ++++++++++++++
less/buttons.less | 205 ++++++++++++++
less/cards.less | 63 +++++
less/forms.less | 456 ++++++++++++++++++++++++++++++++
less/fullscreen.less | 35 +++
less/grid.less | 85 ++++++
less/hack.less | 20 ++
less/icon.less | 174 ++++++++++++
less/iframe.less | 12 +
less/iscroll.less | 43 +++
less/loadings.less | 111 ++++++++
less/mixins.less | 184 +++++++++++++
less/modals.less | 34 +++
less/mui.less | 48 ++++
less/normalize.less | 425 +++++++++++++++++++++++++++++
less/number.less | 71 +++++
less/off-canvas.less | 119 +++++++++
less/os.less | 39 +++
less/pagination.less | 150 +++++++++++
less/popovers.less | 203 ++++++++++++++
less/popup.less | 153 +++++++++++
less/pullrefreshs.less | 98 +++++++
less/push.less | 61 +++++
less/scroll.less | 95 +++++++
less/segmented-controls.less | 167 ++++++++++++
less/slider-cell.less | 20 ++
less/sliders.less | 135 ++++++++++
less/switches.less | 115 ++++++++
less/table-views.less | 500 +++++++++++++++++++++++++++++++++++
less/toast.less | 22 ++
less/type.less | 23 ++
less/variables.less | 85 ++++++
package.json | 21 +-
37 files changed, 4742 insertions(+), 3 deletions(-)
create mode 100644 .csscomb.json
create mode 100644 gulpfile.js
create mode 100644 less/badges.less
create mode 100644 less/bars.less
create mode 100644 less/base.less
create mode 100644 less/buttons.less
create mode 100644 less/cards.less
create mode 100644 less/forms.less
create mode 100644 less/fullscreen.less
create mode 100644 less/grid.less
create mode 100644 less/hack.less
create mode 100644 less/icon.less
create mode 100644 less/iframe.less
create mode 100644 less/iscroll.less
create mode 100644 less/loadings.less
create mode 100644 less/mixins.less
create mode 100644 less/modals.less
create mode 100644 less/mui.less
create mode 100644 less/normalize.less
create mode 100644 less/number.less
create mode 100644 less/off-canvas.less
create mode 100644 less/os.less
create mode 100644 less/pagination.less
create mode 100644 less/popovers.less
create mode 100644 less/popup.less
create mode 100644 less/pullrefreshs.less
create mode 100644 less/push.less
create mode 100644 less/scroll.less
create mode 100644 less/segmented-controls.less
create mode 100644 less/slider-cell.less
create mode 100644 less/sliders.less
create mode 100644 less/switches.less
create mode 100644 less/table-views.less
create mode 100644 less/toast.less
create mode 100644 less/type.less
create mode 100644 less/variables.less
diff --git a/.csscomb.json b/.csscomb.json
new file mode 100644
index 00000000..72e23027
--- /dev/null
+++ b/.csscomb.json
@@ -0,0 +1,10 @@
+{
+ "always-semicolon": false,
+ "block-indent": 4,
+ "space-between-declarations": "\n",
+ "space-after-opening-brace": "\n",
+ "space-before-closing-brace": "\n",
+ "leading-zero": true,
+ "strip-spaces": true,
+ "vendor-prefix-align": true
+}
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 00000000..5fea8923
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,167 @@
+'use strict';
+
+var path = require('path');
+var del = require('del');
+
+var runSequence = require('run-sequence');
+
+var gulp = require('gulp');
+var $ = require('gulp-load-plugins')();
+
+var pkg = require('./package.json');
+
+// 路径配置信息
+var config = {
+ path: {
+ less: [
+ './less/mui.less',
+ ],
+ fonts: './fonts/*',
+ js: [
+ 'js/mui.js',
+ 'js/mui.detect.js',
+ 'js/mui.detect.5+.js',
+ 'js/mui.event.js',
+ 'js/mui.target.js',
+ 'js/mui.fixed.js',
+ 'js/mui.fixed.bind.js',
+ 'js/mui.fixed.classlist.js',
+ 'js/mui.fixed.animation.js',
+ 'js/mui.fixed.fastclick.js',
+ 'js/mui.fixed.keyboard.js',
+ 'js/mui.namespace.js',
+ 'js/mui.gestures.js',
+ 'js/mui.gestures.flick.js',
+ 'js/mui.gestures.swipe.js',
+ 'js/mui.gestures.drag.js',
+ 'js/mui.gestures.tap.js',
+ 'js/mui.gestures.longtap.js',
+ 'js/mui.gestures.hold.js',
+ 'js/mui.gestures.pinch.js',
+ 'js/mui.init.js',
+ 'js/mui.init.5+.js',
+ 'js/mui.back.js',
+ 'js/mui.back.5+.js',
+ 'js/mui.init.pullrefresh.js',
+ 'js/mui.ajax.js',
+ 'js/mui.ajax.5+.js',
+ 'js/mui.layout.js',
+ 'js/mui.animation.js',
+ 'js/mui.class.js',
+ 'js/mui.pullRefresh.js',
+ 'js/mui.class.scroll.js',
+ 'js/mui.class.scroll.pullrefresh.js',
+ 'js/mui.class.scroll.slider.js',
+ 'js/pullrefresh.5+.js',
+ 'js/mui.offcanvas.js',
+ 'js/actions.js',
+ 'js/modals.js',
+ 'js/popovers.js',
+ 'js/segmented-controllers.js',
+ 'js/switches.js',
+ 'js/tableviews.js',
+ 'js/mui.dialog.alert.js',
+ 'js/mui.dialog.confirm.js',
+ 'js/mui.dialog.prompt.js',
+ 'js/mui.dialog.toast.js',
+ 'js/mui.popup.js',
+ 'js/input.plugin.js',
+ 'js/mui.number.js'
+
+ ]
+ },
+ dist: {
+ js: './dist/js',
+ css: './dist/css',
+ fonts: './dist/fonts'
+ },
+ uglify: {
+ compress: {
+ warnings: false
+ },
+ output: {
+ ascii_only: true
+ }
+ }
+};
+
+var dateFormat = 'isoDateTime';
+
+var banner = [
+ '/*!',
+ ' * =====================================================',
+ ' * Mui v<%= pkg.version %> (<%= pkg.homepage %>)',
+ ' * Licensed under <%= pkg.license %> | ' + $.util.date(Date.now(), dateFormat),
+ ' * =====================================================',
+ ' */\n'
+].join('\n');
+
+// clean
+gulp.task('build:clean', function() {
+ return del([
+ config.dist.css,
+ config.dist.js
+ ]);
+});
+
+// build less
+gulp.task('build:less', function() {
+ gulp.src(config.path.less)
+ .pipe($.header(banner, {pkg: pkg, ver: ''}))
+ .pipe($.plumber({errorHandler: function(err) {
+ console.log(err);
+ this.emit('end');
+ }}))
+ .pipe($.less({
+ paths: [ path.join(__dirname, 'less') ]
+ }))
+ .pipe($.csscomb({configPath: path.join(__dirname, ".csscomb.json")}))
+ .pipe(gulp.dest(config.dist.css))
+ .pipe($.size({showFiles: true, title: 'source'}))
+ .pipe($.minifyCss({noAdvanced: true}))
+ .pipe($.rename({
+ suffix: '.min',
+ extname: '.css'
+ }))
+ .pipe(gulp.dest(config.dist.css))
+ .pipe($.size({showFiles: true, title: 'minified'}))
+ .pipe($.size({showFiles: true, gzip: true, title: 'gzipped'}));
+});
+
+// build fonts
+gulp.task('build:fonts', function() {
+ gulp.src(config.path.fonts)
+ .pipe(gulp.dest(config.dist.fonts));
+});
+
+// build js
+gulp.task('build:js', function() {
+ gulp.src(config.path.js)
+ .pipe($.concat('mui.js'))
+ .pipe($.header(banner, {pkg: pkg, ver: ''}))
+ .pipe(gulp.dest(config.dist.js))
+ .pipe($.size({showFiles: true, title: 'source'}))
+ .pipe($.uglify(config.uglify))
+ .pipe($.header(banner, {pkg: pkg, ver: ''}))
+ .pipe($.rename({suffix: '.min'}))
+ .pipe(gulp.dest(config.dist.js))
+ .pipe($.size({showFiles: true, title: 'minified'}))
+ .pipe($.size({showFiles: true, gzip: true, title: 'gzipped'}));
+});
+
+// build
+gulp.task('build', function(cb) {
+ runSequence(
+ 'build:clean',
+ ['build:less', 'build:fonts', 'build:js'],
+ cb);
+});
+
+// watch
+gulp.task('watch', function() {
+ gulp.watch(['js/*.js'], ['build:js']);
+ gulp.watch(['less/**/*.less'], ['build:less']);
+});
+
+// default
+gulp.task('default', ['build']);
\ No newline at end of file
diff --git a/less/badges.less b/less/badges.less
new file mode 100644
index 00000000..676a2c21
--- /dev/null
+++ b/less/badges.less
@@ -0,0 +1,88 @@
+//
+// Badges
+// --------------------------------------------------
+.@{namespace}badge {
+ display: inline-block;
+ padding: 3px 6px;
+ font-size: 12px;
+ line-height: 1;
+ color: #333;
+ background-color: rgba(0,0,0,.15);
+ border-radius: 100px;
+
+ // Inverted badges have no background.
+ &.@{namespace}badge-inverted {
+ padding: 0 5px 0 0;
+ color: @default-color;
+ background-color: transparent;
+ }
+}
+
+
+// Badge modifiers
+// --------------------------------------------------
+
+// Main badge
+.@{namespace}badge-primary,.@{namespace}badge-blue {
+ color: #fff;
+ background-color: @primary-color;
+
+ &.@{namespace}badge-inverted {
+ color: @primary-color;
+ background-color: transparent;
+ }
+}
+
+// success badge
+.@{namespace}badge-success,.@{namespace}badge-green {
+ color: #fff;
+ background-color: @positive-color;
+
+ &.@{namespace}badge-inverted {
+ color: @positive-color;
+ background-color: transparent;
+ }
+}
+//waring
+.@{namespace}badge-warning,.@{namespace}badge-yellow {
+ color: #fff;
+ background-color: @warning-color;
+
+ &.@{namespace}badge-inverted {
+ color: @warning-color;
+ background-color: transparent;
+ }
+}
+
+// Negative badge
+.@{namespace}badge-danger,.@{namespace}badge-red {
+ color: #fff;
+ background-color: @negative-color;
+
+ &.@{namespace}badge-inverted {
+ color: @negative-color;
+ background-color: transparent;
+ }
+}
+
+.@{namespace}badge-royal,.@{namespace}badge-purple {
+ color: #fff;
+ background-color: @royal-color;
+
+ &.@{namespace}badge-inverted {
+ color: @royal-color;
+ background-color: transparent;
+ }
+}
+
+.@{namespace}icon .@{namespace}badge{
+ position: absolute;
+ left: 100%;
+ margin-left: -10px;
+ top: -2px;
+ font-size: 10px;
+ line-height: 1.4;
+ padding: 1px 5px;
+ background: red;
+ color: white;
+}
\ No newline at end of file
diff --git a/less/bars.less b/less/bars.less
new file mode 100644
index 00000000..f0ecc9b2
--- /dev/null
+++ b/less/bars.less
@@ -0,0 +1,312 @@
+//
+// Bars
+// --------------------------------------------------
+
+.@{namespace}bar {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: @z-layers-bar;
+ height: @bar-base-height;
+ padding-right: @bar-side-spacing;
+ padding-left: @bar-side-spacing;
+ background-color: @chrome-color;
+ border-bottom: 0;
+ .box-shadow(0 0 1px rgba(0,0,0,.85));
+ -webkit-backface-visibility: hidden; // Make sure the bar is visible when a modal animates in.
+ backface-visibility: hidden;
+}
+
+//fixed by fxy
+.@{namespace}bar{
+ .@{namespace}title{
+ width: auto;
+ left: 40px;
+ right: 40px;
+ margin: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: inline-block;
+ }
+ .@{namespace}backdrop {
+ background: none;
+ }
+
+}
+
+// Modifier class to dock any bar below .@{namespace}bar-nav
+.@{namespace}bar-header-secondary {
+ top: @bar-base-height;
+}
+
+// Modifier class for footer bars
+.@{namespace}bar-footer {
+ bottom: 0;
+}
+
+// Modifier class to dock any bar above a standard bar
+.@{namespace}bar-footer-secondary {
+ bottom: @bar-base-height;
+}
+
+// Modifier class to dock any bar above a .@{namespace}bar-tab
+.@{namespace}bar-footer-secondary-tab {
+ bottom: @bar-tab-height;
+}
+
+// Give the footers the correct border
+.@{namespace}bar-footer,
+.@{namespace}bar-footer-secondary,
+.@{namespace}bar-footer-secondary-tab {
+ border-top: 0;
+}
+
+
+// Nav bar
+// --------------------------------------------------
+
+// Bar docked to top of viewport for showing page title and actions
+.@{namespace}bar-nav {
+ top: 0;
+ -webkit-box-shadow: 0px 1px 6px #CCC;
+ box-shadow: 0px 1px 6px #CCC;
+ ~ .@{namespace}content .@{namespace}anchor{
+ display: block;
+ height: 45px;
+ margin-top: -45px;
+ visibility: hidden;
+ }
+ &.@{namespace}bar .@{namespace}icon{
+ margin-left: -10px;
+ margin-right: -10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+}
+
+// Centered text in the .@{namespace}bar-nav
+//
+// We position the absolutely to make sure the title is always centered
+.@{namespace}title {
+ position: absolute;
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin: 0 (-@bar-side-spacing);
+ font-size: @font-size-default;
+ font-weight: @font-weight;
+ line-height: @bar-base-height;
+ color: #000;
+ text-align: center;
+ white-space: nowrap;
+}
+// Retain specified title color
+.@{namespace}title a {
+ color: inherit;
+}
+
+
+// Tab bar
+// --------------------------------------------------
+
+// Bar docked to bottom and used for primary app navigation
+.@{namespace}bar-tab {
+ display: table;
+ bottom: 0;
+ width: 100%;
+ height: @bar-tab-height;
+ padding: 0;
+ table-layout: fixed;
+ border-top: 0;
+ border-bottom: 0;
+ -webkit-touch-callout: none;//选项卡上禁止长按弹出菜单;
+
+ // Navigational tab (Nested to be more specific for the icons in tab-items)
+ .@{namespace}tab-item {
+ display: table-cell;
+ width: 1%;
+ height: @bar-tab-height;
+ color: #929292;
+ text-align: center;
+ vertical-align: middle;
+ //自动处理超出部分的文字;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ // Active states for the tab bar
+ &.@{namespace}active {
+ color: @primary-color;
+ }
+
+ // Tab icon
+ .@{namespace}icon {
+ top: 3px;
+ width: 24px;
+ height: 24px;
+ padding-top: 0;
+ padding-bottom: 0;
+
+ // Make the text smaller if it's used with an icon
+ ~ .@{namespace}tab-label {
+ display: block;
+ font-size: 11px;
+ //处理超出部分文字;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ &:active {
+ background: none;
+ }
+ }
+ }
+}
+.@{namespace}focusin>.@{namespace}bar-nav,.@{namespace}focusin>.@{namespace}bar-header-secondary{
+ position:absolute;
+}
+.@{namespace}focusin>.@{namespace}bar~.@{namespace}content{
+ padding-bottom: 0;
+}
+
+// Bars with buttons
+// --------------------------------------------------
+
+.@{namespace}bar .@{namespace}btn {
+ position: relative;
+ top: 7px;
+ z-index: @z-layers-btn; // Position the buttons on top of .@{namespace}title
+ padding: 6px 12px 7px;
+ margin-top: 0;
+ font-weight: @font-weight-light;
+
+ // Give buttons that are floated left and right side margin
+ &.@{namespace}pull-right {
+ margin-left: @bar-side-spacing;
+ }
+ &.@{namespace}pull-left {
+ margin-right: @bar-side-spacing;
+ }
+}
+
+// Bars with link buttons (Line the text up with content)
+.@{namespace}bar .@{namespace}btn-link {
+ top: 0;
+ padding: 0;
+ font-size: 16px;
+ line-height: @bar-base-height;
+ color: @primary-color;
+ border: 0;
+
+ &:active,
+ &.@{namespace}active {
+ color: darken(@primary-color, 10%);
+ }
+}
+
+// Bars with block buttons
+//
+// Add proper padding
+.@{namespace}bar .@{namespace}btn-block {
+ top: 6px;
+ padding: 5px 0;
+ margin-bottom: 0;
+ font-size: 16px; // Scale down font size to fit in bar.
+}
+
+// Nav buttons (Only applicable within bars)
+//
+// Buttons inside bars that sit closer against the viewport.
+.@{namespace}bar .@{namespace}btn-nav {
+ &.@{namespace}pull-left {
+ margin-left: -5px;
+
+ .@{namespace}icon-left-nav {
+ margin-right: -3px;
+ }
+ }
+ &.@{namespace}pull-right {
+ margin-right: -5px;
+
+ .@{namespace}icon-right-nav {
+ margin-left: -3px;
+ }
+ }
+ &:active{
+ opacity: .3;
+ //background-color: rgba(0,0,0,.07);
+ }
+}
+
+
+// Bars with Muiicons
+// --------------------------------------------------
+
+.@{namespace}bar {
+ .@{namespace}icon {
+ position: relative;
+ z-index: @z-layers-icon; // Position the buttons on top of .@{namespace}title
+ padding-top: 10px;
+ padding-bottom: 10px;
+ font-size: 24px;
+
+ &:active {
+ opacity: .3;
+ //background-color: rgba(0,0,0,.07);
+ }
+ }
+
+ // Vertical center the larger icons in btns.
+ .@{namespace}btn .@{namespace}icon {
+ top: 1px;
+ padding: 0;
+ margin:0;
+ }
+
+ // Handle carets in the titles
+ .@{namespace}title .@{namespace}icon {
+ padding: 0;
+ margin:0;
+ // Specific postioning of the caret icon within a title. Used with popover.js.
+ &.@{namespace}icon-caret {
+ top: 4px;
+ margin-left: -5px;
+ }
+ }
+}
+
+
+// Bars for search forms
+// --------------------------------------------------
+
+// Position/size search bar within the bar
+.@{namespace}bar input[type="search"] {
+ height: 29px;
+ margin: 6px 0;
+}
+.@{namespace}bar .@{namespace}input-row .@{namespace}btn{
+ padding: 12px 10px;
+}
+.@{namespace}bar .@{namespace}search:before{
+ margin-top: -10px;
+ }
+.@{namespace}bar .@{namespace}input-row .@{namespace}input-clear~.@{namespace}icon-clear, .@{namespace}bar .@{namespace}input-row .@{namespace}input-speech~.@{namespace}icon-speech{
+ top: 0;
+ right: 12px;
+}
+.@{namespace}bar.@{namespace}bar-header-secondary .@{namespace}input-row .@{namespace}input-clear~.@{namespace}icon-clear, .@{namespace}bar.@{namespace}bar-header-secondary .@{namespace}input-row .@{namespace}input-speech~.@{namespace}icon-speech{
+ top: 0;
+ right: 0;
+}
+
+// Bars with segmented controls
+// --------------------------------------------------
+
+// Position the control correctly inside a bar.
+.@{namespace}bar .@{namespace}segmented-control {
+ top: 7px;
+ margin: 0 auto;
+ width: auto;
+}
+.@{namespace}bar.@{namespace}bar-header-secondary .@{namespace}segmented-control {
+ top: 0px;
+}
diff --git a/less/base.less b/less/base.less
new file mode 100644
index 00000000..692e5868
--- /dev/null
+++ b/less/base.less
@@ -0,0 +1,196 @@
+//
+// Base styles
+// --------------------------------------------------
+
+// Use box sizing on all the things!
+* {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-tap-highlight-color: transparent;
+ -webkit-user-select: none;//禁止选择文字
+ outline: none;
+}
+// We fix position the body and scroll `.@{namespace}content`.
+body {
+ font-family: @font-family-default;
+ font-size: @font-size-default;
+ line-height: @line-height-default;
+ color: #000;
+ background-color: #efeff4;
+ -webkit-overflow-scrolling: touch;
+}
+
+// Universal link styling
+a {
+ color: @primary-color;
+ text-decoration: none;
+
+ &:active {
+ color: darken(@primary-color, 10%);
+ }
+}
+
+// Wrapper to be used around all content not in .@{namespace}bar-title and .@{namespace}bar-tab
+.@{namespace}content {
+ background-color: #efeff4;
+ -webkit-overflow-scrolling: touch;
+}
+
+// Hack to force all relatively and absolutely positioned elements still render while scrolling
+// Note: This is a bug for "-webkit-overflow-scrolling: touch"
+// .@{namespace}content > * {
+// @include transform(translateZ(0));
+// }
+
+// Pad top/bottom of content so it doesn't hide behind bars.
+// Note: For these to work, content must come after both bars in the markup
+.@{namespace}bar-nav ~ .@{namespace}content {
+ padding-top: @bar-base-height;
+ &.@{namespace}scroll-wrapper{
+ .@{namespace}scrollbar-vertical{
+ top:@bar-base-height;
+ }
+ }
+}
+.@{namespace}bar-header-secondary ~ .@{namespace}content {
+ padding-top: (@bar-base-height*2);
+ &.@{namespace}scroll-wrapper{
+ .@{namespace}scrollbar-vertical{
+ top:(@bar-base-height*2);
+ }
+ }
+}
+
+// Footer bar padding
+.@{namespace}bar-footer ~ .@{namespace}content {
+ padding-bottom: @bar-base-height;
+ &.@{namespace}scroll-wrapper{
+ .@{namespace}scrollbar-vertical{
+ bottom:@bar-base-height;
+ }
+ }
+}
+.@{namespace}bar-footer-secondary ~ .@{namespace}content {
+ padding-bottom: (@bar-base-height*2);
+ &.@{namespace}scroll-wrapper{
+ .@{namespace}scrollbar-vertical{
+ bottom:(@bar-base-height*2);
+ }
+ }
+}
+
+// Tab bar padding
+.@{namespace}bar-tab ~ .@{namespace}content {
+ padding-bottom: @bar-tab-height;
+ &.@{namespace}scroll-wrapper{
+ .@{namespace}scrollbar-vertical{
+ bottom:@bar-tab-height;
+ }
+ }
+}
+.@{namespace}bar-footer-secondary-tab ~ .@{namespace}content {
+ padding-bottom: (@bar-tab-height+@bar-base-height);
+ &.@{namespace}scroll-wrapper{
+ .@{namespace}scrollbar-vertical{
+ bottom:(@bar-tab-height+@bar-base-height);
+ }
+ }
+}
+
+// Utility classes
+
+.@{namespace}content-padded {
+ //暂时放弃content-padded
+ margin: @bar-side-spacing;
+}
+.@{namespace}inline {
+ display: inline-block;
+ vertical-align: top;
+}
+.@{namespace}block {
+ display: block!important;
+}
+.@{namespace}visibility {
+ visibility: visible!important;
+}
+.@{namespace}hidden {
+ display: none!important;
+}
+.@{namespace}ellipsis{
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.@{namespace}ellipsis-2{
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ white-space: normal!important;
+ word-wrap: break-word;
+}
+.@{namespace}table{
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+}
+.@{namespace}table-cell{
+ display: table-cell;
+ position: relative;
+}
+.@{namespace}text-left{
+ text-align: left!important;
+}
+.@{namespace}text-center{
+ text-align: center!important;
+}
+.@{namespace}text-justify{
+ text-align: justify!important;
+}
+.@{namespace}text-right{
+ text-align: right!important;
+}
+.@{namespace}pull-left {
+ float: left;
+}
+.@{namespace}pull-right {
+ float: right;
+}
+
+.@{namespace}list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+.@{namespace}list-inline {
+ padding-left: 0;
+ list-style: none;
+ margin-left: -5px;
+}
+.@{namespace}list-inline > li {
+ display: inline-block;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+.@{namespace}clearfix {
+ .clearfix();
+}
+.@{namespace}bg-primary {
+ background-color:@primary-color;
+}
+.@{namespace}bg-positive{
+ background-color:@positive-color;
+}
+.@{namespace}bg-negative{
+ background-color:@negative-color;
+}
+.@{namespace}error{
+ margin: 88px 35px;
+ padding:10px;
+ border-radius:6px;
+ background-color:#bbb;
+}
+.@{namespace}subtitle{
+ font-size: 15px;
+}
\ No newline at end of file
diff --git a/less/buttons.less b/less/buttons.less
new file mode 100644
index 00000000..0f0e1ed3
--- /dev/null
+++ b/less/buttons.less
@@ -0,0 +1,205 @@
+//
+// Buttons
+// --------------------------------------------------
+input[type="button"],
+input[type="submit"],
+input[type="reset"],
+button,
+.@{namespace}btn {
+ position: relative;
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0; // For input.@{namespace}btn
+ font-size: @button-font-size;
+ font-weight: @font-weight-light;
+ line-height: 1.42;//增大,和bootstrap保持一致;
+ color: #333;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: top;
+ cursor: pointer;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border-top-left-radius: 3px;//fixed android 4.2
+ border-top-right-radius: 3px;//fixed android 4.2
+ border-bottom-right-radius: 3px;//fixed android 4.2
+ border-bottom-left-radius: 3px;//fixed android 4.2
+ border-radius: 3px;
+ .transition(all);
+ .transition-duration(.2s);
+ .transition-timing-function(linear);
+
+ // Active & filled button styles
+ &:enabled:active,
+ &.@{namespace}active:enabled {
+ color: #fff;
+ background-color: @default-color;
+ }
+
+ // Disabled styles & filled button active styles
+ &:disabled,
+ &.@{namespace}disabled {
+ opacity: .6;
+ }
+}
+
+
+// Other button types
+// --------------------------------------------------
+
+// Primary button (Default color is blue)
+input[type="submit"],
+.@{namespace}btn-primary,.@{namespace}btn-blue {
+ .btn(@primary-color);
+}
+
+// Positive button (Default color is green)
+.@{namespace}btn-positive,.@{namespace}btn-success,.@{namespace}btn-green {
+ .btn(@positive-color);
+}
+
+.@{namespace}btn-warning,.@{namespace}btn-yellow {
+ .btn(@warning-color);
+}
+
+// Negative button (Default color is red)
+.@{namespace}btn-negative,.@{namespace}btn-danger,.@{namespace}btn-red {
+ .btn(@negative-color);
+}
+//紫色
+.@{namespace}btn-royal,.@{namespace}btn-purple {
+ .btn(@royal-color);
+}
+// grey button
+.@{namespace}btn-grey {
+ .btn(@grey-color);
+}
+// Outlined buttons
+.@{namespace}btn-outlined {
+ background-color: transparent;
+
+ &.@{namespace}btn-primary,&.@{namespace}btn-blue {
+ color: @primary-color;
+ }
+ &.@{namespace}btn-positive,&.@{namespace}btn-success,&.@{namespace}btn-green {
+ color: @positive-color;
+ }
+ &.@{namespace}btn-warning,&.@{namespace}btn-yellow {
+ color: @warning-color;
+ }
+ &.@{namespace}btn-negative,&.@{namespace}btn-danger,&.@{namespace}btn-red {
+ color: @negative-color;
+ }
+ &.@{namespace}btn-royal,&.@{namespace}btn-purple {
+ color: @royal-color;
+ }
+ // Active states
+ &.@{namespace}btn-primary,&.@{namespace}btn-blue,
+ &.@{namespace}btn-positive,&.@{namespace}btn-success,&.@{namespace}btn-green,
+ &.@{namespace}btn-warning,&.@{namespace}btn-yellow,
+ &.@{namespace}btn-negative,&.@{namespace}btn-danger,&.@{namespace}btn-red,
+ &.@{namespace}btn-royal,&.@{namespace}btn-purple,
+ {
+ &:enabled:active{
+ color: #fff;
+ }
+ }
+}
+
+// Link button (Buttons that look like links)
+.@{namespace}btn-link {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ color: @primary-color;
+ background-color: transparent;
+ border: 0;
+
+ &:enabled:active,
+ &.@{namespace}active:enabled {
+ color: darken(@primary-color, 10%);
+ background-color: transparent;
+ }
+}
+
+// Block level buttons (full width buttons)
+.@{namespace}btn-block {
+ display: block;
+ width: 100%;
+ padding: 15px 0;
+ margin-bottom: 10px;
+ font-size: 18px;
+}
+
+
+// Button overrides
+// --------------------------------------------------
+
+//input[type="submit"],
+//input[type="reset"],
+//input[type="button"] {
+// width: 100%;
+//}
+
+
+// Buttons with badges
+// --------------------------------------------------
+
+// Generic styles for all badges within default buttons
+.@{namespace}btn .@{namespace}badge {
+ margin: -2px -4px -2px 4px;
+ font-size: @button-font-size;
+ background-color: rgba(0,0,0,.15);
+}
+
+// Buttons with inverted badges
+.@{namespace}btn .@{namespace}badge-inverted,
+.@{namespace}btn:enabled:active .@{namespace}badge-inverted {
+ background-color: transparent;
+}
+.@{namespace}btn-primary:enabled:active .@{namespace}badge-inverted,
+.@{namespace}btn-positive:enabled:active .@{namespace}badge-inverted,
+.@{namespace}btn-negative:enabled:active .@{namespace}badge-inverted {
+ color: #fff;
+}
+
+// Position badges within block level buttons
+// Note: These are absolutely positioned so that text of button isn't "pushed" by badge and always
+// stays at the center of button
+.@{namespace}btn-block .@{namespace}badge {
+ position: absolute;
+ right: 0;
+ margin-right: 10px;
+}
+
+
+// Buttons with Muiicons
+// --------------------------------------------------
+
+.@{namespace}btn .@{namespace}icon{
+ font-size: inherit;
+}
+
+.@{namespace}btn.@{namespace}icon {
+ font-size: @button-font-size;
+ line-height: 1.42;
+}
+
+.@{namespace}btn.@{namespace}fab{
+ border-radius: 50%;
+ width: 56px;
+ height: 56px;
+ padding:16px;
+ outline: none;
+ &.@{namespace}btn-mini{
+ width: 40px;
+ height: 40px;
+ padding:8px;
+ }
+ .@{namespace}icon{
+ font-size: 24px;
+ line-height: 24px;
+ width: 24px;
+ height: 24px;
+ }
+}
\ No newline at end of file
diff --git a/less/cards.less b/less/cards.less
new file mode 100644
index 00000000..dbee49c9
--- /dev/null
+++ b/less/cards.less
@@ -0,0 +1,63 @@
+//
+// Cards
+// --------------------------------------------------
+
+.@{namespace}card {
+ margin: 0 15px;
+ overflow: hidden;
+ background-color: @card-bg;
+ border: @border-default;
+ background-clip:padding-box;
+ border-radius: @border-radius;
+}
+
+.@{namespace}content > .@{namespace}card:first-child{
+ margin-top: 15px;
+}
+//Cards with input-group
+.@{namespace}card .@{namespace}input-group{
+ &:before,&:after{
+ height:0;
+ }
+ .@{namespace}input-row:last-child{
+ &:before,&:after{
+ height:0;
+ }
+ }
+
+}
+// Cards with table-views
+// --------------------------------------------------
+.@{namespace}card .@{namespace}table-view {
+ margin-bottom: 0;
+ border-top: 0;
+ border-bottom: 0;
+ border-radius: @border-radius;
+ // Rounding first divider on carded lists and remove border on the top
+ //fix Android 4.1.x/4.2.x 圆角列表四角不圆的bug
+ .@{namespace}table-view-divider:first-child,.@{namespace}table-view-cell:first-child {
+ top: 0;
+ border-top-left-radius: @border-radius;
+ border-top-right-radius: @border-radius;
+ }
+
+ // Rounding last divider on carded table views
+ .@{namespace}table-view-divider:last-child,.@{namespace}table-view-cell:last-child {
+ border-bottom-left-radius: @border-radius;
+ border-bottom-right-radius: @border-radius;
+ }
+ &:before,&:after{
+ height:0;
+ }
+}
+
+
+// Remove the bottom border from last table cell
+.@{namespace}card > .@{namespace}table-view {
+ >.@{namespace}table-view-cell:last-child{
+ &:before,&:after{
+ height:0;
+ }
+ }
+}
+
diff --git a/less/forms.less b/less/forms.less
new file mode 100644
index 00000000..9fb67d77
--- /dev/null
+++ b/less/forms.less
@@ -0,0 +1,456 @@
+//
+// Forms
+// --------------------------------------------------
+
+// Force form elements to inherit font styles
+input,
+textarea,
+select {
+ font-family: @font-family-default;
+ font-size: @font-size-default;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-tap-highlight-color: transparent;
+ &:focus{
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-tap-highlight-color: transparent;
+ -webkit-user-modify: read-write-plaintext-only;
+ }
+}
+
+// Stretch inputs/textareas to full width and add height to maintain a consistent baseline
+select,
+textarea,
+input[type="text"],
+input[type="search"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="tel"],
+input[type="color"] {
+ width: 100%;
+ height: 40px;
+ -webkit-appearance: none;
+ padding: 10px 15px;
+ margin-bottom: 15px;
+ line-height: @line-height-default;
+ background-color: #fff;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 3px;
+ outline: none;
+ -webkit-user-select: text;
+}
+//input[type=number]::-webkit-outer-spin-button { margin: 0; }
+//turn off spin button
+input[type=number]::-webkit-inner-spin-button,
+input[type=number]::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+// Rounded search input
+input[type="search"] {
+ font-size: 16px;
+ height: 34px;
+ text-align: center;
+ background-color: rgba(0,0,0,.1);
+ border: 0;
+ border-radius: 6px;
+ // Override content-box in normalize
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type="search"]:focus {
+ text-align: left;
+}
+
+// Allow text area's height to grow larger than a normal input
+textarea {
+ height: auto;
+ resize: none;
+}
+
+// Style select button to look like part of the Ratchet's style
+select {
+ margin-top:1px;
+ height: auto;
+ font-size: 14px;
+ background-color: #fff;
+ border: 0!important;
+ &:focus{
+ -webkit-user-modify: read-only;
+ }
+}
+
+
+
+// Input groups (cluster multiple inputs together into a single group)
+// -------------------------------------------------------------------
+
+// Remove spacing, borders, shadows and rounding since it all belongs on the .@{namespace}input-group not the input
+.@{namespace}input-group {
+ position: relative;
+ padding: 0;
+ border: 0;
+ background-color: #fff;
+ .hairline(double, #c8c7cc, 0); // Double grey border.
+}
+.@{namespace}input-group input,
+.@{namespace}input-group textarea {
+ margin-bottom: 0;
+ background-color: transparent;
+ border-radius: 0;
+ .box-shadow(none);
+ border: 0;
+// .hairline(single, #c8c7cc, 15px);//为啥之前给input,textarea加了边线?都放入input-row的话,是不需要的
+}
+
+.@{namespace}input-group input[type="search"]{
+ background:none;
+}
+.@{namespace}input-group input:last-child {
+ background-image: none;
+}
+// Input groups with labels
+// --------------------------------------------------
+.@{namespace}input-row {
+ clear:left;
+ overflow: hidden;
+ select{
+ padding: 0;
+ height: 37px;
+ font-size:17px;
+ }
+}
+.@{namespace}input-row:last-child,
+.@{namespace}input-row label + input,.@{namespace}input-row .mui-btn + input {
+ background: none;
+}
+// To use labels with input groups, wrap a label and an input in an .@{namespace}input-row
+.@{namespace}input-group .@{namespace}input-row {
+ height: 40px; // Matches the height of inputs.
+ .hairline(single, #c8c7cc, 15px); // Single grey border with a 15px .
+}
+// Labels get floated left with a set percentage width
+.@{namespace}input-row label {
+ float: left;
+ width: 35%;
+ padding: 11px 15px;
+ font-family: @font-family-default;
+ line-height: 1.1; // Put the text on the baseline.
+}
+.@{namespace}input-row label ~
+{
+ input,select,textarea{
+ float: right;
+ width: 65%;
+ padding-left: 0;
+ margin-bottom: 0;
+ border: 0;
+ }
+}
+.@{namespace}input-row .mui-btn {
+ float: right;
+ width: 15%;
+ padding: 10px 15px;
+ font-family: @font-family-default;
+ line-height: 1.1; // Put the text on the baseline.
+}
+.@{namespace}input-row .mui-btn ~
+{
+ input,select,textarea{
+ float: left;
+ width: 85%;
+ padding-left: 0;
+ margin-bottom: 0;
+ border: 0;
+ }
+}
+.@{namespace}button-row {
+ position: relative;
+ padding-top: 5px;
+ text-align: center;
+}
+.@{namespace}input-group .@{namespace}button-row {
+ height: 45px;
+}
+// Actual inputs float to right of labels and also have a set percentage
+.@{namespace}input-row {
+ position:relative;
+ &.@{namespace}input-range{
+ padding-right: 20px;
+ overflow: visible;
+ }
+ .@{namespace}inline{
+ padding: 8px 0;
+ }
+ .@{namespace}input-clear ~ .@{namespace}icon-clear,.@{namespace}input-speech ~ .@{namespace}icon-speech,.@{namespace}input-password ~ .@{namespace}icon-eye{
+ position:absolute;
+ right: 0px;
+ top: 10px;
+ font-size: 20px;
+ height: 38px;
+ width: 38px;
+ text-align: center;
+ color:#999;
+ z-index: @z-layers-default;
+ &.@{namespace}active{
+ color:@primary-color;
+ }
+ }
+ .@{namespace}input-speech ~ .@{namespace}icon-speech{
+ top:8px;
+ font-size:24px;
+ }
+ .@{namespace}input-clear ~ .@{namespace}icon-clear {
+ ~ .@{namespace}icon-speech{
+ display:none;
+ }
+ &.@{namespace}hidden{
+ ~ .@{namespace}icon-speech{
+ display:inline-block;
+ }
+ }
+ }
+ .@{namespace}icon-speech ~ .@{namespace}placeholder{
+ right:38px;
+ }
+ &.@{namespace}search{
+ .@{namespace}icon-clear{
+ top:7px;
+ }
+ .@{namespace}icon-speech{
+ top:5px;
+ }
+ }
+}
+
+//radio,checkbox
+.@{namespace}radio,.@{namespace}checkbox{
+ position:relative;
+ label{
+ float: none;
+ display: inline-block;
+ width: 100%;
+ padding-right: 58px;
+ }
+
+}
+.@{namespace}radio.@{namespace}left input[type="radio"],.@{namespace}checkbox.@{namespace}left input[type="checkbox"]{
+ left:20px;
+}
+.@{namespace}radio.@{namespace}left label,.@{namespace}checkbox.@{namespace}left label{
+ padding-left: 58px;
+ padding-right: 15px;
+}
+.@{namespace}radio input[type="radio"],.@{namespace}checkbox input[type="checkbox"]{
+ -webkit-appearance:none;
+ outline: 0!important;
+ width: 28px;
+ border: 0;
+ height: 26px;
+ display: inline-block;
+ position: absolute;
+ right: 20px;
+ top: 4px;
+ //设置背景色,否则在Ios上会有黑色边框;
+ background-color:transparent;
+ &[disabled]:before{
+ opacity: .3;
+ }
+ &:before{
+ font-family: Muiicons;
+ font-weight: normal;
+ border-radius: 0;
+ font-size: 28px;
+ line-height: 1;
+ text-decoration: none;
+ -webkit-font-smoothing: antialiased;
+ color: rgb(170, 170, 170);
+ background: none;
+ }
+ &:checked:before{
+ color:@primary-color;
+ }
+
+}
+.@{namespace}radio.@{namespace}disabled label,.@{namespace}radio label.@{namespace}disabled,.@{namespace}checkbox.@{namespace}disabled label,.@{namespace}checkbox label.@{namespace}disabled{
+ opacity: .4;
+}
+.@{namespace}radio input[type="radio"]:before{
+ content: "\e411";
+}
+.@{namespace}radio input[type="radio"]:checked:before{
+ content: "\e441";
+}
+.@{namespace}checkbox input[type="checkbox"]:before{
+ content: "\e411";
+}
+.@{namespace}checkbox input[type="checkbox"]:checked:before{
+ content: "\e442";
+}
+
+
+.@{namespace}select{
+ position: relative;
+}
+.@{namespace}select:before{
+ position: absolute;
+ top: 8px;
+ color:rgba(170, 170, 170, 0.6);
+ font-family: Muiicons;
+ right: 21px;
+ content: '\e581';
+}
+
+
+.@{namespace}input-row .@{namespace}switch{
+ float: right;
+ margin-top: 5px;
+ margin-right: 20px;
+}
+//show the min and max
+.@{namespace}input-range{
+ input[type="range"] {
+ -webkit-appearance: none!important;
+ cursor: pointer;
+ border: 0;
+ outline: none;
+ padding: 0;
+ margin: 17px 0;
+ background-color: #999;
+ height: 2px;
+ border-radius: 3px;
+ position: relative;
+ width:100%;
+ }
+
+ input[type='range']::-webkit-slider-thumb {
+ -webkit-appearance: none!important;
+ background-color:@primary-color;
+ background-clip: padding-box;
+ height:28px;
+ width:28px;
+ border-radius: 50%;
+ border-color: darken(@primary-color, 10%);
+ }
+ /*input[type="range"] {
+ -webkit-appearance: none;
+ background: #999;
+ height: 36px;
+ border-radius: 1px;
+ overflow: hidden;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ outline:none;
+ position:relative;
+ width:100%;
+ }*/
+ label ~ input[type="range"]{
+ width:65%;
+ }
+
+ /*input[type='range']::-webkit-slider-thumb {
+ -webkit-appearance: none!important;
+ opacity: 0.5;
+ height:28px;
+ width:28px;
+ border-radius: 50%;
+ background:#00b7fb;
+ position: relative;
+ pointer-events: none;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ &:before{
+ position: absolute;
+ top: 13px;
+ left: -2000px;
+ width: 2000px;
+ height: 2px;
+ background: #00b7fb;
+ content:' ';
+ }
+ }*/
+ .@{namespace}tooltip{
+ width: 64px;
+ height: 64px;
+ font-size: 36px;
+ line-height:64px;
+ opacity: .8;
+ background-color: #fff;
+ border:1px solid #ddd;
+ border-radius:6px;
+ color: #333;
+ text-shadow: 0 1px 0 #f3f3f3;
+ position:absolute;
+ top:-70px;
+ text-align:center;
+ z-index:@z-layers-default;
+ }
+}
+//.@{namespace}bar .@{namespace}input-row.@{namespace}search .@{namespace}icon-speech{
+// top: -2px;
+// right: 10px;
+//}
+.@{namespace}search{
+ position: relative;
+ input[type="search"]{
+ padding-left:30px;
+ }
+ .@{namespace}placeholder{
+ height: 34px;
+ font-size: 16px;
+ line-height:34px;
+ text-align: center;
+ background:none;
+ border: 0;
+ color:#999;
+ border-radius: 6px;
+ display:inline-block;
+ position:absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index:@z-layers-default;
+ .@{namespace}icon{
+ color:#333;
+ font-size:20px;
+ }
+ }
+
+ &:before{
+ position: absolute;
+ font-family: Muiicons;
+ font-weight: normal;
+ font-size: 20px;
+ right: 50%;
+ margin-right:31px;
+ top: 50%;
+ margin-top: -18px;
+ content: '\e466';
+ display:none;
+ }
+ &.@{namespace}active{
+ &:before{
+ left:5px;
+ right:auto;
+ margin-right:0;
+ font-size:20px;
+ display:block;
+ }
+ input[type="search"]{
+ text-align:left;
+ }
+ .@{namespace}placeholder{
+ display:none;
+ }
+ }
+}
+
diff --git a/less/fullscreen.less b/less/fullscreen.less
new file mode 100644
index 00000000..e37da41a
--- /dev/null
+++ b/less/fullscreen.less
@@ -0,0 +1,35 @@
+.@{namespace}fullscreen{
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ &.@{namespace}slider .@{namespace}slider-group{
+ height:100%;
+
+ }
+ .@{namespace}segmented-control ~ .@{namespace}slider-group{
+ width:100%;
+ height:auto;
+ top:40px;
+ bottom:0;
+ position: absolute;
+ }
+ &.@{namespace}slider .@{namespace}slider-item>a{
+ top: 50%;
+ transform: translateY(-50%);
+ -webkit-transform: translateY(-50%);
+ }
+ .@{namespace}off-canvas-wrap .@{namespace}slider-item>a{
+ top: auto;
+ transform: none;
+ -webkit-transform: none;
+ }
+}
+.@{namespace}bar-tab ~ .@{namespace}content .@{namespace}slider.@{namespace}fullscreen{
+ .@{namespace}segmented-control ~ .@{namespace}slider-group{
+ bottom:50px;
+ }
+}
diff --git a/less/grid.less b/less/grid.less
new file mode 100644
index 00000000..d28ad48f
--- /dev/null
+++ b/less/grid.less
@@ -0,0 +1,85 @@
+.@{namespace}row {
+ .clearfix();
+}
+.@{namespace}col-xs-1, .@{namespace}col-sm-1, .@{namespace}col-xs-2, .@{namespace}col-sm-2, .@{namespace}col-xs-3, .@{namespace}col-sm-3, .@{namespace}col-xs-4, .@{namespace}col-sm-4, .@{namespace}col-xs-5, .@{namespace}col-sm-5, .@{namespace}col-xs-6, .@{namespace}col-sm-6, .@{namespace}col-xs-7, .@{namespace}col-sm-7, .@{namespace}col-xs-8, .@{namespace}col-sm-8, .@{namespace}col-xs-9, .@{namespace}col-sm-9, .@{namespace}col-xs-10, .@{namespace}col-sm-10, .@{namespace}col-xs-11, .@{namespace}col-sm-11, .@{namespace}col-xs-12, .@{namespace}col-sm-12 {
+ position: relative;
+ min-height: 1px;
+}
+.@{namespace}row>[class*="@{namespace}col-"]{
+ float: left;
+}
+.@{namespace}col-xs-12 {
+ width: 100%;
+}
+.@{namespace}col-xs-11 {
+ width: 91.66666667%;
+}
+.@{namespace}col-xs-10 {
+ width: 83.33333333%;
+}
+.@{namespace}col-xs-9 {
+ width: 75%;
+}
+.@{namespace}col-xs-8 {
+ width: 66.66666667%;
+}
+.@{namespace}col-xs-7 {
+ width: 58.33333333%;
+}
+.@{namespace}col-xs-6 {
+ width: 50%;
+}
+.@{namespace}col-xs-5 {
+ width: 41.66666667%;
+}
+.@{namespace}col-xs-4 {
+ width: 33.33333333%;
+}
+.@{namespace}col-xs-3 {
+ width: 25%;
+}
+.@{namespace}col-xs-2 {
+ width: 16.66666667%;
+}
+.@{namespace}col-xs-1 {
+ width: 8.33333333%;
+}
+@media (min-width: 400px) {
+ .@{namespace}col-sm-12 {
+ width: 100%;
+ }
+ .@{namespace}col-sm-11 {
+ width: 91.66666667%;
+ }
+ .@{namespace}col-sm-10 {
+ width: 83.33333333%;
+ }
+ .@{namespace}col-sm-9 {
+ width: 75%;
+ }
+ .@{namespace}col-sm-8 {
+ width: 66.66666667%;
+ }
+ .@{namespace}col-sm-7 {
+ width: 58.33333333%;
+ }
+ .@{namespace}col-sm-6 {
+ width: 50%;
+ }
+ .@{namespace}col-sm-5 {
+ width: 41.66666667%;
+ }
+ .@{namespace}col-sm-4 {
+ width: 33.33333333%;
+ }
+ .@{namespace}col-sm-3 {
+ width: 25%;
+ }
+ .@{namespace}col-sm-2 {
+ width: 16.66666667%;
+ }
+ .@{namespace}col-sm-1 {
+ width: 8.33333333%;
+ }
+
+}
\ No newline at end of file
diff --git a/less/hack.less b/less/hack.less
new file mode 100644
index 00000000..cf784707
--- /dev/null
+++ b/less/hack.less
@@ -0,0 +1,20 @@
+.@{namespace}android.@{namespace}android-4-0 {
+input,
+textarea{
+ &:focus{
+ //修复4.0.x系统的输入框无法正常输入文字
+ -webkit-user-modify: inherit;
+ }
+}
+}
+.@{namespace}android.@{namespace}android-4-2,.@{namespace}android.@{namespace}android-4-3 {
+input,
+textarea{
+ -webkit-user-select: text;
+}
+}
+//解决ios list 过多(height>20000px) crash的bug
+.@{namespace}ios .@{namespace}table-view-cell {
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+}
diff --git a/less/icon.less b/less/icon.less
new file mode 100644
index 00000000..32b8c292
--- /dev/null
+++ b/less/icon.less
@@ -0,0 +1,174 @@
+//
+// Muiicons
+// --------------------------------------------------
+
+@font-face {
+ font-family: Muiicons;
+ font-weight: normal;
+ font-style: normal;
+ src: url('../fonts/mui.ttf') format('truetype');
+}
+
+.@{namespace}icon {
+ display: inline-block;
+ font-family: Muiicons;
+ font-weight: normal;
+ font-style: normal;
+ font-size: 24px;
+ line-height: 1;
+ text-decoration: none;
+ -webkit-font-smoothing: antialiased;
+ &.@{namespace}active{
+ color:@primary-color;
+ }
+ &.@{namespace}right{
+ &:before{
+ float:right;
+ padding-left: 0.2em;
+ }
+ }
+}
+
+
+// 通讯录
+// 空心部分
+.@{namespace}icon-contact:before { content: "\e100"; }
+.@{namespace}icon-person:before { content: "\e101"; }
+.@{namespace}icon-personadd:before { content: "\e102"; }
+
+// 实心部分
+.@{namespace}icon-contact-filled:before { content: "\e130"; }
+.@{namespace}icon-person-filled:before { content: "\e131"; }
+.@{namespace}icon-personadd-filled:before { content: "\e132"; }
+
+
+// 通讯功能
+// 空心部分
+.@{namespace}icon-phone:before { content: "\e200"; }
+.@{namespace}icon-email:before { content: "\e201"; }
+.@{namespace}icon-chatbubble:before { content: "\e202"; }
+.@{namespace}icon-chatboxes:before { content: "\e203"; }
+
+// 实心部分
+.@{namespace}icon-phone-filled:before { content: "\e230"; }
+.@{namespace}icon-email-filled:before { content: "\e231"; }
+.@{namespace}icon-chatbubble-filled:before { content: "\e232"; }
+.@{namespace}icon-chatboxes-filled:before { content: "\e233"; }
+// 通讯功能补充类
+.@{namespace}icon-weibo:before { content: "\e260"; }
+.@{namespace}icon-weixin:before { content: "\e261"; }
+.@{namespace}icon-pengyouquan:before { content: "\e262"; }
+.@{namespace}icon-chat:before { content: "\e263"; }
+.@{namespace}icon-qq:before { content: "\e264"; }
+
+
+// 设备类
+// 空心部分
+.@{namespace}icon-videocam:before { content: "\e300"; }
+.@{namespace}icon-camera:before { content: "\e301"; }
+.@{namespace}icon-mic:before { content: "\e302"; }
+.@{namespace}icon-location:before { content: "\e303"; }
+
+// 实心部分
+.@{namespace}icon-mic-filled:before,.@{namespace}icon-speech:before { content: "\e332"; }
+.@{namespace}icon-location-filled:before { content: "\e333"; }
+
+// 设备补充类
+.@{namespace}icon-micoff:before { content: "\e360"; }
+// .@{namespace}icon-volumehigh:before { content: "\e361"; }
+// .@{namespace}icon-volumelow:before { content: "\e362"; }
+.@{namespace}icon-image:before { content: "\e363"; }
+.@{namespace}icon-map:before { content: "\e364"; }
+
+
+// 操作标志类
+// 空心部分
+.@{namespace}icon-compose:before { content: "\e400"; }
+.@{namespace}icon-trash:before { content: "\e401"; }
+.@{namespace}icon-upload:before { content: "\e402"; }
+.@{namespace}icon-download:before { content: "\e403"; }
+.@{namespace}icon-close:before { content: "\e404"; }
+.@{namespace}icon-redo:before { content: "\e405"; }
+.@{namespace}icon-undo:before { content: "\e406"; }
+.@{namespace}icon-refresh:before { content: "\e407"; }
+.@{namespace}icon-star:before { content: "\e408"; }
+.@{namespace}icon-plus:before { content: "\e409"; }
+.@{namespace}icon-minus:before { content: "\e410"; }
+.@{namespace}icon-circle:before,.@{namespace}icon-checkbox:before { content: "\e411"; }
+
+// 实心部分
+.@{namespace}icon-close-filled:before,.@{namespace}icon-clear:before { content: "\e434"; }
+.@{namespace}icon-refresh-filled:before { content: "\e437"; }
+.@{namespace}icon-star-filled:before { content: "\e438"; }
+.@{namespace}icon-plus-filled:before { content: "\e439"; }
+.@{namespace}icon-minus-filled:before { content: "\e440"; }
+.@{namespace}icon-circle-filled:before { content: "\e441"; }
+.@{namespace}icon-checkbox-filled:before { content: "\e442"; }
+
+
+// 操作标志补充类
+.@{namespace}icon-closeempty:before { content: "\e460"; }
+.@{namespace}icon-refreshempty:before { content: "\e461"; }
+.@{namespace}icon-reload:before { content: "\e462"; }
+.@{namespace}icon-starhalf:before { content: "\e463"; }
+.@{namespace}icon-spinner:before { content: "\e464"; }
+.@{namespace}icon-spinner-cycle:before { content: "\e465"; }
+.@{namespace}icon-search:before { content: "\e466"; }
+// .@{namespace}icon-searchstrong:before { content: "\e467"; }
+.@{namespace}icon-plusempty:before { content: "\e468"; }
+
+.@{namespace}icon-forward:before { content: "\e470"; }
+.@{namespace}icon-back:before,.@{namespace}icon-left-nav:before { content: "\e471"; }
+.@{namespace}icon-checkmarkempty:before { content: "\e472"; }
+// .@{namespace}icon-share:before { content: "\e473"; }
+
+
+// 拟物标志类
+// 空心部分
+.@{namespace}icon-home:before { content: "\e500"; }
+.@{namespace}icon-navigate:before { content: "\e501"; }
+.@{namespace}icon-gear:before { content: "\e502"; }
+.@{namespace}icon-paperplane:before { content: "\e503"; }
+.@{namespace}icon-info:before { content: "\e504"; }
+.@{namespace}icon-help:before { content: "\e505"; }
+.@{namespace}icon-locked:before { content: "\e506"; }
+.@{namespace}icon-more:before { content: "\e507"; }
+.@{namespace}icon-flag:before { content: "\e508"; }
+
+// 实心部分
+.@{namespace}icon-home-filled:before { content: "\e530"; }
+.@{namespace}icon-gear-filled:before { content: "\e532"; }
+.@{namespace}icon-info-filled:before { content: "\e534"; }
+.@{namespace}icon-help-filled:before { content: "\e535"; }
+.@{namespace}icon-more-filled:before { content: "\e537"; }
+
+// 拟物标志补充类
+.@{namespace}icon-settings:before { content: "\e560"; }
+// .@{namespace}icon-settingsstrong:before { content: "\e561"; }
+.@{namespace}icon-list:before { content: "\e562"; }
+.@{namespace}icon-bars:before { content: "\e563"; }
+// .@{namespace}icon-more-vertical:before { content: "\e564"; }
+.@{namespace}icon-loop:before { content: "\e565"; }
+// .@{namespace}icon-loopstrong:before { content: "\e566"; }
+.@{namespace}icon-paperclip:before { content: "\e567"; }
+.@{namespace}icon-eye:before { content: "\e568"; }
+
+// 箭头
+.@{namespace}icon-arrowup:before { content: "\e580"; }
+.@{namespace}icon-arrowdown:before { content: "\e581"; }
+.@{namespace}icon-arrowleft:before { content: "\e582"; }
+.@{namespace}icon-arrowright:before { content: "\e583"; }
+
+.@{namespace}icon-arrowthinup:before { content: "\e584"; }
+.@{namespace}icon-arrowthindown:before { content: "\e585"; }
+.@{namespace}icon-arrowthinleft:before { content: "\e586"; }
+.@{namespace}icon-arrowthinright:before { content: "\e587"; }
+
+.@{namespace}icon-pulldown:before { content: "\e588"; }
+
+
+
+
+
+
+
diff --git a/less/iframe.less b/less/iframe.less
new file mode 100644
index 00000000..34b0f450
--- /dev/null
+++ b/less/iframe.less
@@ -0,0 +1,12 @@
+.@{namespace}iframe-wrapper{
+ -webkit-overflow-scrolling:touch;
+ position: absolute;
+ left: 0;
+ right: 0;
+ iframe{
+ border: 0;
+ width: 100%;
+ height: 100%;
+ }
+}
+
diff --git a/less/iscroll.less b/less/iscroll.less
new file mode 100644
index 00000000..4d297085
--- /dev/null
+++ b/less/iscroll.less
@@ -0,0 +1,43 @@
+.@{namespace}iscroll-wrapper{
+ position: absolute;
+ z-index: @z-layers-default;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ overflow: hidden;
+}
+.@{namespace}bar-nav ~ .@{namespace}iscroll-wrapper {
+ top: @bar-base-height;
+ padding:0;
+}
+.@{namespace}bar-header-secondary ~ .@{namespace}iscroll-wrapper {
+ top: (@bar-base-height * 2);
+}
+.@{namespace}bar-footer ~ .@{namespace}iscroll-wrapper {
+ bottom: @bar-base-height;
+ padding:0;
+}
+.@{namespace}bar-footer-secondary ~ .@{namespace}iscroll-wrapper {
+ bottom: (@bar-base-height * 2);
+}
+.@{namespace}bar-tab ~ .@{namespace}iscroll-wrapper{
+ bottom: @bar-tab-height;
+ padding:0;
+}
+.@{namespace}bar-footer-secondary-tab ~ .@{namespace}iscroll-wrapper{
+ bottom: (@bar-tab-height+@bar-base-height);
+}
+
+.@{namespace}iscroll{
+ position: absolute;
+ z-index: @z-layers-default;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ width: 100%;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0);
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -webkit-text-size-adjust: none;
+ text-size-adjust: none;
+}
diff --git a/less/loadings.less b/less/loadings.less
new file mode 100644
index 00000000..08900ed7
--- /dev/null
+++ b/less/loadings.less
@@ -0,0 +1,111 @@
+.@{namespace}loading{
+ .@{namespace}spinner{
+ margin: 0 auto;
+ display: block;
+ }
+}
+.@{namespace}spinner {
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ -webkit-transform-origin: 50%;
+ transform-origin: 50%;
+ -webkit-animation: spinner-spin 1s step-end infinite;
+ animation: spinner-spin 1s step-end infinite;
+}
+.@{namespace}spinner:after {
+ display: block;
+ content: "";
+ width: 100%;
+ height: 100%;
+ background-image: url("data:image/svg+xml;charset=utf-8,");
+ background-position: 50%;
+ background-size: 100%;
+ background-repeat: no-repeat;
+}
+.@{namespace}spinner-white:after {
+ background-image: url("data:image/svg+xml;charset=utf-8,");
+}
+@-webkit-keyframes spinner-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ }
+ 8.33333333% {
+ -webkit-transform: rotate(30deg);
+ }
+ 16.66666667% {
+ -webkit-transform: rotate(60deg);
+ }
+ 25% {
+ -webkit-transform: rotate(90deg);
+ }
+ 33.33333333% {
+ -webkit-transform: rotate(120deg);
+ }
+ 41.66666667% {
+ -webkit-transform: rotate(150deg);
+ }
+ 50% {
+ -webkit-transform: rotate(180deg);
+ }
+ 58.33333333% {
+ -webkit-transform: rotate(210deg);
+ }
+ 66.66666667% {
+ -webkit-transform: rotate(240deg);
+ }
+ 75% {
+ -webkit-transform: rotate(270deg);
+ }
+ 83.33333333% {
+ -webkit-transform: rotate(300deg);
+ }
+ 91.66666667% {
+ -webkit-transform: rotate(330deg);
+ }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ }
+}
+@keyframes spinner-spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 8.33333333% {
+ transform: rotate(30deg);
+ }
+ 16.66666667% {
+ transform: rotate(60deg);
+ }
+ 25% {
+ transform: rotate(90deg);
+ }
+ 33.33333333% {
+ transform: rotate(120deg);
+ }
+ 41.66666667% {
+ transform: rotate(150deg);
+ }
+ 50% {
+ transform: rotate(180deg);
+ }
+ 58.33333333% {
+ transform: rotate(210deg);
+ }
+ 66.66666667% {
+ transform: rotate(240deg);
+ }
+ 75% {
+ transform: rotate(270deg);
+ }
+ 83.33333333% {
+ transform: rotate(300deg);
+ }
+ 91.66666667% {
+ transform: rotate(330deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
diff --git a/less/mixins.less b/less/mixins.less
new file mode 100644
index 00000000..7a3684a4
--- /dev/null
+++ b/less/mixins.less
@@ -0,0 +1,184 @@
+//
+// Mixins
+// --------------------------------------------------
+
+// General
+// --------------------------------------------------
+
+// Utilities
+// -------------------------
+
+// Clearfix
+// Source: http://nicolasgallagher.com/micro-clearfix-hack/
+//
+// For modern browsers
+// 1. The space content is one way to avoid an Opera bug when the
+// contenteditable attribute is included anywhere else in the document.
+// Otherwise it causes space to appear at the top and bottom of elements
+// that are clearfixed.
+// 2. The use of `table` rather than `block` is only necessary if using
+// `:before` to contain the top-margins of child elements.
+.clearfix() {
+ &:before,
+ &:after {
+ display: table; // 2
+ content: " "; // 1
+ }
+ &:after {
+ clear: both;
+ }
+}
+
+// Box shadow
+.box-shadow(@shadow...) {
+ -webkit-box-shadow: @shadow;
+ box-shadow: @shadow;
+}
+
+// Gradients
+.linear-gradient(@color-from; @color-to) {
+ background-color: @color-from; // Old browsers
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,@color-from), color-stop(100%,@color-to)); // Chrome, Safari4+
+ background-image: -webkit-linear-gradient(top, @color-from 0%, @color-to 100%); // Chrome10+, Safari5.1+
+// background-image: -moz-linear-gradient(top, @color-from 0%, @color-to 100%); // FF3.6+
+// background-image: -ms-linear-gradient(top, @color-from 0%, @color-to 100%); // IE10+
+ //background-image: -o-linear-gradient(top, @color-from 0%, @color-to 100%); // Opera 11.10+
+ background-image: linear-gradient(to bottom, @color-from 0%, @color-to 100%); // W3C
+// filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{@color-from}', endColorstr='#{@color-to}', GradientType=0 ); // IE6-9
+}
+
+.directional-gradient(@color-from; @color-to; @deg: 45deg) {
+ background-color: @color-from; // Old browsers
+ background-image: -webkit-gradient(linear, left bottom, right top, color-stop(0%,@color-from), color-stop(100%,@color-to)); // Chrome, Safari4+
+ background-image: -webkit-linear-gradient(45deg, @color-from 0%, @color-to 100%); // Chrome10+, Safari5.1+
+// background-image: -moz-linear-gradient(45deg, @color-from 0%, @color-to 100%); // FF3.6+
+// background-image: -ms-linear-gradient(45deg, @color-from 0%, @color-to 100%); // IE10+
+ //background-image: -o-linear-gradient(45deg, @color-from 0%, @color-to 100%); // Opera 11.10+
+ background-image: linear-gradient(45deg, @color-from 0%, @color-to 100%); // W3C
+// filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{@color-from}', endColorstr='#{@color-to}', GradientType=1 ); // IE6-9
+}
+
+
+// Transforms
+// --------------------------------------------------
+.transform(@transform...) {
+ -webkit-transform: @transform;
+// -ms-transform: @transform;
+ transform: @transform;
+}
+
+
+// Transitions
+// --------------------------------------------------
+.transition(@transition...) {
+ -webkit-transition: @transition;
+// -moz-transition: @transition;
+ transition: @transition;
+}
+.transition-property(@property...) {
+ -webkit-transition-property: @property;
+// -moz-transition-property: @property;
+ transition-property: @property;
+}
+.transition-duration(@duration...) {
+ -webkit-transition-duration: @duration;
+// -moz-transition-duration: @duration;
+ transition-duration: @duration;
+}
+.transition-timing-function(@function...) {
+ -webkit-transition-timing-function: @function;
+// -moz-transition-timing-function: @function;
+ transition-timing-function: @function;
+}
+
+
+// Animations
+// --------------------------------------------------
+.animation-name(@name) {
+ -webkit-animation-name: @name;
+// -moz-animation-name: @name;
+ animation-name: @name;
+}
+.animation-duration(@duration) {
+ -webkit-animation-duration: @duration;
+// -moz-animation-duration: @duration;
+ animation-duration: @duration;
+}
+.animation-direction(@direction) {
+ -webkit-animation-direction: @direction;
+// -moz-animation-direction: @direction;
+ animation-direction: @direction;
+}
+
+
+// Misc
+// --------------------------------------------------
+.hairline(@type; @color; @offset) {
+ &:after{
+ position: absolute;
+ left: @offset;
+ right: 0;
+ bottom: 0;
+ height: 1px;
+ background-color: @color;
+ content:'';
+ -webkit-transform: scaleY(0.5);
+ transform: scaleY(0.5);
+ }
+
+ // & when( @type = double) {
+ // &:before{
+ // position: absolute;
+ // left: @offset;
+ // right: 0;
+ // top: 0;
+ // height: 1px;
+ // background-color: @color;
+ // content:'';
+ // -webkit-transform: scaleY(0.5);
+ // transform: scaleY(0.5);
+ // }
+ // }
+
+// background: repeat-x bottom left
+// url(data:image/gif;base64,R0lGODlhAQACAPABAMjHzP///yH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAABACwAAAAAAQACAAACAgwKADs=);
+// background-size: 100% 1px;
+//@if @type == single {
+// background-image: url("data:image/svg+xml;utf8,");
+// background-position: @offset 100%;
+//
+//} @else if @type == double {
+// background-image: url("data:image/svg+xml;utf8,"),
+// url("data:image/svg+xml;utf8,");
+// background-position: @offset 100%, @offset 0;
+//}
+//background-repeat: no-repeat;
+}
+
+.hairline(@type; @color; @offset) when( @type = double) {
+ &:before{
+ position: absolute;
+ left: @offset;
+ right: 0;
+ top: 0;
+ height: 1px;
+ background-color: @color;
+ content:'';
+ -webkit-transform: scaleY(0.5);
+ transform: scaleY(0.5);
+ }
+}
+
+//button
+.btn(@color){
+ color: #fff;
+ background-color: @color;
+ border: 1px solid @color;
+
+ &:enabled:active,
+ &.@{namespace}active:enabled {
+ color: #fff;
+ background-color: darken(@color, 10%);
+ border: 1px solid darken(@color, 10%);
+ }
+}
diff --git a/less/modals.less b/less/modals.less
new file mode 100644
index 00000000..d487cf3e
--- /dev/null
+++ b/less/modals.less
@@ -0,0 +1,34 @@
+//
+// Modals
+// --------------------------------------------------
+
+.@{namespace}modal {
+ position: fixed;
+ top: 0;
+ z-index: z("modal");
+ width: 100%;
+ min-height: 100%;
+ overflow: hidden;
+ background-color: #fff;
+ opacity: 0;
+ -webkit-transition: -webkit-transform .25s, opacity 1ms .25s;
+ transition: transform .25s, opacity 1ms .25s;
+ .transform(translate3d(0, 100%, 0));
+ .transition-timing-function(@timing-fuction);
+
+ // Active modal
+ &.@{namespace}active {
+ height: 100%;
+ opacity: 1;
+ -webkit-transition: -webkit-transform .25s;
+ transition: transform .25s;
+ .transform(translate3d(0, 0, 0));
+ .transition-timing-function(@timing-fuction);
+ }
+}
+.@{namespace}android .@{namespace}modal .@{namespace}bar{
+ position: static;
+}
+.@{namespace}android .@{namespace}modal .@{namespace}bar-nav~.@{namespace}content{
+ padding-top: 0;
+}
diff --git a/less/mui.less b/less/mui.less
new file mode 100644
index 00000000..7c4152a6
--- /dev/null
+++ b/less/mui.less
@@ -0,0 +1,48 @@
+// Variables
+@import "variables.less";
+
+// Mixins
+@import "mixins.less";
+
+// Normalize & Base CSS
+@import "normalize.less";
+@import "base.less";
+@import "type.less";
+@import "grid.less";
+
+// Components
+@import "scroll.less";
+// @import "iscroll.less";
+@import "off-canvas.less";
+@import "loadings.less";
+@import "buttons.less";
+@import "bars.less";
+@import "badges.less";
+@import "cards.less";
+@import "table-views.less";
+@import "slider-cell.less";
+@import "forms.less";
+@import "segmented-controls.less";
+@import "popovers.less";
+@import "popup.less";
+@import "pagination.less";
+
+// // Javascript components
+@import "modals.less";
+@import "sliders.less";
+@import "switches.less";
+@import "push.less";
+@import "pullrefreshs.less";
+@import "toast.less";
+
+@import "number.less";
+
+// Muiicons
+@import "icon.less";
+// fullscreen
+@import "fullscreen.less";
+@import "hack.less";
+// // os
+@import "os.less";
+// //iframe
+@import "iframe.less";
\ No newline at end of file
diff --git a/less/normalize.less b/less/normalize.less
new file mode 100644
index 00000000..69bab10b
--- /dev/null
+++ b/less/normalize.less
@@ -0,0 +1,425 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+//
+// 1. Set default font family to sans-serif.
+// 2. Prevent iOS text size adjust after orientation change, without disabling
+// user zoom.
+//
+
+html {
+ font-family: sans-serif; // 1
+ //-ms-text-size-adjust: 100%; // 2
+ -webkit-text-size-adjust: 100%; // 2
+}
+
+//
+// Remove default margin.
+//
+
+body {
+ margin: 0;
+}
+
+// HTML5 display definitions
+// ==========================================================================
+
+//
+// Correct `block` display not defined for any HTML5 element in IE 8/9.
+// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+// Correct `block` display not defined for `main` in IE 11.
+//
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+//
+// 1. Correct `inline-block` display not defined in IE 8/9.
+// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+//
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; // 1
+ vertical-align: baseline; // 2
+}
+
+//
+// Prevent modern browsers from displaying `audio` without controls.
+// Remove excess height in iOS 5 devices.
+//
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+//
+// Address `[hidden]` styling not present in IE 8/9/10.
+// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+//
+
+[hidden],
+template {
+ display: none;
+}
+
+// Links
+// ==========================================================================
+
+//
+// Remove the gray background color from active links in IE 10.
+//
+
+a {
+ background: transparent;
+}
+
+//
+// Improve readability when focused and also mouse hovered in all browsers.
+//
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+// Text-level semantics
+// ==========================================================================
+
+//
+// Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+//
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+//
+// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+//
+
+b,
+strong {
+ font-weight: bold;
+}
+
+//
+// Address styling not present in Safari and Chrome.
+//
+
+dfn {
+ font-style: italic;
+}
+
+//
+// Address variable `h1` font-size and margin within `section` and `article`
+// contexts in Firefox 4+, Safari, and Chrome.
+//
+
+h1 {
+ margin: 0.67em 0;
+ font-size: 2em;
+}
+
+//
+// Address styling not present in IE 8/9.
+//
+
+mark {
+ color: #000;
+ background: #ff0;
+}
+
+//
+// Address inconsistent and variable font size in all browsers.
+//
+
+small {
+ font-size: 80%;
+}
+
+//
+// Prevent `sub` and `sup` affecting `line-height` in all browsers.
+//
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -.5em;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+// Embedded content
+// ==========================================================================
+
+//
+// Remove border when inside `a` element in IE 8/9/10.
+//
+
+img {
+ border: 0;
+}
+
+//
+// Correct overflow not hidden in IE 9/10/11.
+//
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+// Grouping content
+// ==========================================================================
+
+//
+// Address margin not present in IE 8/9 and Safari.
+//
+
+figure {
+ margin: 1em 40px;
+}
+
+//
+// Address differences between Firefox and other browsers.
+//
+
+hr {
+ height: 0;
+ //-moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+//
+// Contain overflow in all browsers.
+//
+
+pre {
+ overflow: auto;
+}
+
+//
+// Address odd `em`-unit font size rendering in all browsers.
+//
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+// Forms
+// ==========================================================================
+
+//
+// Known limitation: by default, Chrome and Safari on OS X allow very limited
+// styling of `select`, unless a `border` property is set.
+//
+
+//
+// 1. Correct color not being inherited.
+// Known issue: affects color of disabled elements.
+// 2. Correct font properties not being inherited.
+// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+//
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0; // 3
+ color: inherit; // 1
+ font: inherit; // 2
+}
+
+//
+// Address `overflow` set to `hidden` in IE 8/9/10/11.
+//
+
+button {
+ overflow: visible;
+}
+
+//
+// Address inconsistent `text-transform` inheritance for `button` and `select`.
+// All other form control elements do not inherit `text-transform` values.
+// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+// Correct `select` style inheritance in Firefox.
+//
+
+button,
+select {
+ text-transform: none;
+}
+
+//
+// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+// and `video` controls.
+// 2. Correct inability to style clickable `input` types in iOS.
+// 3. Improve usability and consistency of cursor style between image-type
+// `input` and others.
+//
+
+button,
+html input[type="button"], // 1
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; // 2
+ cursor: pointer; // 3
+}
+
+//
+// Re-set default cursor for disabled elements.
+//
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+//
+// Remove inner padding and border in Firefox 4+.
+//
+
+//button::-moz-focus-inner,
+//input::-moz-focus-inner {
+//padding: 0;
+//border: 0;
+//}
+
+//
+// Address Firefox 4+ setting `line-height` on `input` using `!important` in
+// the UA stylesheet.
+//
+
+input {
+ line-height: normal;
+}
+
+//
+// It's recommended that you don't attempt to style these elements.
+// Firefox's implementation doesn't respect box-sizing, padding, or width.
+//
+// 1. Address box sizing set to `content-box` in IE 8/9/10.
+// 2. Remove excess padding in IE 8/9/10.
+//
+
+input[type="checkbox"],
+input[type="radio"] {
+ padding: 0; // 2
+ box-sizing: border-box; // 1
+}
+
+//
+// Fix the cursor style for Chrome's increment/decrement buttons. For certain
+// `font-size` values of the `input`, it causes the cursor style of the
+// decrement button to change from `default` to `text`.
+//
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+//
+// 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+// 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+// (include `-moz` to future-proof).
+//
+
+input[type="search"] {
+ -webkit-box-sizing: content-box; // 2
+// -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield; // 1
+}
+
+//
+// Remove inner padding and search cancel button in Safari and Chrome on OS X.
+// Safari (but not Chrome) clips the cancel button when the search input has
+// padding (and `textfield` appearance).
+//
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+//
+// Define consistent border, margin, and padding.
+//
+
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+
+//
+// 1. Correct `color` not being inherited in IE 8/9/10/11.
+// 2. Remove padding so people aren't caught out if they zero out fieldsets.
+//
+
+legend {
+ padding: 0; // 2
+ border: 0; // 1
+}
+
+//
+// Remove default vertical scrollbar in IE 8/9/10/11.
+//
+
+textarea {
+ overflow: auto;
+}
+
+//
+// Don't inherit the `font-weight` (applied by a rule above).
+// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+//
+
+optgroup {
+ font-weight: bold;
+}
+
+// Tables
+// ==========================================================================
+
+//
+// Remove most spacing between table cells.
+//
+
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/less/number.less b/less/number.less
new file mode 100644
index 00000000..286fa4fb
--- /dev/null
+++ b/less/number.less
@@ -0,0 +1,71 @@
+.@{namespace}numbox {
+ border: solid 1px #bbb;
+ overflow: hidden ;
+ display: inline-block;
+ height: 35px;
+ border-radius: 3px;
+ background-color: #efeff4;
+ vertical-align: top;
+ position: relative;
+ padding: 0px 40px 0px 40px;
+ width: 120px;
+ vertical-align: middle;
+
+ //基于.mui-btn扩展,故命名修改为mui-btn-numbox
+ [class*=numbox-btn],[class*=btn-numbox] {
+ width: 40px;
+ height: 100%;
+ position: absolute;
+ top: 0px;
+ border: none;
+ border-radius: 0px;
+ font-size: 18px;
+ color: #555;
+ line-height: 100%;
+ font-weight: normal;
+ overflow: hidden;
+ padding: 0px;
+ background-color: #f9f9f9;
+
+ &:active{
+ background-color: #ccc;
+ }
+ &[disabled]{
+ color: #c0c0c0;
+ }
+ }
+
+ .@{namespace}numbox-btn-plus,.@{namespace}btn-numbox-plus {
+ right: 0px;
+ border-top-right-radius:3px;
+ border-bottom-right-radius:3px;
+ }
+ .@{namespace}numbox-btn-minus,.@{namespace}btn-numbox-minus {
+ left: 0px;
+ border-top-left-radius:3px;
+ border-bottom-left-radius:3px;
+ }
+
+ .@{namespace}numbox-input,.@{namespace}input-numbox {
+ width: 100% !important;
+ height: 100%;
+ text-align: center;
+ border: none !important;
+ border-left: solid 1px #ccc !important;
+ border-right: solid 1px #ccc !important;
+ margin: 0px;
+ padding: 0px 3px !important;
+ display: inline-block;
+ border-radius: 0px !important;
+ text-overflow: ellipsis;
+ word-break: normal;
+ overflow: hidden;
+ }
+
+}
+
+
+.@{namespace}input-row .@{namespace}numbox {
+ margin: 2px 8px;
+ float: right;
+}
\ No newline at end of file
diff --git a/less/off-canvas.less b/less/off-canvas.less
new file mode 100644
index 00000000..d6cff28d
--- /dev/null
+++ b/less/off-canvas.less
@@ -0,0 +1,119 @@
+//.@{namespace}android{
+.@{namespace}off-canvas-wrap{
+ .@{namespace}bar{//fix android
+ position: absolute!important;
+ .transform(translate3d(0, 0, 0));//fix ios(offcanvas scalable的时候,bar会消失)
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ }
+//}
+
+.@{namespace}off-canvas-wrap{
+ position: relative;
+ width:100%;
+ height: 100%;
+ overflow: hidden;
+ z-index: @z-layers-default;
+ .@{namespace}inner-wrap{
+ position: relative;
+ width: 100%;
+ height:100%;
+ z-index: @z-layers-default;
+ &.@{namespace}transitioning{
+ -webkit-transition: -webkit-transform 350ms ;
+ transition: transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1);
+ }
+ .@{namespace}off-canvas-left {
+ .transform(translate3d(-100%, 0, 0));
+ }
+ .@{namespace}off-canvas-right{
+ .transform(translate3d(100%, 0, 0));
+ }
+ }
+ &.@{namespace}active{
+ overflow:hidden;
+ height:100%;
+ .@{namespace}off-canvas-backdrop{
+// -webkit-backface-visibility: hidden;
+ transition: background 350ms cubic-bezier(0.165, 0.84, 0.44, 1);
+ box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5);
+ display: block;
+ position: absolute;
+ background: rgba(0, 0, 0, 0.4);
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: @z-layers-backdrop;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ }
+ }
+ &.@{namespace}slide-in{
+ .@{namespace}off-canvas-right {
+ -webkit-transform: translate3d(100%, 0px, 0px);
+ z-index: @z-layers-max!important;
+ }
+ .@{namespace}off-canvas-left {
+ -webkit-transform: translate3d(-100%, 0px, 0px);
+ z-index: @z-layers-max!important;
+ }
+ }
+}
+
+
+.@{namespace}off-canvas-left, .@{namespace}off-canvas-right {
+// -webkit-backface-visibility: hidden;
+ width: 70%;
+ min-height:100%;
+ top: 0;
+ bottom: 0;
+ position: absolute;
+ background: #333;
+ box-sizing: content-box;
+ -webkit-overflow-scrolling: touch;
+ z-index: -1;
+ visibility: hidden;
+ &.@{namespace}transitioning{
+ -webkit-transition: -webkit-transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1);
+ transition: transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1);
+ }
+}
+.@{namespace}off-canvas-left {
+ left: 0;
+}
+.@{namespace}off-canvas-right {
+ right: 0;
+}
+
+//scalable
+.@{namespace}off-canvas-wrap:not(.@{namespace}slide-in).@{namespace}scalable {
+ background-color: #333;
+ >.@{namespace}off-canvas-left,>.@{namespace}off-canvas-right{
+ width: 80%;
+ .transform(scale(0.8));
+ opacity: 0.1;
+ &.@{namespace}transitioning{
+ -webkit-transition: -webkit-transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1), opacity 350ms cubic-bezier(0.165, 0.84, 0.44, 1);
+ transition: transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1), opacity 350ms cubic-bezier(0.165, 0.84, 0.44, 1);
+ }
+ }
+ >.@{namespace}off-canvas-left{
+ -webkit-transform-origin: -100%;
+ transform-origin: -100%;
+ }
+ >.@{namespace}off-canvas-right{
+ -webkit-transform-origin: 200%;
+ transform-origin: 200%;
+ }
+ &.@{namespace}active{
+ >.@{namespace}inner-wrap{
+ .transform(scale(0.8));
+ }
+ >.@{namespace}off-canvas-left,>.@{namespace}off-canvas-right{
+ .transform(scale(1));
+ opacity: 1;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/less/os.less b/less/os.less
new file mode 100644
index 00000000..d3be3208
--- /dev/null
+++ b/less/os.less
@@ -0,0 +1,39 @@
+.@{namespace}plus-visible,.@{namespace}wechat-visible{
+ display: none!important;
+}
+.@{namespace}plus-hidden,.@{namespace}wechat-hidden{
+ display: block!important;
+}
+.@{namespace}tab-item.@{namespace}plus-hidden,.@{namespace}tab-item.@{namespace}wechat-hidden{
+ display: table-cell!important;
+}
+.@{namespace}plus .@{namespace}plus-visible,.@{namespace}wechat .@{namespace}wechat-visible{
+ display: block!important;
+}
+.@{namespace}plus .@{namespace}tab-item.@{namespace}plus-visible,.@{namespace}wechat .@{namespace}tab-item.@{namespace}wechat-visible{
+ display: table-cell!important;
+}
+.@{namespace}plus .@{namespace}plus-hidden,.@{namespace}wechat .@{namespace}wechat-hidden{
+ display: none!important;
+}
+
+
+//ios 状态栏
+.@{namespace}plus.@{namespace}statusbar.@{namespace}statusbar-offset{
+ .@{namespace}bar-nav {
+ padding-top: 20px;
+ height:64px;
+ &~.@{namespace}content {
+ padding-top: 64px;
+ .@{namespace}pull-top-pocket {
+ top: 64px;
+ }
+ }
+ }
+ .@{namespace}bar-header-secondary {
+ top: 64px;
+ &~.@{namespace}content {
+ padding-top: 94px;
+ }
+ }
+}
diff --git a/less/pagination.less b/less/pagination.less
new file mode 100644
index 00000000..1984647c
--- /dev/null
+++ b/less/pagination.less
@@ -0,0 +1,150 @@
+//
+// Pagination (multiple pages)
+// --------------------------------------------------
+
+.@{namespace}pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 0 auto;
+ border-radius: @border-radius;
+
+ > li {
+ display: inline; // Remove list-style and block-level defaults
+ > a,
+ > span {
+ position: relative;
+ float: left; // Collapse white-space
+ padding: 6px 12px;
+ line-height: 1.428571429;
+ text-decoration: none;
+ color: @primary-color;
+ background-color: #fff;
+ border: @border-default;
+ margin-left: -1px;
+ }
+ &:first-child {
+ > a,
+ > span {
+ margin-left: 0;
+ border-top-left-radius: @border-radius;
+ border-bottom-left-radius: @border-radius;
+ background-clip: padding-box;
+ }
+ }
+ &:last-child {
+ > a,
+ > span {
+ border-top-right-radius: @border-radius;
+ border-bottom-right-radius: @border-radius;
+ background-clip: padding-box;
+ }
+ }
+ }
+
+ > li:active > a,
+ > li:active > span,
+ > li.@{namespace}active > a,
+ > li.@{namespace}active > span {
+ &,
+ &:active {
+ z-index: @z-layers-default + 1;
+ color: #fff;
+ background-color: @primary-color;
+ border-color: @primary-color;
+ cursor: default;
+ }
+ }
+
+ > li.@{namespace}disabled {
+ > span,
+ > span:active,
+ > a,
+ > a:active {
+ color:#777;
+ opacity: .6;
+ background-color:#fff;
+ border: @border-default;
+ }
+ }
+}
+
+// Sizing
+// --------------------------------------------------
+
+// Large
+.@{namespace}pagination-lg>li {
+ > a,
+ > span {
+ padding: 10px 16px;
+ font-size: 18px;
+ }
+}
+
+// Small
+.@{namespace}pagination-sm >li{
+ > a,
+ > span {
+ padding: 5px 10px;
+ font-size: 12px;
+ }
+}
+
+
+
+.@{namespace}pager {
+ padding-left: 0;
+ list-style: none;
+ text-align: center;
+
+ .clearfix();
+
+ li {
+ display: inline;
+ > a,
+ > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: @border-default;
+ border-radius: @border-radius;
+ }
+ &:active>a,
+ &:active>span,
+ &.@{namespace}active > a ,
+ &.@{namespace}active > span {
+ text-decoration: none;
+ color: #fff;
+ background-color: @primary-color;
+ border-color: @primary-color;
+ cursor: default;
+ }
+ }
+
+ .@{namespace}next {
+ > a,
+ > span {
+ float: right;
+ }
+ }
+
+ .@{namespace}previous {
+ > a,
+ > span {
+ float: left;
+ }
+ }
+
+ .@{namespace}disabled {
+ > a,
+ > a:active,
+ > span,
+ > span:active{
+ color:#777;
+ opacity: .6;
+ background-color:#fff;
+ border: @border-default;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/less/popovers.less b/less/popovers.less
new file mode 100644
index 00000000..f0d5fdab
--- /dev/null
+++ b/less/popovers.less
@@ -0,0 +1,203 @@
+//
+// Popovers (to be used with popovers.js)
+// --------------------------------------------------
+
+.@{namespace}popover {
+ position: absolute;
+ z-index: @z-layers-popover;
+ display: none;
+ width: 280px;
+ background-color: @chrome-color;
+ border-radius: 7px;
+ opacity: 0;
+ .box-shadow(0 0 15px rgba(0, 0, 0, .1));
+ -webkit-transition: opacity .3s;
+ transition: opacity .3s;
+ -webkit-transform: none;
+ transform: none;
+ -webkit-transition-property: opacity;
+ transition-property: opacity;
+ .@{namespace}popover-arrow{
+ width: 26px;
+ height: 26px;
+ position: absolute;
+ left: 0px;
+ top: -25px;
+ z-index: @z-layers-arrow;
+ overflow: hidden;
+ &:after {
+ content: ' ';
+ background: @chrome-color;
+ width: 26px;
+ height: 26px;
+ position: absolute;
+ left: 0;
+ top: 19px;
+ border-radius: 3px;
+ -webkit-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+ &.@{namespace}bottom{
+ left:-26px;
+ top: 100%;
+ margin-top: -1px;
+ &:after {
+ left: 0;
+ top: -19px;
+ }
+ }
+ }
+
+ &.@{namespace}popover-action{
+ //display: block;//加上后可实现从底部出来动画效果,但会导致html页面高度增加
+ bottom:0;
+ width: 100%;
+ border-radius:0;
+ .transform(translate3d(0, 100%, 0));
+ -webkit-transition: -webkit-transform .3s, opacity .3s;
+ transition: transform .3s, opacity .3s;
+ background: none;
+ .box-shadow(none);
+ .@{namespace}popover-arrow{
+ display: none;
+ }
+
+ &.@{namespace}popover-bottom{
+ position: fixed;
+ }
+
+ // Active modal
+ &.@{namespace}active {
+ .transform(translate3d(0, 0, 0));
+ }
+ .@{namespace}table-view {
+ margin: 8px;
+ border-radius:4px;
+ text-align: center;
+ color: @primary-color;
+ .@{namespace}table-view-cell {
+ .hairline(single, #c8c7cc, 0); // Single grey border with 15px offset.
+ }
+ small{
+ line-height: 1.3;
+ font-weight: 400;
+ display: block;
+ }
+ }
+
+ }
+
+ // Popover transition
+ // --------------------------------------------------
+
+ &.@{namespace}active {
+ display: block;
+ opacity: 1;
+ }
+
+ // Give correct spacing to the content if there is a bar inside the popover.
+ .@{namespace}bar ~ .@{namespace}table-view {
+ padding-top: @bar-base-height;
+ }
+}
+
+// Backdrop (used as invisible touch escape)
+// --------------------------------------------------
+
+.@{namespace}backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ z-index: @z-layers-backdrop;
+ background-color: rgba(0,0,0,.3);
+}
+
+.@{namespace}bar-backdrop.@{namespace}backdrop{
+ bottom: 50px;
+ background:none;
+}
+.@{namespace}backdrop-action.@{namespace}backdrop{
+ // bottom:50px;
+ background-color: rgba(0,0,0,.3);
+}
+.@{namespace}bar-backdrop.@{namespace}backdrop,.@{namespace}backdrop-action.@{namespace}backdrop{
+ opacity:0;
+ &.@{namespace}active {
+ opacity: 1;
+ .transition(all 0.4s ease);
+ }
+}
+// Block level buttons in popovers
+// --------------------------------------------------
+
+.@{namespace}popover .@{namespace}btn-block {
+ margin-bottom: 5px;
+
+ // Remove extra margin on bottom of last button
+ &:last-child {
+ margin-bottom: 0;
+ }
+}
+
+
+// Popovers with nav bars
+// --------------------------------------------------
+.@{namespace}popover .@{namespace}bar {
+ .box-shadow(none);
+}
+.@{namespace}popover .@{namespace}bar-nav {
+ border-bottom: 1px solid rgba(0,0,0,.15);
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ .box-shadow(none);
+}
+
+// scroll in popovers
+.@{namespace}popover .@{namespace}scroll-wrapper{
+ background-clip: padding-box;
+ border-radius: 7px;
+ margin: 7px 0;// border radius not work(fixed android)
+}
+// Table views in popovers
+// --------------------------------------------------
+.@{namespace}popover .@{namespace}scroll .@{namespace}table-view{
+ max-height: none;
+}
+.@{namespace}popover .@{namespace}table-view {
+ max-height: 300px;
+ margin-bottom: 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ background-color: @chrome-color;
+ background-image: none;
+ border-radius: 7px;
+ &:before,&:after{
+ height: 0;
+ }
+ .@{namespace}table-view-cell:first-child{
+ &,
+ > a:not(.mui-btn){
+ border-top-right-radius: 12px;
+ border-top-left-radius: 12px;
+ }
+ }
+ .@{namespace}table-view-cell:last-child{
+ &,
+ > a:not(.mui-btn){
+ border-bottom-right-radius: 12px;
+ border-bottom-left-radius: 12px;
+ }
+ }
+}
+.@{namespace}popover.@{namespace}bar-popover .@{namespace}table-view{
+ width:106px;
+ .@{namespace}table-view-cell{
+ padding:11px 15px 11px 15px;
+ background-position:0px 100%;
+ }
+ .@{namespace}table-view-cell > a:not(.@{namespace}btn){
+ margin:-11px -15px -11px -15px;
+ }
+}
diff --git a/less/popup.less b/less/popup.less
new file mode 100644
index 00000000..b0d537be
--- /dev/null
+++ b/less/popup.less
@@ -0,0 +1,153 @@
+.@{namespace}popup-backdrop{
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ z-index: @z-layers-backdrop;
+ background: rgba(0,0,0,.4);
+ opacity: 0;
+ .transition-duration(400ms);
+ &.@{namespace}active {
+ opacity: 1;
+ }
+}
+.@{namespace}popup{
+ width: 270px;
+ position: absolute;
+ z-index: @z-layers-max;
+ left: 50%;
+ top: 50%;
+ text-align: center;
+ border-radius: 13px;
+ overflow: hidden;
+ opacity: 0;
+ .transform(translate3d(-50%,-50%,0) scale(1.185));
+ -webkit-transition-property: -webkit-transform,opacity;
+ transition-property: transform,opacity;
+ color: #000;
+ display: none;
+ &.@{namespace}popup-in{
+ opacity: 1;
+ .transition-duration(400ms);
+ .transform(translate3d(-50%,-50%,0) scale(1));
+ display: block;
+ }
+ &.@{namespace}popup-out{
+ opacity: 0;
+ //z-index:max-1
+ .transition-duration(400ms);
+ .transform(translate3d(-50%,-50%,0) scale(1));
+ }
+}
+.@{namespace}popup-inner {
+ padding: 15px;
+ border-radius: 13px 13px 0 0;
+ position: relative;
+ background: rgba(255,255,255,.95);
+ &:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ right: auto;
+ top: auto;
+ height: 1px;
+ width: 100%;
+ background-color: rgba(0,0,0,.2);
+ display: block;
+ z-index: 15;
+ -webkit-transform-origin: 50% 100%;
+ transform-origin: 50% 100%;
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ }
+}
+.@{namespace}popup-title {
+ font-weight: 500;
+ font-size: 18px;
+ text-align: center;
+}
+.@{namespace}popup-title+.@{namespace}popup-text {
+ margin-top: 5px;
+ font-size: 14px;
+}
+.@{namespace}popup-buttons {
+ height: 44px;
+ position: relative;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center
+}
+
+.@{namespace}popup-button {
+ width: 100%;
+ padding: 0 5px;
+ height: 44px;
+ font-size: 17px;
+ line-height: 44px;
+ text-align: center;
+ color: #007aff;
+ display: block;
+ position: relative;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ cursor: pointer;
+ box-sizing: border-box;
+ -webkit-box-flex: 1;
+ background: rgba(255,255,255,.95);
+ &:after {
+ content: '';
+ position: absolute;
+ right: 0;
+ top: 0;
+ left: auto;
+ bottom: auto;
+ width: 1px;
+ height: 100%;
+ background-color: rgba(0,0,0,.2);
+ display: block;
+ z-index: 15;
+ -webkit-transform-origin: 100% 50%;
+ transform-origin: 100% 50%;
+ -webkit-transform: scaleX(.5);
+ transform: scaleX(.5)
+ }
+ &:first-child {
+ border-radius: 0 0 0 13px;
+ &:last-child {
+ border-radius: 0 0 13px 13px
+ }
+ }
+ &:last-child {
+ border-radius: 0 0 13px 0;
+ &:after {
+ display: none
+ }
+ }
+ &.@{namespace}popup-button-bold {
+ font-weight: 600
+ }
+}
+.@{namespace}popup-input input{
+ height: 26px;
+ background: #fff;
+ margin: 0;
+ margin-top: 15px;
+ padding: 0 5px;
+ border: 1px solid rgba(0,0,0,.3);
+ border-radius: 0;
+ width: 100%;
+ font-size: 14px;
+}
+.@{namespace}plus.@{namespace}android .@{namespace}popup-backdrop{
+ .transition-duration(1ms);
+}
+.@{namespace}plus.@{namespace}android .@{namespace}popup{
+ .transition-duration(1ms);
+ .transform(translate3d(-50%,-50%,0) scale(1));
+}
diff --git a/less/pullrefreshs.less b/less/pullrefreshs.less
new file mode 100644
index 00000000..cc159cd8
--- /dev/null
+++ b/less/pullrefreshs.less
@@ -0,0 +1,98 @@
+.@{namespace}pull-top-pocket,.@{namespace}pull-bottom-pocket{
+ display: block;
+ overflow: hidden;
+ position: absolute;
+ left: 0;
+ width: 100%;
+ height: 50px;
+ visibility:hidden;
+}
+//android 5+
+.@{namespace}plus-pullrefresh{
+ .@{namespace}pull-top-pocket,.@{namespace}pull-bottom-pocket{
+ display: none;
+ visibility:visible;
+ }
+}
+.@{namespace}pull-top-pocket{
+ top:0px;
+}
+.@{namespace}bar-nav~.@{namespace}content .@{namespace}pull-top-pocket{
+ top: 44px;
+}
+.@{namespace}bar-nav~.@{namespace}bar-header-secondary~.@{namespace}content .@{namespace}pull-top-pocket{
+ top: 88px;
+}
+.@{namespace}pull-bottom-pocket{
+ bottom:0;
+ height: 40px;
+ position:relative;
+ .@{namespace}pull-loading{
+ visibility:hidden;
+ &.@{namespace}in{
+ display: inline-block;
+ }
+ }
+}
+//android 5+
+//.@{namespace}plus-pullrefresh{
+// .@{namespace}pull-bottom-pocket{
+// position: relative;
+// left: auto;
+// bottom: auto;
+// }
+//}
+//.@{namespace}bar-nav ~ .@{namespace}content{
+// .@{namespace}pull-top-pocket{
+// top:-445px;
+// }
+//}
+.@{namespace}pull{
+ position: absolute;
+ left: 0;
+ bottom: 10px;
+ right: 0;
+ color: #777;
+ text-align: center;
+ //text-shadow: 1px 1px 0 #dfdfdf;
+ font-weight: bold;
+}
+
+//.@{namespace}pull-loading{
+//
+//display: inline-block;
+//width: 20px;
+//height: 20px;
+//background-image: url("data:image/GIF;base64,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");
+//background-size:contain;
+//background-position:center center;
+//background-repeat:no-repeat;
+//vertical-align: middle;
+//}
+.@{namespace}pull-loading{
+// -webkit-backface-visibility: hidden;
+ -webkit-transition-duration: 400ms;
+ transition-duration: 400ms;
+ -webkit-transition:-webkit-transform 0.4s;
+ transition: transform 0.4s;
+ vertical-align: middle;
+ margin-right: 10px;
+}
+.@{namespace}pull-loading.@{namespace}reverse{
+ .transform(rotate(180deg) translateZ(0));
+}
+.@{namespace}pull-caption{
+ display: inline-block;
+ line-height: 24px;
+ font-size: 15px;
+ margin-top: 0;
+ vertical-align: middle;
+ position: relative;
+ overflow: visible;
+ span{
+ display: none;
+ &.@{namespace}in{
+ display: inline;
+ }
+ }
+}
\ No newline at end of file
diff --git a/less/push.less b/less/push.less
new file mode 100644
index 00000000..4673684f
--- /dev/null
+++ b/less/push.less
@@ -0,0 +1,61 @@
+//
+// Push styles (to be used with push.js)
+// --------------------------------------------------
+
+.@{namespace}content {
+ // Fade animation
+ &.@{namespace}fade {
+ left: 0;
+ opacity: 0;
+
+ &.@{namespace}in {
+ opacity: 1;
+ }
+ }
+
+ // Slide animation
+ &.@{namespace}sliding {
+ z-index: @z-layers-default + 1;
+ -webkit-transition: -webkit-transform .4s;
+ transition: transform .4s;
+ .transform(translate3d(0, 0, 0));
+
+ &.@{namespace}left {
+ z-index: @z-layers-default;
+ .transform(translate3d(-100%, 0, 0));
+ }
+
+ &.@{namespace}right {
+ z-index: @z-layers-default + 2;
+ .transform(translate3d(100%, 0, 0));
+ }
+ }
+}
+
+// Add chevrons to elements
+.@{namespace}navigate-right,
+.@{namespace}push-left,
+.@{namespace}push-right {
+ &:after {
+ position: absolute;
+ top: 50%;
+ display: inline-block;
+ font-family: Muiicons;
+ font-size: inherit;
+ line-height: 1;
+ color: #bbb;
+ text-decoration: none;
+ -webkit-font-smoothing: antialiased;
+ .transform(translateY(-50%));
+ }
+}
+
+.@{namespace}push-left:after {
+ left: 15px;
+ content: '\e582';
+}
+.@{namespace}navigate-right:after,
+.@{namespace}push-right:after{
+ right: 15px;
+ content: '\e583';
+}
diff --git a/less/scroll.less b/less/scroll.less
new file mode 100644
index 00000000..bf535a73
--- /dev/null
+++ b/less/scroll.less
@@ -0,0 +1,95 @@
+
+.@{namespace}scroll-wrapper {
+// -webkit-backface-visibility: hidden;
+ position: absolute;
+ z-index: 2;
+ top: 0px;
+ bottom: 0px;
+ left: 0;
+ width: 100%;
+ overflow: hidden;
+}
+.@{namespace}scroll {
+// -webkit-backface-visibility: hidden;
+ position: absolute;
+ z-index: @z-layers-default;
+ width: 100%;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0);
+}
+
+.@{namespace}scrollbar{
+ position: absolute;
+ z-index: @z-layers-scrollbar;
+ overflow: hidden;
+ transform: translateZ(0px);
+ transition: 500ms;
+ -webkit-transition: 500ms;
+ opacity: 0;
+ pointer-events: none;
+}
+.@{namespace}scrollbar-vertical{
+ width: 4px;
+ bottom: 2px;
+ top: 0;
+ right: 1px;
+ .@{namespace}scrollbar-indicator{
+ width:100%;
+ }
+}
+.@{namespace}scrollbar-horizontal{
+ height: 4px;
+ left: 2px;
+ right: 2px;
+ bottom: 0px;
+ .@{namespace}scrollbar-indicator{
+ height:100%;
+ }
+}
+
+.@{namespace}scrollbar-indicator{
+ box-sizing: border-box;
+ position: absolute;
+ border: 1px solid rgba(255, 255, 255, 0.801961);
+ border-radius: 2px;
+ transition: 0.01s cubic-bezier(0.1, 0.57, 0.1, 1);
+ -webkit-transition: 0.01s cubic-bezier(0.1, 0.57, 0.1, 1);
+ display: block;
+ transform: translate(0px, 0px) translateZ(0px);
+ background: rgba(0, 0, 0, 0.398039);
+}
+
+//android 5+
+.@{namespace}plus-pullrefresh{
+ .@{namespace}fullscreen{
+ .@{namespace}scroll-wrapper,.@{namespace}slider-group {
+ .@{namespace}scroll-wrapper {
+ position: absolute;
+ top: 0px;
+ bottom: 0px;
+ left: 0;
+ width: 100%;
+ overflow: hidden;
+ }
+ .@{namespace}scroll {
+ position: absolute;
+ width: 100%;
+ }
+ }
+ }
+ .@{namespace}scroll-wrapper,.@{namespace}slider-group {
+ position: static;
+ top: auto;
+ bottom: auto;
+ left: auto;
+ width: auto;
+ overflow: auto;
+ }
+ .@{namespace}slider-group{
+ overflow: visible;
+ }
+ .@{namespace}scroll {
+ position: static;
+ width: auto;
+ }
+}
diff --git a/less/segmented-controls.less b/less/segmented-controls.less
new file mode 100644
index 00000000..d7cbebec
--- /dev/null
+++ b/less/segmented-controls.less
@@ -0,0 +1,167 @@
+//
+// Segmented controllers
+// --------------------------------------------------
+
+.@{namespace}segmented-control {
+ position: relative;
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+ overflow: hidden;
+ font-size: 15px;
+ font-weight: @font-weight-light;
+ background-color: transparent;
+ border: 1px solid @primary-color;
+ border-radius: 3px;
+ -webkit-touch-callout: none;//(iOS平台)分段选择禁止长按弹出菜单;
+ &.@{namespace}segmented-control-vertical{
+ border-radius:0;
+ border-width: 0;
+ border-collapse: collapse;
+ .@{namespace}control-item{
+ display: block;
+ border-left-width: 0;
+ border-bottom: 1px solid #c8c7cc;
+ }
+ }
+ &.@{namespace}scroll-wrapper{
+ height: 38px;
+ .@{namespace}scroll{
+ height: 40px;
+ width: auto;
+ white-space: nowrap;
+ }
+ .@{namespace}control-item{
+ display: inline-block;
+ width: auto;
+ padding: 0 20px;
+ border: 0;
+ }
+ }
+ // Section within controller
+ .@{namespace}control-item {
+ display: table-cell;
+ width: 1%;
+// padding-top: 6px;
+// padding-bottom: 7px;
+ overflow: hidden;
+ line-height: 38px;
+ text-align: center;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ border-left: 1px solid @primary-color;
+ color: @primary-color;
+ border-color: @primary-color;
+ .transition(background-color .1s linear);
+ // Remove border-left and shadow from first section
+ &:first-child {
+ border-left-width: 0;
+ }
+// &:active {
+// background-color: lighten(@primary-color, 35%);
+// }
+ // Selected state of segmented controller
+ &.@{namespace}active {
+ color: #fff;
+ background-color: @primary-color;
+ }
+ }
+ &.@{namespace}segmented-control-inverted{
+ width:100%;
+ border:0;
+ border-radius:0;
+ &.@{namespace}segmented-control-vertical{
+ .@{namespace}control-item{
+ border-bottom: 1px solid #c8c7cc;
+ &.@{namespace}active {
+ border-bottom: 1px solid #c8c7cc;
+ }
+ }
+ }
+ .@{namespace}control-item {
+ border:0;
+ color: inherit;
+ &.@{namespace}active {
+ color: @primary-color;
+ background: none;
+ border-bottom:2px solid @primary-color;
+ }
+ }
+ ~ .@{namespace}slider-progress-bar{
+ background-color:@primary-color;
+ }
+ }
+}
+
+// Other segmented controller types
+// --------------------------------------------------
+
+// Positive
+.@{namespace}segmented-control-positive {
+ border: 1px solid @positive-color;
+
+ .@{namespace}control-item {
+ color: @positive-color;
+ border-color: inherit;
+
+// &:active {
+// background-color: lighten(@positive-color, 35%);
+// }
+ &.@{namespace}active {
+ color: #fff;
+ background-color: @positive-color;
+ }
+ }
+ &.@{namespace}segmented-control-inverted{
+ .@{namespace}control-item {
+ &.@{namespace}active {
+ color: @positive-color;
+ background: none;
+ border-bottom:2px solid @positive-color;
+ }
+ }
+ ~ .@{namespace}slider-progress-bar{
+ background-color:@positive-color;
+ }
+ }
+}
+
+// Negative
+.@{namespace}segmented-control-negative {
+ border: 1px solid @negative-color;
+
+ .@{namespace}control-item {
+ color: @negative-color;
+ border-color: inherit;
+
+// &:active {
+// background-color: lighten(@negative-color, 35%);
+// }
+ &.@{namespace}active {
+ color: #fff;
+ background-color: @negative-color;
+ }
+ }
+ &.@{namespace}segmented-control-inverted{
+ .@{namespace}control-item {
+ &.@{namespace}active {
+ color: @negative-color;
+ background: none;
+ border-bottom:2px solid @negative-color;
+ }
+ }
+ ~ .@{namespace}slider-progress-bar{
+ background-color:@negative-color;
+ }
+ }
+}
+
+// This is used to by the js to show and hide content tide to the segmented control.
+.@{namespace}control-content {
+ position: relative;
+ display: none;
+
+ &.@{namespace}active {
+ display: block;
+ }
+}
diff --git a/less/slider-cell.less b/less/slider-cell.less
new file mode 100644
index 00000000..77835387
--- /dev/null
+++ b/less/slider-cell.less
@@ -0,0 +1,20 @@
+.@{namespace}slider-cell{
+ position:relative;
+ >.@{namespace}slider-handle{
+ z-index: @z-layers-default;
+ }
+ >.@{namespace}slider-left,>.@{namespace}slider-right{
+ z-index:0;
+ position:absolute;
+ top:0;
+ bottom:0;
+ }
+ >.@{namespace}slider-left{
+ left:0;
+ }
+ >.@{namespace}slider-right{
+ right: @z-layers-default - 1;
+ }
+}
+
+
\ No newline at end of file
diff --git a/less/sliders.less b/less/sliders.less
new file mode 100644
index 00000000..2fbaea3c
--- /dev/null
+++ b/less/sliders.less
@@ -0,0 +1,135 @@
+//
+// Slider styles (to be used with galleries.js)
+// --------------------------------------------------
+
+// Outer wrapper for slider
+.@{namespace}slider {
+ //-webkit-backface-visibility: hidden;
+ overflow: hidden;
+ width: 100%;
+ position:relative;
+ z-index: @z-layers-default;
+ .@{namespace}segmented-control.@{namespace}segmented-control-inverted{
+ .@{namespace}control-item {
+ &.@{namespace}active {
+ border-bottom:0;
+ }
+ }
+ ~ .@{namespace}slider-group{
+ .@{namespace}slider-item{
+ //.hairline(double, #c8c7cc, 0); // double grey border.
+ border-top: 1px solid #c8c7cc;
+ border-bottom: 1px solid #c8c7cc;
+ }
+ }
+ }
+ // Inner wrapper for slider (width of all sliders together)
+ .@{namespace}slider-group {
+ //加上后好像内嵌轮播时,第一张图片显示有问题
+// -webkit-backface-visibility: hidden;
+ position: relative;
+ font-size: 0; // Remove spaces from inline-block children
+ white-space: nowrap;
+ .transition(all 0s linear);
+
+ // Individual slider
+ .@{namespace}slider-item {
+// -webkit-backface-visibility: hidden;
+ position: relative;
+ display: inline-block;
+ white-space:normal;
+ width: 100%;
+ height: 100%;
+ font-size: 14px;
+ vertical-align: top; // Ensure that li always aligns to top
+ >a:not(.@{namespace}control-item){
+ position: relative;
+ line-height: 0;
+ display: block;
+ }
+ img{
+ width: 100%;
+ }
+ .@{namespace}table-view:before,.@{namespace}table-view:after{
+ height:0;
+ }
+// .@{namespace}table-view-cell:last-child:after{
+// height: 0;
+// }
+ }
+ &.@{namespace}slider-loop{
+ .transform(translate(-100%, 0px));
+ }
+// &.@{namespace}slider-loop .@{namespace}slider-item{
+// &:first-child{
+// margin-left: -100%;
+// }
+// &:last-child{
+// margin-right: -100%;
+// }
+// }
+ }
+}
+.@{namespace}slider-title{
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 30px;
+ line-height: 30px;
+ width: 100%;
+ text-align: left;
+ text-indent: 12px;
+ background-color: #000;
+ opacity: 0.8;
+ margin: 0;
+}
+.@{namespace}slider-indicator{
+ position: absolute;
+ bottom: 8px;
+ width: 100%;
+ text-align:center;
+ background:none;
+ &.@{namespace}segmented-control{
+ position:relative;
+ bottom:auto;
+// .@{namespace}control-item{
+// line-height: 40px;
+// }
+ }
+ .@{namespace}indicator{
+ display: inline-block;
+ cursor: pointer;
+ background: #aaa;
+ width: 6px;
+ height: 6px;
+ margin: 1px 6px;
+ border-radius: 50%;
+ .box-shadow(0 0 1px 1px rgba(130,130,130,.7));
+ }
+ .@{namespace}active.@{namespace}indicator{
+ background: #fff;
+ }
+ .@{namespace}icon{
+ width: 40px;
+ height: 30px;
+ margin: 3px;
+ font-size: 20px;
+ line-height: 30px;
+ text-align: center;
+ border: 1px solid #dddddd;
+ }
+ .@{namespace}number{
+ display: inline-block;
+ line-height: 32px;
+ width: 58px;
+ span{
+ color: #ff5053;
+ }
+ }
+}
+.@{namespace}slider-progress-bar{
+// -webkit-backface-visibility: hidden;
+ .transform(translateZ(0));
+ height:2px;
+ z-index: @z-layers-default;
+}
diff --git a/less/switches.less b/less/switches.less
new file mode 100644
index 00000000..c0078892
--- /dev/null
+++ b/less/switches.less
@@ -0,0 +1,115 @@
+//
+// switch styles (to be used with switchs.js)
+// --------------------------------------------------
+
+.@{namespace}switch {
+ position: relative;
+ display: block;
+ width: 74px;
+ height: 30px;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 2px solid #ddd;
+ border-radius: 20px;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+ -webkit-transition-duration: 0.2s;
+ transition-duration: 0.2s;
+ -webkit-transition-property: background-color, border;
+ transition-property: background-color, border;
+ &.@{namespace}disabled {
+ opacity: .3;
+ }
+ // Sliding handle
+ .@{namespace}switch-handle {
+ position: absolute;
+ top: -1px;
+ left: -1px;
+ z-index: @z-layers-default;
+ width: 28px;
+ height: 28px;
+ background-color: #fff;
+ background-clip: padding-box;
+// border: 1px solid #ddd;
+ -webkit-box-shadow: 0 2px 5px rgba(0,0,0,.4);
+ box-shadow: 0 2px 5px rgba(0,0,0,.4);
+ border-radius: 16px;
+ -webkit-transition-property: -webkit-transform, width,left;
+ transition-property: transform, width,left;
+ -webkit-transition: 0.2s ease-in-out;
+ transition: 0.2s ease-in-out;
+ }
+ &:before {
+ position: absolute;
+ top: 3px;
+ right: 11px;
+ font-size: 13px;
+ color: #999;
+ text-transform: uppercase;
+ content: "Off";
+ }
+ &.@{namespace}dragging {
+ background-color: @chrome-color;
+ border-color: @chrome-color;
+ .@{namespace}switch-handle {
+ width: 38px;
+ }
+ &.@{namespace}active{
+ .@{namespace}switch-handle {
+ width: 38px;
+ left:-11px;
+ }
+ }
+ }
+ // Active state for switchborder: 2px solid @positive-color;
+ &.@{namespace}active {
+ background-color: @positive-color;
+ border-color: @positive-color;
+// .box-shadow(inset 0 0 0 13px @positive-color);
+ .@{namespace}switch-handle {
+// border-color: @positive-color;
+ .transform(translate(43px,0));
+ }
+ &:before {
+ right: auto;
+ left: 15px;
+ color: #fff;
+ content: "On";
+ }
+ }
+ // Hide the checkbox
+ input[type="checkbox"] {
+ display: none;
+ }
+}
+
+.@{namespace}switch-mini{
+ width: 47px;
+ &:before {
+ display: none;
+ }
+ // Active state for switch
+ &.@{namespace}active {
+ .@{namespace}switch-handle {
+ .transform(translate(16px,0));
+ }
+ }
+}
+
+//增加蓝色开关
+.@{namespace}switch-blue {
+ // Sliding handle
+ .@{namespace}switch-handle {
+// border: 1px solid rgba(0, 0, 0, .2);
+// .box-shadow(0 3px 3px rgba(0,0,0,.08));
+ }
+ // Active state for switch
+ &.@{namespace}active {
+ background-color: @primary-color;
+ border: 2px solid @primary-color;
+// .box-shadow(inset 0 0 0 13px @primary-color);
+// .@{namespace}switch-handle {
+// border-color: @primary-color;
+// }
+ }
+}
\ No newline at end of file
diff --git a/less/table-views.less b/less/table-views.less
new file mode 100644
index 00000000..6d948726
--- /dev/null
+++ b/less/table-views.less
@@ -0,0 +1,500 @@
+//
+// Table views
+// --------------------------------------------------
+
+.@{namespace}table-view {
+ position: relative;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ list-style: none; // Remove usual bullet styles from table view
+ background-color: #fff;
+// border-color:#c8c7cc;
+// border-width: 1px 0px 1px 0px;
+// border-style: solid;
+ .hairline(double, #c8c7cc, 0); // Double grey border.
+ &:before{
+ top:-1px;//cell 高亮时,保证边框仍旧可见
+ }
+
+}
+//.@{namespace}table-view-striped>li:nth-child(odd){
+// background-color: #f9f9f9;
+// >.@{namespace}slider-cell{
+// >.@{namespace}slider-left ~ .@{namespace}slider-handle,>.@{namespace}slider-right ~ .@{namespace}slider-handle{
+// background-color:#f9f9f9;
+// }
+// }
+//}
+.@{namespace}table-view-icon .@{namespace}table-view-cell{
+ .@{namespace}navigate-right .@{namespace}icon{
+ font-size: 20px;
+ margin-left: -5px;
+ margin-right: 5px;
+ margin-top: -1px;
+ }
+ &:after{
+ left:40px;
+ }
+}
+.@{namespace}table-view-chevron .@{namespace}table-view-cell{
+ padding-right: 65px;
+ > a:not(.@{namespace}btn) {
+ margin-right: -65px;
+ }
+}
+.@{namespace}table-view-radio .@{namespace}table-view-cell{
+ padding-right: 65px;
+ > a:not(.@{namespace}btn) {
+ margin-right: -65px;
+ }
+ .@{namespace}navigate-right:after{
+ right:9px;
+ content: '';
+ color:@primary-color;
+ font-size: 30px;
+ font-weight: 600;
+ }
+ &.@{namespace}selected .@{namespace}navigate-right:after{
+ content: '\e472';
+ }
+}
+//.@{namespace}table-view-slider .@{namespace}table-view-cell{
+// padding:11px 0;
+// > a:not(.@{namespace}btn) {
+// margin-right: 0;
+// }
+//}
+.@{namespace}table-view-inverted {
+ background: #333;
+ color: #fff;
+ .hairline(double, #222, 0); // Double grey border.
+ .@{namespace}table-view-cell{
+ .hairline(single, #222, 15px); // Single grey border with 15px offset.
+ &.@{namespace}active {
+ background-color: #242424;
+ }
+ > a:not(.@{namespace}btn) {
+ &.@{namespace}active {
+ background-color: #242424;
+ }
+ }
+ }
+}
+// Pad each table view item and add dividers
+.@{namespace}table-view-cell {
+ position: relative;
+ padding: 11px 15px;
+ overflow: hidden;
+ //background-color: inherit;//应该透明,否则会盖住ul的边框
+ .hairline(single, #c8c7cc, 15px); // Single grey border with 15px offset.
+ -webkit-touch-callout: none;//禁止长按出现打开菜单;
+ &.@{namespace}radio input[type=radio],&.@{namespace}checkbox input[type=checkbox]{
+ top:8px;
+ }
+ &.@{namespace}radio.@{namespace}left,&.@{namespace}checkbox.@{namespace}left{
+ padding-left: 58px;
+ }
+ &.@{namespace}active {
+ background-color: #eee;
+// >.@{namespace}slider-cell{
+// >.@{namespace}slider-left ~ .@{namespace}slider-handle,>.@{namespace}slider-right ~ .@{namespace}slider-handle{
+// background-color:#eee;
+// }
+// }
+ }
+ // Remove the border from the last table view item
+ &:last-child {
+ //background-image: none;
+ &:before,&:after{
+ height:0;
+ }
+ }
+ // If it's a table view of links, make sure the child takes up full table view item tap area (want to avoid selecting child buttons though)
+ > a:not(.@{namespace}btn) {
+ position: relative;
+ display: block;
+ padding: inherit;
+ margin: -11px -15px; // Make the entire list item tappable.
+ overflow: hidden;
+ color: inherit;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ /*&:active {
+ background-color: #eee;
+ }*/
+ &.@{namespace}active {
+ background-color: #eee;
+ }
+ }
+ p {
+ margin-bottom: 0;
+ }
+// >.@{namespace}slider-cell{
+// margin-top:1px;
+// margin-bottom:1px;
+// >.@{namespace}slider-handle{
+// position:absolute;
+// left:0;
+// right:0;
+// top:0;
+// bottom:0;
+// .transform(translate3d(100%, 0px, 0px));
+// }
+// >.@{namespace}slider-left ~ .@{namespace}slider-handle,>.@{namespace}slider-right ~ .@{namespace}slider-handle{
+// position:relative;
+// z-index:z("default");
+// background-color:#fff;
+// padding-left:15px;
+// left:auto;
+// right:auto;
+// top:auto;
+// bottom:auto;
+// .transform(translate3d(0px, 0px, 0px));
+// }
+// >.@{namespace}slider-left,>.@{namespace}slider-right{
+// top:1px;
+// bottom:1px;
+// }
+// }
+}
+.@{namespace}table-view-cell {
+ &.@{namespace}transitioning{
+ >.@{namespace}slider-handle,>.@{namespace}slider-left .@{namespace}btn,>.@{namespace}slider-right .@{namespace}btn{
+ -webkit-transition: -webkit-transform 300ms ease;
+ transition: transform 300ms ease;
+ }
+ }
+ &.@{namespace}active>.@{namespace}slider-handle{
+ background-color: #eee;
+ }
+ >.@{namespace}slider-handle{
+ background-color: #fff;
+ position: relative;
+ &.@{namespace}navigate-right:after,.@{namespace}navigate-right:after{
+ right: 0;
+ }
+ }
+ >.@{namespace}slider-handle,>.@{namespace}slider-left .@{namespace}btn,>.@{namespace}slider-right .@{namespace}btn{
+ -webkit-transition: -webkit-transform 0ms ease;
+ transition: transform 0ms ease;
+// -webkit-backface-visibility: hidden;
+// backface-visibility: hidden;
+ }
+ >.@{namespace}slider-left,>.@{namespace}slider-right{
+// -webkit-backface-visibility: hidden;
+// backface-visibility: hidden;
+ position: absolute;
+ top: 0;
+ height: 100%;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ >.@{namespace}btn{
+ padding: 0 30px;
+ color: #fff;
+ border-radius:0;
+ border:0;
+// background: #c7c7cc;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ position: relative;
+ left: 0;
+ &:after{
+ content: '';
+ position: absolute;
+ top: 0;
+ width: 600%;
+ height: 100%;
+ background: inherit;
+ z-index: -1;
+ }
+ &.@{namespace}icon{
+ font-size: 30px;
+ }
+ }
+ }
+ >.@{namespace}slider-right{
+ right: 0%;
+ -webkit-transform: translateX(100%);
+ transform: translateX(100%);
+ -webkit-transition: -webkit-transform 0ms ease;
+ transition: transform 0ms ease;
+ }
+ >.@{namespace}slider-left{
+ left: 0;
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%);
+ -webkit-transition: -webkit-transform 0ms ease;
+ transition: transform 0ms ease;
+ > .@{namespace}btn:after{
+ right: 100%;
+ margin-right: -1px;
+ }
+ }
+
+}
+
+// Table view dividers
+// --------------------------------------------------
+
+.@{namespace}table-view-divider {
+ position: relative;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ padding-left: 15px;
+ margin-top: -1px; // Hides the border of the previous list item
+ margin-left: 0;
+ font-weight: @font-weight;
+ color: #999;
+ background-color: #fafafa;
+ .hairline(double, #c8c7cc, 0); // Double (top and bottom) grey border with no offset.
+}
+
+
+// Table-views with media (images,avatars, icons)
+// --------------------------------------------------
+
+.@{namespace}table-view .@{namespace}media,
+.@{namespace}table-view .@{namespace}media-body {
+ overflow: hidden;
+}
+
+.@{namespace}table-view {
+ .@{namespace}media-large .@{namespace}media-object {
+ max-width: 80px;
+ height: 80px;
+ line-height: 80px;
+ }
+ .@{namespace}media .@{namespace}subtitle{
+ color: #000;
+ }
+ .@{namespace}media-object {
+ max-width: 42px;
+ height: 42px;
+ line-height: 42px;
+ &.@{namespace}pull-left {
+ margin-right: 10px;
+ }
+ &.@{namespace}pull-right {
+ margin-left: 10px;
+ }
+ }
+ .@{namespace}table-view-cell.@{namespace}media-icon{
+ .@{namespace}media-object {
+ max-width: 29px;
+ height: 29px;
+ line-height: 29px;
+ margin:-4px 0;
+ img{
+ max-width: 29px;
+ height: 29px;
+ line-height: 29px;
+ }
+ &.@{namespace}pull-left {
+ margin-right: 10px;
+ }
+ .@{namespace}icon{
+ font-size: 29px;
+ }
+ }
+ .@{namespace}media-body{
+ .hairline(single, #c8c7cc, 55px); // single grey border.
+ }
+ &:after{
+ height:0!important;
+ }
+ }
+}
+.@{namespace}table-view.@{namespace}unfold{
+ .@{namespace}table-view-cell.@{namespace}collapse .@{namespace}table-view{
+ display: block;
+ &:before,&:after{
+ height:0!important;
+ }
+ }
+ .@{namespace}table-view-cell.@{namespace}media-icon.@{namespace}collapse{
+ .@{namespace}media-body{
+ .hairline(single, #c8c7cc, 70px); // single grey border.
+ }
+ }
+}
+
+// Table-views with buttons, badges and switchs
+// --------------------------------------------------
+.@{namespace}table-view-cell,
+.@{namespace}table-view-cell > a {
+ > .@{namespace}btn,
+ > .@{namespace}badge,
+ > .@{namespace}switch {
+ position: absolute;
+ top: 50%;
+ right: 15px;
+ .transform(translateY(-50%));
+ }
+
+ // If the cell has a chevron, give some more room.
+ .@{namespace}navigate-right,
+ .@{namespace}push-left,
+ .@{namespace}push-right {
+ > .@{namespace}btn,
+ > .@{namespace}badge,
+ > .@{namespace}switch {
+ right: 35px;
+ }
+ }
+}
+
+// If the table view is the first component, give it extra margin on top.
+.@{namespace}content > .@{namespace}table-view:first-child {
+ margin-top: 15px;
+}
+
+//collapse
+.@{namespace}table-view-cell.@{namespace}collapse{
+ .@{namespace}table-view{
+ &:before,&:after{
+ height:0;
+ }
+ .@{namespace}table-view-cell:last-child:after{
+ height:0;
+ }
+ }
+ //二级列表默认为向下箭头;
+ >.@{namespace}navigate-right:after, >.@{namespace}push-right:after {
+ content: '\e581';
+ }
+
+ &.@{namespace}active{
+ margin-top: -1px;
+ .@{namespace}table-view,.@{namespace}collapse-content{
+ display: block;
+ }
+ //二级列表展开后,变为向上箭头;
+ >.@{namespace}navigate-right:after, >.@{namespace}push-right:after {
+ content: '\e580';
+ }
+ //二级列表展开后,高亮时宽度100%
+ .@{namespace}table-view-cell>a:not(.@{namespace}btn).@{namespace}active{
+ margin-left: -31px;
+ padding-left: 47px;
+ }
+ }
+ .@{namespace}collapse-content{
+ display:none;
+ padding: 8px 15px;
+ margin: 11px -15px -11px;
+ background: white;
+// border: 1px solid #ddd;
+ position: relative;
+ overflow: hidden;
+ -webkit-transition: height .35s ease;
+ -o-transition: height .35s ease;
+ transition: height .35s ease;
+ >.@{namespace}input-group,>.@{namespace}slider{
+ margin:-8px -15px;
+ width:auto;
+ height:auto;
+ }
+ >.@{namespace}slider{
+ margin:-8px -16px;
+ }
+ }
+ .@{namespace}table-view{
+ display: none;
+ margin-bottom: -11px;
+ margin-top: 11px;
+ margin-right: -15px;
+ margin-left:-15px;
+ border: 0;
+ &.@{namespace}table-view-chevron{
+ margin-right:-65px;
+ }
+ .@{namespace}table-view-cell{
+ padding-left: 31px;
+ background-position: 31px 100%;
+ .hairline(single, #c8c7cc, 30px);
+ }
+ }
+}
+//grid
+.@{namespace}table-view.@{namespace}grid-view{
+ display:block;
+ padding:0 10px 10px 0;
+ width:100%;
+ white-space:normal;
+ font-size:0;
+ .@{namespace}table-view-cell{
+ font-size: @font-size-default;
+ display: inline-block;
+ padding:10px 0 0 14px;
+ background:none;
+ text-align:center;
+ vertical-align: middle;
+ margin-right:-4px;
+ .@{namespace}media-object{
+ width:100%;
+ max-width:100%;
+ height: auto;
+ }
+ > a:not(.@{namespace}btn){
+ margin:-10px 0 0 -14px;
+ &:active,&.@{namespace}active{
+ background: none;
+ }
+ }
+ .@{namespace}media-body{
+ display: block;
+ height: 15px;
+ line-height: 15px;
+ color:#333;
+ font-size: 15px;
+ margin-top:8px;
+ width:100%;
+ text-overflow: ellipsis;
+ }
+ &:before,&:after{
+ height:0;
+ }
+ }
+}
+//grid-9
+.@{namespace}grid-view.@{namespace}grid-9{
+ background-color: #f2f2f2;
+ padding: 0;
+ margin:0;
+ border-left:1px solid #EEE;
+ border-top:1px solid #EEE;
+ .clearfix();
+ &:after{
+ position:static;
+ }
+ .@{namespace}table-view-cell {
+ vertical-align: top;
+ padding:11px 15px;
+ margin:0;
+ border-right: 1px solid #EEE;
+ border-bottom: 1px solid #EEE;
+ &.@{namespace}active{
+ background-color:#eee;
+ }
+ > a:not(.@{namespace}btn){
+ padding: 10px 0;
+ margin: 0;
+ }
+ }
+ &:before{
+ height: 0;
+ }
+ .@{namespace}media {
+ color: #797979;
+ .@{namespace}icon{
+ font-size: 2.4em;
+ position: relative;
+ }
+ }
+}
\ No newline at end of file
diff --git a/less/toast.less b/less/toast.less
new file mode 100644
index 00000000..29c3e4a1
--- /dev/null
+++ b/less/toast.less
@@ -0,0 +1,22 @@
+.@{namespace}toast-container {
+ position: fixed;
+ width: 100%;
+ bottom: 50px;
+ z-index: @z-layers-toast;
+ opacity: 0;
+ -webkit-transition: opacity .8s;
+ transition: opacity .8s;
+ &.@{namespace}active{
+ opacity: 1;
+ }
+}
+.@{namespace}toast-message {
+ width: 270px;
+ margin: 5px auto;
+ padding: 5px;
+ background-color: #D8D8D8;
+ text-align: center;
+ color: #000;
+ border-radius: 7px;
+ font-size: 14px;
+}
\ No newline at end of file
diff --git a/less/type.less b/less/type.less
new file mode 100644
index 00000000..4605e7cc
--- /dev/null
+++ b/less/type.less
@@ -0,0 +1,23 @@
+//
+// Typography
+// --------------------------------------------------
+
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 5px;
+ margin-bottom: 5px;
+ line-height: 1;
+}
+h1, .@{namespace}h1 { font-size: 36px; }
+h2, .@{namespace}h2 { font-size: 30px; }
+h3, .@{namespace}h3 { font-size: 24px; }
+h4, .@{namespace}h4 { font-size: 18px; }
+h5, .@{namespace}h5 { font-size: 14px; color: #8f8f94;font-weight: normal; }
+h6, .@{namespace}h6 { font-size: 12px; color: #8f8f94;font-weight: normal; }
+
+// Paragraphs
+p {
+ margin-top: 0;
+ margin-bottom: 10px;
+ font-size: 14px;
+ color: #8f8f94;
+}
diff --git a/less/variables.less b/less/variables.less
new file mode 100644
index 00000000..ea0f2a9f
--- /dev/null
+++ b/less/variables.less
@@ -0,0 +1,85 @@
+//
+// Variables
+// --------------------------------------------------
+@namespace: mui-;
+
+// Type
+// --------------------------------------------------
+@font-family-default: "Helvetica Neue", Helvetica, sans-serif;
+@font-size-default: 17px;
+@font-weight: 500;
+@font-weight-light: 400;
+@line-height-default: 21px;
+
+
+// Colors
+// --------------------------------------------------
+
+// Main theme colors
+//blue theme
+@primary-color: #007aff;
+//green theme
+//@primary-color: #4cd964;
+//@chrome-color: rgba(247,247,247,.98);
+@chrome-color: rgb(247,247,247);
+
+// Action colors
+@default-color: #929292;
+@positive-color: #4cd964;
+@negative-color: #dd524d;
+@warning-color: #f0ad4e;
+@royal-color: #8a6de9;
+@grey-color: #c7c7cc;
+
+
+// Bars
+// --------------------------------------------------
+
+@bar-base-height: 44px;
+@bar-tab-height: 50px;
+@bar-side-spacing: 10px;
+
+
+// Cards
+// --------------------------------------------------
+
+@card-bg: #fff;
+
+
+// Buttons
+// --------------------------------------------------
+
+@button-font-size: 14px;
+
+
+// Transitions
+// --------------------------------------------------
+
+@timing-fuction: cubic-bezier(.1,.5,.1,1); // Inspired by @c2prods
+
+
+// Borders
+// --------------------------------------------------
+
+@border-default: 1px solid #ddd;
+@border-radius: 6px;
+
+// Z-Layers
+// --------------------------------------------------
+@z-layers-default: 1;
+@z-layers-below: -1;
+@z-layers-max: 10000;
+
+@z-layers-bar: 10;
+@z-layers-btn: 20;
+@z-layers-icon: 20;
+
+@z-layers-backdrop: 998;
+@z-layers-modal: 999;
+
+@z-layers-popover: 999;
+@z-layers-arrow: 1000;
+
+@z-layers-scrollbar: 9998;
+
+@z-layers-toast: 9999;
\ No newline at end of file
diff --git a/package.json b/package.json
index c04f112a..ee26f8f6 100644
--- a/package.json
+++ b/package.json
@@ -27,6 +27,7 @@
},
"devDependencies": {
"body-parser": "~1.9.1",
+ "del": "^2.2.0",
"grunt": "~0.4.5",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-concat": "~0.4.0",
@@ -34,6 +35,7 @@
"grunt-contrib-copy": "~0.5.0",
"grunt-contrib-csslint": "~0.2.0",
"grunt-contrib-cssmin": "~0.9.0",
+ "grunt-contrib-handlebars": "~0.8.0",
"grunt-contrib-jshint": "~0.10.0",
"grunt-contrib-sass": "~0.7.3",
"grunt-contrib-uglify": "~0.4.0",
@@ -42,12 +44,25 @@
"grunt-html-validation": "~0.1.17",
"grunt-jekyll": "~0.4.2",
"grunt-jscs": "~1.7.0",
+ "grunt-jsdoc": "~0.5.4",
"grunt-open": "^0.2.3",
"grunt-sed": "~0.1.1",
+ "gulp": "^3.9.0",
+ "gulp-concat": "^2.6.0",
+ "gulp-csscomb": "^3.0.6",
+ "gulp-header": "^1.7.1",
+ "gulp-less": "^3.0.5",
+ "gulp-load-plugins": "^1.2.0",
+ "gulp-minify-css": "^1.2.3",
+ "gulp-plumber": "^1.0.1",
+ "gulp-rename": "^1.2.2",
+ "gulp-size": "^2.0.0",
+ "gulp-uglify": "^1.5.1",
+ "gulp-util": "^3.0.7",
+ "gulp-zip": "^3.0.2",
"load-grunt-tasks": "~0.4.0",
- "time-grunt": "~0.3.1",
- "grunt-jsdoc": "~0.5.4",
- "grunt-contrib-handlebars": "~0.8.0"
+ "run-sequence": "^1.1.5",
+ "time-grunt": "~0.3.1"
},
"engines": {
"node": "~0.10.1"