add sass fork

This commit is contained in:
shockwork 2014-10-03 13:58:24 +02:00
parent 666ec3b040
commit 84e18436d0
26 changed files with 2071 additions and 9 deletions

2
.gitignore vendored
View File

@ -2,6 +2,8 @@
# https://help.github.com/articles/ignoring-files
# Example .gitignore files: https://github.com/github/gitignore
*.log
.sass-cache
Thumbs.db
.DS_Store
/node_modules/

View File

@ -10,16 +10,20 @@ Check out [the demo at this link](http://fezvrasta.github.io/bootstrap-material-
## How to install
BOWER (LESS): bower install bootstrap-material-design --save
BOWER (SASS): bower install bootstrap-material-design-sass --save
NPM (SASS): npm install bootstrap-material-sass --save
GEMS (LESS): gem install bootstrap-material-design
**NB**: the only official repository is the BOWER (LESS) one, the others could (but should not) be outdated.
BOWER: bower install bootstrap-material-design --save
GEMS: gem install bootstrap-material-design
### LESS & SASS
We decided to merge the SASS fork in to the main repository instead of having two seperate ones, [#40](https://github.com/FezVrasta/bootstrap-material-design/issues/40). The default grunt
task will compile the LESS source. To use the SASS base use the SCSS task ```grunt scss```.
**NB** The LESS and SASS bases should reflect each other, right now this project is unstable and under heavy development
so this might not be true before the first stable release.
## Getting started
Navigate to the `template/` folder in this repository, and you will see the `index.html` file, which has the CSS include statements, in the `head` section and the JS includes just before `body` section closes.
Navigate to the `template/` folder in this repository, and you will see the `index.html` file, which has the CSS include statements, in the `head` section and the JS includes just before `body` section closes.
You need to copy the `material/` folder to the root of your project, ensuring that all the files in your project can access the files through the relative URL, supplied in the CSS and the JS includes.
## Todo
@ -31,7 +35,7 @@ You need to copy the `material/` folder to the root of your project, ensuring th
- [Tabs](http://www.polymer-project.org/components/paper-tabs/demo.html)
- [Toggle buttons](http://www.polymer-project.org/components/paper-toggle-button/demo.html)
I'll try to write every component without the need of Javascript but just CSS, and use JS only if strictly needed.
I'll try to write every component without the need of Javascript but just CSS, and use JS only if strictly needed.
More "todo" things can be found in the ISSUES of this repository.
# Support me

View File

@ -17,6 +17,16 @@ module.exports = function(grunt) {
}
},
sass: {
production: {
files: {
"css-compiled/material.css": "sass/material.scss",
"css-compiled/material-wfont.css": "sass/material-wfont.scss",
"css-compiled/ripples.css": "sass/ripples.scss"
}
}
},
autoprefixer: {
options: {
browsers: ["last 3 versions", "ie 8", "ie 9", "ie 10", "ie 11"]
@ -54,8 +64,10 @@ module.exports = function(grunt) {
});
grunt.loadNpmTasks("grunt-contrib-less");
grunt.loadNpmTasks("grunt-contrib-sass");
grunt.loadNpmTasks("grunt-autoprefixer");
grunt.loadNpmTasks("grunt-contrib-cssmin");
grunt.loadNpmTasks("grunt-contrib-copy");
grunt.registerTask("default", ["less", "autoprefixer", "cssmin", "copy"]);
grunt.registerTask("scss", ["sass", "autoprefixer", "cssmin", "copy"]);
};

View File

@ -21,6 +21,7 @@
"grunt-autoprefixer": "^1.0.1",
"grunt-contrib-copy": "^0.6.0",
"grunt-contrib-cssmin": "^0.10.0",
"grunt-contrib-less": "^0.11.4"
"grunt-contrib-less": "^0.11.4",
"grunt-contrib-sass": "^0.8.1"
}
}

98
sass/_alerts.scss Normal file
View File

@ -0,0 +1,98 @@
// main: _material.scss
.alert {
border: 0px;
border-radius: 0;
a, .alert-link {
color: #FFFFFF;
}
}
// Alert buttons
// --------------------------------------------------
.alert-default {
@include alert-variant(#FFFFFF);
a, .alert-link {
color: #000000;
}
}
.alert-primary {
color: #FFFFFF;
@include alert-variant($primary);
}
// Success appears as green
.alert-success {
color: #FFFFFF;
@include alert-variant($success);
}
// Info appears as blue-green
.alert-info {
color: #FFFFFF;
@include alert-variant($info);
}
// Warning appears as orange
.alert-warning {
color: #FFFFFF;
@include alert-variant($warning);
}
// Danger and error appear as red
.alert-danger {
@include alert-variant($danger);
}
// Material shades
.alert-material-red {
@include alert-variant($red)
}
.alert-material-pink {
@include alert-variant($pink);
}
.alert-material-purple {
@include alert-variant($purple);
}
.alert-material-deeppurple {
@include alert-variant($deeppurple);
}
.alert-material-indigo {
@include alert-variant($indigo);
}
.alert-material-lightblue {
@include alert-variant($lightblue);
}
.alert-material-cyan {
@include alert-variant($cyan);
}
.alert-material-teal {
@include alert-variant($teal);
}
.alert-material-lightgreen {
@include alert-variant($lightgreen);
}
.alert-material-lime {
@include alert-variant($lime);
}
.alert-material-lightyellow {
@include alert-variant($lightyellow);
}
.alert-material-orange {
@include alert-variant($orange);
}
.alert-material-deeporange {
@include alert-variant($deeporange);
}
.alert-material-grey {
@include alert-variant($grey);
}
.alert-material-bluegrey {
@include alert-variant($bluegrey);
}
.alert-material-brown {
@include alert-variant($brown);
}
.alert-material-lightgrey {
@include alert-variant($lightgrey);
}

16
sass/_animations.scss Normal file
View File

@ -0,0 +1,16 @@
// main: _material.scss
@keyframes input-highlight {
0% {
left: 20%;
width: 20%;
}
99% {
width: 0;
left: 0;
opacity: 1;
}
100% {
opacity: 0;
}
}

189
sass/_buttons.scss Normal file
View File

@ -0,0 +1,189 @@
// main: _material.scss
@mixin btn-shadow(){
@extend .shadow-z-2;
transition: box-shadow transform 0.28s cubic-bezier(0.4, 0, 0.2, 1);
&:active:not(.btn-link) {
@extend .shadow-z-3;
}
&:hover {
@extend .shadow-z-5;
}
}
.btn {
position: relative;
padding: 8px 30px;
border: 0;
margin: 10px 1px;
cursor: pointer;
border-radius: 4px;
text-transform: uppercase;
text-decoration: none;
color: $darkbg-text;
&:hover {
color: $darkbg-text;
}
&:hover:not(.btn-link) {
@extend .shadow-z-2-hover;
}
transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
&:active:not(.btn-link) {
@extend .shadow-z-3;
}
outline: none !important;
}
// This is needed to style buttons which has not a variation suffix (they must stiled as btn-default)
.btn-link, .btn:not([class^="btn btn-"]), .btn-default {
color: $lightbg-text;
&:hover {
color: $lightbg-text;
}
}
.btn:not([class^="btn btn-"]), .btn-default {
&:hover {
background-color: rgba(255,255,255,0.5);
}
}
.btn-raised {
@include btn-shadow();
}
.open > .dropdown-toggle.btn {
//.variations(#{""}, background-color, $btn-default);
}
.btn-flat {
box-shadow: none !important;
&.btn-default:hover {
background: none;
}
}
.btn-group, .btn-group-vertical {
position: relative;
border-radius: 4px;
margin: 10px 1px;
@include btn-shadow();
&.open .dropdown-toggle {
box-shadow: none;
}
&.btn-group-raised {
@include btn-shadow();
}
.btn, .btn:active, .btn-group {
box-shadow: none !important;
margin: 0;
}
.btn:active .caret { margin-left: -1px; }
}
.btn-group-flat {
box-shadow: none !important;
}
// Floating Action Button (FAB)
.btn-fab {
margin: 0;
padding: 15px;
font-size: 26px;
width: 56px;
height: 56px;
&, &:hover {
//.variations(#{""}, background-color, transparent);
}
&, .ripple-wrapper {
border-radius: 100%;
}
&.btn-mini {
width: 40px;
height: 40px;
padding: 13px;
font-size: 15px;
}
}
// Alert buttons
// --------------------------------------------------
.btn-default {
@include button-variant($btn-default);
}
.btn-primary {
@include button-variant($primary);
}
// Success appears as green
.btn-success {
@include button-variant($success);
}
// Info appears as blue-green
.btn-info {
@include button-variant($info);
}
// Warning appears as orange
.btn-warning {
@include button-variant($warning);
}
// Danger and error appear as red
.btn-danger {
@include button-variant($danger);
}
// Material shades
.btn-material-red {
@include button-variant($red)
}
.btn-material-pink {
@include button-variant($pink);
}
.btn-material-purple {
@include button-variant($purple);
}
.btn-material-deeppurple {
@include button-variant($deeppurple);
}
.btn-material-indigo {
@include button-variant($indigo);
}
.btn-material-lightblue {
@include button-variant($lightblue);
}
.btn-material-cyan {
@include button-variant($cyan);
}
.btn-material-teal {
@include button-variant($teal);
}
.btn-material-lightgreen {
@include button-variant($lightgreen);
}
.btn-material-lime {
@include button-variant($lime);
}
.btn-material-lightyellow {
@include button-variant($lightyellow);
}
.btn-material-orange {
@include button-variant($orange);
}
.btn-material-deeporange {
@include button-variant($deeporange);
}
.btn-material-grey {
@include button-variant($grey);
}
.btn-material-bluegrey {
@include button-variant($bluegrey);
}
.btn-material-brown {
@include button-variant($brown);
}
.btn-material-lightgrey {
@include button-variant($lightgrey);
}

130
sass/_cards.scss Normal file
View File

@ -0,0 +1,130 @@
//
// Cards
// http://www.google.com/design/spec/components/cards.html#cards-usage
//
.card {
@extend .shadow-z-1;
border-radius: 2px;
margin-bottom: 20px; // Same as panel margins
h1, h2, h3, h4, h5, h6 {
font-weight: 100;
margin: 10px 0;
}
.card-body {
padding: 15px;
}
.card-actions {
padding: 15px;
text-transform: uppercase;
.main { font-weight: bold; }
a {
font-size: 15px;
margin: 0 15px 0 0;
&:hover {
text-decoration: none;
}
}
}
img {
max-width:100%;
max-height:100%;
}
.card-footer {
padding: 15px;
border-top: 1px solid;
border-color: $lightgrey;
.icon {
font-size: 25px;
transition: ease transform 0.5s;
&:hover { text-decoration: none; transform: transform3d(0, 0, 0, -1px)}
}
}
}
// Alert buttons
// --------------------------------------------------
.card-default {
@include card-variant($btn-default, #000, darken($btn-default, 10%));
}
.card-primary {
@include card-variant($primary, #FFFFFF, $lightgrey);
}
// Success appears as green
.card-success {
@include card-variant($success, #FFFFFF, darken($success, 10%));
}
// Info appears as blue-green
.card-info {
@include card-variant($info, #FFFFFF, darken($info, 10%));
}
// Warning appears as orange
.card-warning {
@include card-variant($warning, #FFFFFF, lighten($warning, 10%));
}
// Danger and error appear as red
.card-danger {
@include card-variant($danger, #FFFFFF, darken($danger, 10%));
}
// Material shades
.card-material-red {
@include card-variant($red, #FFFFFF, lighten($red, 10%))
}
.card-material-pink {
@include card-variant($pink, #FFFFFF, darken($pink, 10%));
}
.card-material-purple {
@include card-variant($purple, #FFFFFF, darken($purple, 10%));
}
.card-material-deeppurple {
@include card-variant($deeppurple, #FFFFFF, lighten($deeppurple, 10%));
}
.card-material-indigo {
@include card-variant($indigo, #FFFFFF, lighten($indigo, 10%));
}
.card-material-lightblue {
@include card-variant($lightblue, #fff, darken($lightblue, 10%));
}
.card-material-cyan {
@include card-variant($cyan, #FFFFFF, darken($cyan, 10%));
}
.card-material-teal {
@include card-variant($teal, #FFFFFF, darken($teal, 10%));
}
.card-material-lightgreen {
@include card-variant($lightgreen, #FFFFFF, darken($lightgreen, 10%));
}
.card-material-lime {
@include card-variant($lime, #FFFFFF, darken($lime, 10%));
}
.card-material-lightyellow {
@include card-variant($lightyellow, darken($lightyellow, 60%), darken($lightyellow, 10%));
}
.card-material-orange {
@include card-variant($orange, #FFFFFF, darken($orange, 10%));
}
.card-material-deeporange {
@include card-variant($deeporange, #FFFFFF, darken($deeporange, 10%));
}
.card-material-grey {
@include card-variant($grey, #FFFFFF, darken($grey, 10%));
}
.card-material-bluegrey {
@include card-variant($bluegrey, #FFFFFF, darken($bluegrey, 10%));
}
.card-material-brown {
@include card-variant($brown, #FFFFFF, lighten($brown, 10%));
}
.card-material-lightgrey {
@include card-variant($lightgrey, darken(#FFFFFF, 10%), darken($lightgrey, 10%));
}

191
sass/_checkboxes.scss Normal file
View File

@ -0,0 +1,191 @@
// main: _material.scss
.form-horizontal .checkbox {
padding-top: 15px;
}
.checkbox {
transform: rotate(0deg);
label {
cursor: pointer;
padding-left: 45px;
position: relative;
span {
display: block;
position: absolute;
left: 0px;
transition-duration: 0.2s;
}
.check:after {
display: block;
position: absolute;
content: "";
background-color: $lightbg-text;
left: -5px;
top: -15px;
height: 50px;
width: 50px;
border-radius: 100%;
z-index: 1;
opacity: 0;
margin: 0;
}
.check:before {
display: block;
content: "";
border: 2px solid $lightbg-text;
height: 20px;
width: 20px;
transition-delay: 0.2s;
}
}
// Variations
//.variations(#{" .check"}, color, $success);
// Hide native checkbox
input[type=checkbox] { opacity: 0; }
input[type=checkbox] ~ .check:before {
position: absolute;
top: 2px;
left: 11px;
width: 18px;
height: 18px;
border: solid 2px;
border-color: #5a5a5a;
animation: uncheck 300ms ease-out forwards;
}
input[type=checkbox]:focus ~ .check:after {
opacity: 0.2;
}
input[type=checkbox]:checked ~ .check:before {
animation: check 300ms ease-out forwards;
}
// Ripple effect on click
input[type=checkbox]:not(:checked) ~ .check:after {
animation: rippleOff 500ms linear forwards;
}
input[type=checkbox]:checked ~ .check:after {
animation: rippleOn 500ms linear forwards;
}
// Make animate quickly when not hover
&:not(:hover) input[type=checkbox] ~ .check {
&:before, &:after {
animation-duration: 1ms;
}
}
// Style for disabled inputs
input[type=checkbox][disabled]:not(:checked) ~ .check:before {
opacity: 0.5;
}
input[type=checkbox][disabled] ~ .check:after {
background-color: $lightbg-text;
transform: rotate(-45deg);
}
//.variations(#{" input[type=checkbox]:checked ~ .check:after"}, background-color, $success);
}
@keyframes uncheck {
0% {
top: -3px;
left: 17px;
width: 10px;
height: 21px;
border-color: #0f9d58;
border-left-color: transparent;
border-top-color: transparent;
transform: rotate(45deg);
}
50% {
top: 14px;
left: 17px;
width: 4px;
height: 4px;
transform: rotate(45deg);
border-color: #0f9d58;
border-left-color: transparent;
border-top-color: transparent;
}
51% {
border-color: #5a5a5a;
border-left-color: #5a5a5a;
border-top-color: #5a5a5a;
}
100% {
top: 1px;
left: 12px;
width: 18px;
height: 18px;
transform: rotate(0deg);
border-color: #5a5a5a;
border-left-color: #5a5a5a;
border-top-color: #5a5a5a;
}
}
@keyframes check {
100% {
top: -3px;
left: 17px;
width: 10px;
height: 21px;
transform: rotate(45deg);
border-color: #0f9d58;
border-left-color: transparent;
border-top-color: transparent;
}
51% {
border-left: transparent;
border-top-color: transparent;
}
50% {
top: 14px;
left: 17px;
width: 4px;
height: 4px;
transform: rotate(45deg);
border-color: #5a5a5a;
border-left-color: #5a5a5a;
border-top-color: #5a5a5a;
}
0% {
top: 1px;
left: 12px;
width: 18px;
height: 18px;
transform: rotate(0deg);
border-color: #5a5a5a;
border-left-color: #5a5a5a;
border-top-color: #5a5a5a;
}
}
@keyframes rippleOn {
0% {
opacity: 0;
}
50% {
opacity: 0.2;
}
100% {
opacity: 0;
}
}
@keyframes rippleOff {
0% {
opacity: 0;
}
50% {
opacity: 0.2;
}
100% {
opacity: 0;
}
}

82
sass/_icons.scss Normal file
View File

@ -0,0 +1,82 @@
// main: _material.scss
.icon {}
// Navbar alternate
// --------------------------------------------------
.icon-default {
@include icon-variant($lightbg-text);
}
.icon-primary {
@include icon-variant($primary);
}
// Success appears as green
.icon-success {
@include icon-variant($success);
}
// Info appears as blue-green
.icon-info {
@include icon-variant($info);
}
// Warning appears as orange
.icon-warning {
@include icon-variant($warning);
}
// Danger and error appear as red
.icon-danger {
@include icon-variant($danger);
}
// Material shades
.icon-material-red {
@include icon-variant($red)
}
.icon-material-pink {
@include icon-variant($pink);
}
.icon-material-purple {
@include icon-variant($purple);
}
.icon-material-deeppurple {
@include icon-variant($deeppurple);
}
.icon-material-indigo {
@include icon-variant($indigo);
}
.icon-material-lightblue {
@include icon-variant($lightblue);
}
.icon-material-cyan {
@include icon-variant($cyan);
}
.icon-material-teal {
@include icon-variant($teal);
}
.icon-material-lightgreen {
@include icon-variant($lightgreen);
}
.icon-material-lime {
@include icon-variant($lime);
}
.icon-material-lightyellow {
@include icon-variant($lightyellow);
}
.icon-material-orange {
@include icon-variant($orange);
}
.icon-material-deeporange {
@include icon-variant($deeporange);
}
.icon-material-grey {
@include icon-variant($grey);
}
.icon-material-bluegrey {
@include icon-variant($bluegrey);
}
.icon-material-brown {
@include icon-variant($brown);
}
.icon-material-lightgrey {
@include icon-variant($lightgrey);
}

214
sass/_inputs.scss Normal file
View File

@ -0,0 +1,214 @@
// main: _material.scss
fieldset[disabled] .form-control, .form-control-wrapper .form-control, .form-control {
&, &:focus, &.focus {
&:not(textarea):not(select) {
height: 28px;
}
padding: 0;
float: none;
border: 0;
box-shadow: none;
border-radius: 0;
background: transparent;
border-bottom: 1px solid #757575;
&:disabled {
border-style: dashed;
}
}
}
select.form-control {
height: 23px;
}
select[multiple].form-control {
&, &:focus, &.focus {
height: 85px;
}
}
.form-control-wrapper {
position: relative;
.form-control:focus, .form-control.focus {
outline: none;
}
.floating-label {
color: #7E7E7E;
font-size: 14px;
position: absolute;
pointer-events: none;
left: 0px;
top: 5px;
transition: 0.2s ease all;
opacity: 0;
}
.form-control:not(.empty) ~ .floating-label {
top: -10px;
font-size: 10px;
opacity: 1;
}
.form-control:focus:invalid ~ .floating-label, .form-control.focus:invalid ~ .floating-label {
color: $input-danger;
}
.form-control:focus ~ .material-input:after, .form-control.focus ~ .material-input:after {
background-color: $input-default;
}
.form-control:focus:invalid ~ .material-input, .form-control.focus:invalid ~ .material-input {
&:before, &:after {
background-color: $input-danger;
}
}
.form-control.empty ~ .floating-label {
opacity: 1;
}
.material-input:before {
position: absolute;
content: "";
width: 100%;
left: 0;
height: 2px;
background-color: $input-default;
bottom: -1px;
transform: scaleX(0);
transition: transform 0s;
}
.form-control:focus ~ .material-input:before, .form-control.focus ~ .material-input:before {
transform: scaleX(1);
transition: transform 0.2s ease-out;
}
.material-input:after {
content: "";
position: absolute;
height: 18px;
width: 100px;
margin-top: -1px;
top: 7px;
left: 0;
pointer-events: none;
opacity: 0.9;
transform-origin: left;
}
.input-lg ~ .material-input:after {
height: 26px;
}
textarea { resize: none; }
textarea ~ .form-control-highlight {
margin-top: -11px;
}
/* active state */
.form-control:focus ~ .material-input:after, .form-control.focus ~ .material-input:after {
animation: input-highlight 0.3s ease;
animation-fill-mode: forwards;
opacity: 0;
}
select ~ .material-input:after {
display: none;
}
}
.form-group {
&.has-warning {
.material-input:before, input.form-control:focus ~ .material-input:after, input.form-control.focus ~ .material-input:after {
background: $input-warning;
}
.control-label, input.form-control:not(.empty) ~ .floating-label {
color: $input-warning;
}
}
&.has-error {
.material-input:before, input.form-control:focus ~ .material-input:after, input.form-control.focus ~ .material-input:after {
background: $input-danger;
}
.control-label, input.form-control:not(.empty) ~ .floating-label {
color: $input-danger;
}
}
&.has-success {
.material-input:before, input.form-control:focus ~ .material-input:after, input.form-control.focus ~ .material-input:after {
background: $input-success;
}
.control-label, input.form-control:not(.empty) ~ .floating-label {
color: $input-success;
}
}
&.has-info {
.material-input:before, input.form-control:focus ~ .material-input:after, input.form-control.focus ~ .material-input:after {
background: $input-info;
}
.control-label, input.form-control:not(.empty) ~ .floating-label {
color: $input-info;
}
}
//.variations(#{" .material-input:before"}, background-color, $indigo);
//.variations(#{" input.form-control:focus ~ .material-input:after"}, background-color, $indigo);
//.variations(#{" input.form-control.focus ~ .material-input:after"}, background-color, $indigo);
//.variations(#{" .control-label"}, color, $lightbg-text);
//.variations(#{" input.form-control:not(.empty) ~ .floating-label"}, color, $indigo);
}
.input-group {
.form-control-wrapper {
.form-control {
float: none;
}
margin-right: 5px;
margin-left: 5px;
bottom: -10px;
}
.input-group-addon {
border: 0;
}
.input-group-btn .btn {
border-radius: 4px;
}
}
select.form-control {
border: 0;
box-shadow: none;
border-bottom: 1px solid #757575;
border-radius: 0;
&:focus, &.focus {
box-shadow: none;
border-color: #757575;
}
}
@mixin keyframe-input-highlight(){
0% {
left: 20%;
transform: scaleX(20%);
}
99% {
transform: scaleX(0);
left: 0;
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes input-highlight {
@include keyframe-input-highlight()
}
// Input files (kinda hack)
.form-control-wrapper input[type=file] {
opacity: 0;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100;
}

84
sass/_lists.scss Normal file
View File

@ -0,0 +1,84 @@
// main: _material.scss
.list-group {
border-radius: 0;
.list-group-item {
background-color: transparent;
overflow: hidden;
border: 0;
border-radius: 0;
padding: 0 16px;
.row-picture, .row-action-primary {
float: left;
display: inline-block;
padding-right: 16px;
img, i, label {
display: block;
width: 56px;
height: 56px;
}
img {
background: rgba(0,0,0,0.1);
padding: 1px;
&.circle {
border-radius: 100%;
}
}
i {
background: rgba(0,0,0,0.25);
border-radius: 100%;
text-align: center;
line-height: 56px;
font-size: 20px;
color: white;
}
label {
margin-left: 7px;
margin-right: -7px;
margin-top: 5px;
margin-bottom: -5px;
}
}
.row-content {
display: inline-block;
width: #{"calc(100% - 92px)"};
min-height: 66px;
.action-secondary {
position: absolute;
right: 16px;
top: 16px;
i {
font-size: 20px;
color: rgba(0,0,0,0.25);
cursor: pointer;
}
}
.action-secondary ~ * {
max-width: #{"calc(100% - 30px)"};
}
.least-content {
position: absolute;
right: 16px;
top: 0px;
color: rgba(0,0,0,0.54);
font-size: 14px;
}
}
.list-group-item-heading {
color: rgba(0, 0, 0, 0.77);
font-size: 20px;
line-height: 29px;
}
}
.list-group-separator {
clear: both;
overflow: hidden;
margin-top: 10px;
margin-bottom: 10px;
&:before {
content: "";
width: #{"calc(100% - 90px)"};
border-bottom: 1px solid rgba(0,0,0,0.1);
float: right;
}
}
}

26
sass/_mixins.scss Normal file
View File

@ -0,0 +1,26 @@
@mixin card-variant($background, $color, $border) {
background-color: $background;
.card-footer, .card-header { border-color: $border; }
color: $color;
a { color: $color }
}
@mixin button-variant($color) {
background-color: $color;
};
@mixin alert-variant($color) {
background-color: $color;
};
@mixin progress-bar-variant($color) {
background-color: $color;
};
@mixin navbar-variant($color) {
background-color: $color;
};
@mixin icon-variant($color) {
color: $color;
}

288
sass/_navbar.scss Normal file
View File

@ -0,0 +1,288 @@
// main: _material.scss
.navbar {
background-color: $navbar-default-bg;
border: 0;
border-radius: 0;
.navbar-brand {
position: relative;
height: 60px;
line-height: 30px;
color: $navbar-brand-color;
&:hover,
&:focus {
color: $navbar-brand-color;
background-color: transparent;
}
}
.navbar-text {
color: $navbar-color;
margin-top: 20px;
margin-bottom: 20px;
}
.navbar-nav {
> li > a {
color: $navbar-link-color;
padding-top: 20px;
padding-bottom: 20px;
&:hover,
&:focus {
color: $navbar-link-hover-color;
background-color: $navbar-link-hover-bg;
}
}
> .active > a {
&,
&:hover,
&:focus {
color: $navbar-link-active-color;
background-color: $navbar-link-active-bg;
}
}
> .disabled > a {
&,
&:hover,
&:focus {
color: $navbar-link-disabled-color;
background-color: $navbar-link-disabled-bg;
}
}
}
// Darken the responsive nav toggle
.navbar-toggle {
border-color: $navbar-toggle-border-color;
&:hover,
&:focus {
background-color: $navbar-toggle-hover-bg;
}
.icon-bar {
background-color: $navbar-toggle-icon-bar-bg;
}
}
.navbar-collapse,
.navbar-form {
border-color: rgba(0,0,0,0.1);
}
// Dropdowns
.navbar-nav {
> .open > a {
&,
&:hover,
&:focus {
background-color: $navbar-link-active-bg;
color: $navbar-link-active-color;
}
}
@media (max-width: 767px) {
// Dropdowns get custom display
.open .dropdown-menu {
> .dropdown-header {
border: 0;
color: darken($navbar-link-color, 17%)
}
.divider {
background-color: $navbar-border;
}
> li > a {
color: $navbar-link-color;
&:hover,
&:focus {
color: $navbar-link-hover-color;
background-color: $navbar-link-hover-bg;
}
}
> .active > a {
&,
&:hover,
&:focus {
color: $navbar-link-active-color;
background-color: $navbar-link-active-bg;
}
}
> .disabled > a {
&,
&:hover,
&:focus {
color: $navbar-link-disabled-color;
background-color: $navbar-link-disabled-bg;
}
}
}
}
}
.navbar-link {
color: $navbar-link-color;
&:hover {
color: $navbar-link-hover-color;
}
}
.navbar-link {
color: $navbar-link-color;
&:hover,
&:focus {
color: $navbar-link-hover-color;
}
&[disabled],
fieldset[disabled] & {
&:hover,
&:focus {
color: $navbar-link-disabled-color;
}
}
}
.navbar-form {
margin-top: 16px;
.form-control-wrapper .form-control, .form-control {
border-color: $navbar-border;
color: $navbar-border;
}
.form-control-wrapper {
.material-input:before, input:focus ~ .material-input:after {
background-color: $navbar-border;
}
}
::-webkit-input-placeholder { color: $navbar-border; }
:-moz-placeholder { color: $navbar-border; };
::-moz-placeholder { color: $navbar-border; };
:-ms-input-placeholder { color: $navbar-border; };
}
}
.navbar-inverse {
background-color: $indigo;
}
.navbar-white {
background-color: #FFF;
.navbar-brand, .navbar-brand:hover, .navbar-brand:focus {
color: $lightbg-text;
}
.navbar-nav {
& > li > a {
color: $lightbg-text;
&:hover,
&:focus {
color: $lightbg-text;
background-color: $navbar-link-hover-bg;
}
}
& > .active > a {
&,
&:hover,
&:focus {
color: $lightbg-text;
background-color: $navbar-link-active-bg;
}
}
& > .disabled > a {
&,
&:hover,
&:focus {
color: $lightbg-text;
background-color: $navbar-link-disabled-bg;
}
}
& > .open > a {
&,
&:hover,
&:focus {
background-color: $navbar-link-active-bg;
color: $lightbg-text;
}
}
}
}
// Navbar alternate
// --------------------------------------------------
.navbar-default {
@include navbar-variant($primary);
}
.navbar-primary {
@include navbar-variant($primary);
}
// Success appears as green
.navbar-success {
@include navbar-variant($success);
}
// Info appears as blue-green
.navbar-info {
@include navbar-variant($info);
}
// Warning appears as orange
.navbar-warning {
@include navbar-variant($warning);
}
// Danger and error appear as red
.navbar-danger {
@include navbar-variant($danger);
}
// Material shades
.navbar-material-red {
@include navbar-variant($red)
}
.navbar-material-pink {
@include navbar-variant($pink);
}
.navbar-material-purple {
@include navbar-variant($purple);
}
.navbar-material-deeppurple {
@include navbar-variant($deeppurple);
}
.navbar-material-indigo {
@include navbar-variant($indigo);
}
.navbar-material-lightblue {
@include navbar-variant($lightblue);
}
.navbar-material-cyan {
@include navbar-variant($cyan);
}
.navbar-material-teal {
@include navbar-variant($teal);
}
.navbar-material-lightgreen {
@include navbar-variant($lightgreen);
}
.navbar-material-lime {
@include navbar-variant($lime);
}
.navbar-material-lightyellow {
@include navbar-variant($lightyellow);
}
.navbar-material-orange {
@include navbar-variant($orange);
}
.navbar-material-deeporange {
@include navbar-variant($deeporange);
}
.navbar-material-grey {
@include navbar-variant($grey);
}
.navbar-material-bluegrey {
@include navbar-variant($bluegrey);
}
.navbar-material-brown {
@include navbar-variant($brown);
}
.navbar-material-lightgrey {
@include navbar-variant($lightgrey);
}

View File

@ -0,0 +1,103 @@
// main: _material.scss
.noUi-target,
.noUi-target * {
-webkit-touch-callout: none;
-ms-touch-action: none;
user-select: none;
box-sizing: border-box;
}
.noUi-base {
width: 100%;
height: 100%;
position: relative;
}
.noUi-origin {
position: absolute;
right: 0;
top: 0;
left: 0;
bottom: 0;
}
.noUi-handle {
position: relative;
z-index: 1;
box-sizing: border-box;
}
.noUi-stacking .noUi-handle {
z-index: 10;
}
.noUi-stacking + .noUi-origin {
*z-index: -1;
}
.noUi-state-tap .noUi-origin {
transition: left 0.3s, top 0.3s;
}
.noUi-state-drag * {
cursor: inherit !important;
}
.noUi-horizontal {
height: 10px;
}
.noUi-horizontal .noUi-handle {
box-sizing: border-box;
width: 12px;
height: 12px;
left: -10px;
top: -5px;
}
.noUi-horizontal.noUi-extended {
padding: 0 15px;
}
.noUi-horizontal.noUi-extended .noUi-origin {
right: -15px;
}
.noUi-background {
height: 2px;
margin: 20px 0;
}
.noUi-origin {
margin: 0;
border-radius: 0;
height: 2px;
background: #c8c8c8;
&[style^="left: 0"] .noUi-handle {
background-color: #fff;
border: 2px solid #c8c8c8;
&.noUi-active {
border-width: 1px;
}
}
}
.noUi-target {
border-radius: 2px;
}
.noUi-handle {
border-radius: 100%;
cursor: default;
transition: all 0.2s ease-out;
border: 1px solid;
}
.noUi-horizontal {
height: 2px;
margin: 15px 0;
}
.noUi-horizontal .noUi-handle.noUi-active {
transform: scale(2.5);
}
[disabled].noUi-slider{
opacity: 0.5;
}
[disabled] .noUi-handle {
cursor: not-allowed;
}
.slider {
background: #c8c8c8;
}
.slider {
//.variations(#{".noUi-connect"}, background-color, $primary);
//.variations(#{" .noUi-connect"}, background-color, $primary);
//.variations(#{" .noUi-handle"}, background-color, $primary);
//.variations(#{" .noUi-handle"}, border-color, $primary);
}

View File

@ -0,0 +1,34 @@
// main: _material.scss
// Support for SnackbarJS plugin
// https://github.com/FezVrasta/snackbarjs
.snackbar {
// Style
background-color: #323232;
color: $darkbg-text;
font-size: 14px;
border-radius: 2px;
@extend .shadow-z-1;
// Animation
height: 0;
transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s;
transform: translateY(200%);
}
.snackbar.snackbar-opened {
// Style
padding: 14px 15px;
margin-bottom: 20px;
// Animation
height: auto;
transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s;
transform: none;
}
// Variations
.snackbar.toast {
border-radius: 200px;
}

27
sass/_popups.scss Normal file
View File

@ -0,0 +1,27 @@
// main: _material.scss
.popover, .tooltip-inner {
background: #323232;
color: #FFF;
border-radius: 2px;
}
.tooltip, .tooltip.in {
opacity: 1;
}
.popover, .tooltip {
&.left .arrow:after, &.left .tooltip-arrow {
border-left-color: #323232;
}
&.right .arrow:after, &.right .tooltip-arrow {
border-right-color: #323232;
}
&.top .arrow:after, &.top .tooltip-arrow {
border-top-color: #323232;
}
&.bottom .arrow:after, &.bottom .tooltip-arrow {
border-bottom-color: #323232;
}
}

91
sass/_progress.scss Normal file
View File

@ -0,0 +1,91 @@
// main: _material.scss
.progress {
height: 4px;
border-radius: 0;
box-shadow: none;
background: #c8c8c8;
.progress-bar {
box-shadow: none;
}
// Alert buttons
// --------------------------------------------------
.progress-bar-default {
@include progress-bar-variant($primary);
}
.progress-bar-primary {
@include progress-bar-variant($primary);
}
// Success appears as green
.progress-bar-success {
@include progress-bar-variant($success);
}
// Info appears as blue-green
.progress-bar-info {
@include progress-bar-variant($info);
}
// Warning appears as orange
.progress-bar-warning {
@include progress-bar-variant($warning);
}
// Danger and error appear as red
.progress-bar-danger {
@include progress-bar-variant($danger);
}
// Material shades
.progress-bar-material-red {
@include progress-bar-variant($red)
}
.progress-bar-material-pink {
@include progress-bar-variant($pink);
}
.progress-bar-material-purple {
@include progress-bar-variant($purple);
}
.progress-bar-material-deeppurple {
@include progress-bar-variant($deeppurple);
}
.progress-bar-material-indigo {
@include progress-bar-variant($indigo);
}
.progress-bar-material-lightblue {
@include progress-bar-variant($lightblue);
}
.progress-bar-material-cyan {
@include progress-bar-variant($cyan);
}
.progress-bar-material-teal {
@include progress-bar-variant($teal);
}
.progress-bar-material-lightgreen {
@include progress-bar-variant($lightgreen);
}
.progress-bar-material-lime {
@include progress-bar-variant($lime);
}
.progress-bar-material-lightyellow {
@include progress-bar-variant($lightyellow);
}
.progress-bar-material-orange {
@include progress-bar-variant($orange);
}
.progress-bar-material-deeporange {
@include progress-bar-variant($deeporange);
}
.progress-bar-material-grey {
@include progress-bar-variant($grey);
}
.progress-bar-material-bluegrey {
@include progress-bar-variant($bluegrey);
}
.progress-bar-material-brown {
@include progress-bar-variant($brown);
}
.progress-bar-material-lightgrey {
@include progress-bar-variant($lightgrey);
}
}

97
sass/_radios.scss Normal file
View File

@ -0,0 +1,97 @@
// main: _material.scss
.form-horizontal .radio {
margin-bottom: 10px;
}
.radio {
label {
cursor: pointer;
padding-left: 45px;
position: relative;
span {
display: block;
position: absolute;
left: 10px;
top: 2px;
transition-duration: 0.2s;
}
.circle {
border: 2px solid $lightbg-text;
height: 15px;
width: 15px;
border-radius: 100%;
}
.check {
height: 15px;
width: 15px;
border-radius: 100%;
background-color: $radio-default;
transform: scale(0);
}
.check:after {
display: block;
position: absolute;
content: "";
background-color: $lightbg-text;
left: -18px;
top: -18px;
height: 50px;
width: 50px;
border-radius: 100%;
z-index: 1;
opacity: 0;
margin: 0;
transform: scale(1.5);
}
input[type=radio]:not(:checked) ~ .check:after {
animation: rippleOff 500ms;
}
input[type=radio]:checked ~ .check:after {
animation: rippleOn 500ms;
}
}
//.variations(#{" input[type=radio]:checked ~ .check"}, background-color, $radio-default);
//.variations(#{" input[type=radio]:checked ~ .circle"}, border-color, $radio-default);
input[type=radio][disabled] ~ .check,
input[type=radio][disabled] ~ .circle {
opacity: 0.5;
}
input[type=radio] { display: none; }
input[type=radio]:checked ~ .check {
transform: scale(0.55);
}
input[type=radio][disabled] ~ .circle {
border-color: $lightbg-text;
}
input[type=radio][disabled] ~ .check {
background-color: $lightbg-text;
}
}
@keyframes rippleOn {
0% {
opacity: 0;
}
50% {
opacity: 0.2;
}
100% {
opacity: 0;
}
}
@keyframes rippleOff {
0% {
opacity: 0;
}
50% {
opacity: 0.2;
}
100% {
opacity: 0;
}
}

31
sass/_shadows.scss Normal file
View File

@ -0,0 +1,31 @@
// main: _material.scss
.shadow-z-1 {
box-shadow: 0 1px 3px rgba(0,0,0, .12),
0 1px 2px rgba(0,0,0, .24) ;
}
.shadow-z-2 {
box-shadow: 0 3px 6px rgba(0,0,0, .16),
0 3px 6px rgba(0,0,0, .23) ;
}
.shadow-z-2-hover {
box-shadow: 0 3px 6px rgba(0,0,0, .20),
0 3px 6px rgba(0,0,0, .28) ;
}
.shadow-z-3 {
box-shadow: 0 10px 20px rgba(0,0,0, .19),
0 6px 6px rgba(0,0,0, .23) ;
}
.shadow-z-4 {
box-shadow: 0 14px 28px rgba(0,0,0, .25),
0 10px 10px rgba(0,0,0, .22) ;
}
.shadow-z-5 {
box-shadow: 0 19px 38px rgba(0,0,0, .30),
0 15px 12px rgba(0,0,0, .22) ;
}

26
sass/_tabs.scss Normal file
View File

@ -0,0 +1,26 @@
// main: _material.scss
.nav-tabs {
background: $navbar-default-bg;
> li {
> a {
color: #FFFFFF;
border: 0;
margin: 0;
&:hover {
background: transparent;
border: 0;
}
}
&.active > a, &.active > a:hover, &.open > a, &.open > a:hover {
background: transparent !important;
border: 0 !important;
color: #FFFFFF !important;
font-weight: 500;
}
&.disabled > a, &.disabled > a:hover {
color: rgba(255,255,255,0.5);
}
}
}

101
sass/_variables.scss Normal file
View File

@ -0,0 +1,101 @@
// main: _material.scss
// Material colors palette
$red: #F44336;
$pink: #E91E63;
$purple: #9C27B0;
$deeppurple: #673AB7;
$indigo: #3F51B5;
$lightblue: #03A9F4;
$cyan: #00BCD4;
$teal: #009688;
$lightgreen: #8BC34A;
$lime: #CDDC39;
$lightyellow: #FFEB3B;
$orange: #FF9800;
$deeporange: #FF5722;
$grey: #9E9E9E;
$bluegrey: #607D8B;
$brown: #795548;
$lightgrey: #ECECEC;
// Bootstrap shades
$primary: #4285F4;
$success: #0F9D58;
$info: $lightblue;
$warning: $deeporange;
$danger: $red;
// Typography elements for Material
$darkbg-text: rgba(255,255,255,0.84);
$lightbg-text: rgba(0,0,0,0.84);
$icon-color: rgba(0,0,0,0.5);
// Bootstrap variables
$btn-default: #FFF;
$btn-default-text: $lightbg-text;
$btn-primary: $primary;
$btn-primary-text: $darkbg-text;
$btn-success: $success;
$btn-success-text: $darkbg-text;
$btn-info: $info;
$btn-info-text: $darkbg-text;
$btn-warning: $warning;
$btn-warning-text: $darkbg-text;
$btn-danger: $danger;
$btn-danger-text: $darkbg-text;
$input-unchecked: rgba(137, 137, 137, 0.3);
$input-checked: rgba(15, 157, 88, 0.3);
$radio-default: $lightbg-text;
$radio-primary: $primary;
$radio-success: $success;
$radio-info: $info;
$radio-warning: $warning;
$radio-danger: $danger;
$input-danger: $danger;
$input-default: #5264AE;
$input-warning: $warning;
$input-success: $success;
$input-info: $info;
$navbar-danger-bg: $danger;
$navbar-inverse-bg: #5264AE;
$navbar-warning-bg: $warning;
$navbar-success-bg: $success;
$navbar-info-bg: $info;
$navbar-default-bg: $primary;
$navbar-color: $darkbg-text;
$navbar-link-color: $darkbg-text;
$navbar-link-hover-color: $darkbg-text;
$navbar-link-hover-bg: transparent;
$navbar-link-active-color: $darkbg-text;
$navbar-link-active-bg: rgba(0,0,0,0.05);
$navbar-link-disabled-color: #E5E5E5;
$navbar-link-disabled-bg: transparent;
$navbar-brand-color: $darkbg-text;
$navbar-toggle-border-color: $darkbg-text;
$navbar-toggle-hover-bg: transparent;
$navbar-toggle-icon-bar-bg: $darkbg-text;
$navbar-border: $darkbg-text;
$alert-success: $success;
$alert-info: $info;
$alert-warning: $warning;
$alert-danger: $danger;
$progress-success: $success;
$progress-info: $info;
$progress-warning: $warning;
$progress-danger: $danger;

66
sass/_welljumbo.scss Normal file
View File

@ -0,0 +1,66 @@
// main: _material.scss
body, .container, .container-fluid {
.well, .well:not([class^="well well-material-"]) {
&, .form-control {
color: $lightbg-text;
}
.floating-label {
color: #7e7e7e;
}
.form-control {
border-bottom-color: #7e7e7e;
&::-webkit-input-placeholder {
color: #7e7e7e;
}
&::-moz-placeholder {
color: #7e7e7e;
opacity: 1;
}
&:-ms-input-placeholder {
color: #7e7e7e;
}
}
.option, .create {
color: $lightbg-text;
}
}
[class^="well well-material-"] {
&, .form-control, .floating-label {
color: $darkbg-text;
}
.form-control {
border-bottom-color: $darkbg-text;
&::-webkit-input-placeholder {
color: $darkbg-text;
}
&::-moz-placeholder {
color: $darkbg-text;
opacity: 1;
}
&:-ms-input-placeholder {
color: $darkbg-text;
}
}
// Rule to fix selectize plugin
.option, .create {
color: $lightbg-text;
}
}
.well, .jumbotron {
background-color: #fff;
padding: 19px;
margin-bottom: 20px;
@extend .shadow-z-2;
border-radius: 2px;
border: 0;
p {
font-weight: 300;
}
// .variations(#{""}, background-color, #FFF);
}
}

2
sass/material-wfont.scss Normal file
View File

@ -0,0 +1,2 @@
@import url(//fonts.googleapis.com/css?family=Roboto+Condensed:300italic,400italic,700italic,400,700,300|Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic);
@import "material.scss";

113
sass/material.scss Normal file
View File

@ -0,0 +1,113 @@
// Material Theme 0.0.1
// -----------------------------------------------------
@import "_variables.scss";
@import "_mixins.scss";
@import "_animations.scss";
@import "_shadows.scss";
body {
background-color: #EEEEEE;
&.inverse {
background: #333333;
&, .form-control {
color: $darkbg-text;
}
}
}
body, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
// Well and Jumbotrons
@import "_welljumbo.scss";
// Buttons
@import "_buttons.scss";
// Checkboxes
@import "_checkboxes.scss";
// Radios
@import "_radios.scss";
// Text inputs
@import "_inputs.scss";
legend {
border-bottom: 0;
}
.modal-content {
@extend .shadow-z-2;
border-radius: 0;
border: 0;
.modal-header {
border-bottom: 0;
}
.modal-footer {
border-top: 0;
.btn+.btn {
margin-bottom: 10px;
}
}
}
// Lists
@import "_lists.scss";
// Navbar
@import "_navbar.scss";
.dropdown-menu {
border: 0;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
.divider {
background-color: rgba(229, 229, 229, 0.12);
}
li {
overflow: hidden;
position: relative;
a:hover {
background: rgba(0,0,0,0.08);
}
}
}
// Alerts
@import "_alerts.scss";
// Progress bar
@import "_progress.scss";
// Panels
@import "_cards.scss";
// Typography
.text-warning {
color: $btn-warning;
}
.text-primary {
color: $btn-primary;
}
.text-danger {
color: $btn-danger;
}
.text-success {
color: $btn-success;
}
.text-info {
color: $btn-info;
}
@import "_tabs.scss";
@import "_popups.scss";
@import "_icons.scss";
// External plugins
@import "_plugin-snackbarjs.scss";
@import "_plugin-nouislider.scss";

34
sass/ripples.scss Normal file
View File

@ -0,0 +1,34 @@
.withripple {
position: relative;
}
.ripple-wrapper {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 100%;
overflow: hidden;
border-radius: 2px;
}
.ripple {
position: absolute;
width: 20px;
height: 20px;
margin-left: -10px;
margin-top: -10px;
border-radius: 100%;
background-color: rgba(0,0,0,0.05);
transform: scale(1);
transform-origin: 50%;
opacity: 0;
pointer-events: none;
}
.ripple.ripple-on {
transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
opacity: 1;
}
.ripple.ripple-out {
transition: opacity 0.1s linear 0s !important;
opacity: 0;
}