Continued work, added support for material colors

This commit is contained in:
Federico Zivolo 2014-08-20 12:53:26 +02:00
parent a41d47e3cf
commit 11a4609992
18 changed files with 1232 additions and 1126 deletions

View File

@ -1,4 +1,4 @@
Bootstrap Material Design
Material Design for Bootstrap
=========================
This Bootstrap theme is an easy way to use the new Material Design guide-lines by Google in your Bootstrap 3 based application.
@ -31,6 +31,19 @@ Currently supported elements:
Material Design for Bootstrap provides some additional stuff to get the best from Material Design.
### Variations:
There are 17 additional color variations (in addition to the classic 4 variations) for buttons, inputs, checkboxes, radios, alerts, navbars, tabs, labels, paginations, progess bars and more.
They can be used adding to the desired element the class suffix `-material-color` replacing `color` with the desired one.
Example:
<button class="btn btn-material-deeppurple">Deep purple button</button>
These colors are took from the Material Design color palette and are reported below:
![palette](screenshots/palette.jpg)
### Buttons:
Add `.btn-flat` to a button to make it flat, without shadows.

View File

@ -1,26 +1,18 @@
// main: material.less
.alert, .alert-success, .alert-info, .alert-warning, .alert-danger {
.alert {
border: 0px;
border-radius: 0;
a, .alert-link {
color: #FFFFFF;
}
}
.alert-success {
.variations(~"", background-color, #FFFFFF);
&-info, &-danger, &-warning, &-success {
color: #FFFFFF;
background-color: @alert-success;
}
.alert-info {
color: #FFFFFF;
background-color: @alert-info;
&-default {
a, .alert-link {
color: #000000;
}
.alert-warning {
color: #FFFFFF;
background-color: @alert-warning;
}
.alert-danger {
color: #FFFFFF;
background-color: @alert-danger;
}

820
bootstrap.css vendored
View File

@ -1,820 +0,0 @@
/* Generated by less 1.7.0 */
@import url(http://fonts.googleapis.com/css?family=Roboto+Condensed:300italic,400italic,700italic,400,700,300|Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic);
@-webkit-keyframes input-highlight {
0% {
left: 20%;
width: 20%;
}
99% {
width: 0;
left: 0;
opacity: 1;
}
100% {
opacity: 0;
}
}
@-moz-keyframes input-highlight {
0% {
left: 20%;
width: 20%;
}
99% {
width: 0;
left: 0;
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes input-highlight {
0% {
left: 20%;
width: 20%;
}
99% {
width: 0;
left: 0;
opacity: 1;
}
100% {
opacity: 0;
}
}
.shadow-z-1 {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
}
.shadow-z-2 {
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
}
.shadow-z-2-hover {
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.28);
}
.shadow-z-3 {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
.shadow-z-4 {
box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
}
.shadow-z-5 {
box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
}
body {
background-color: #EEEEEE;
}
body,
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.btn {
position: relative;
padding: 8px 30px;
border: 0;
margin: 10px 1px;
cursor: pointer;
border-radius: 4px;
text-transform: uppercase;
text-decoration: none;
transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
outline: none !important;
}
.btn:hover:not(.btn-link) {
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.28);
}
.btn:active:not(.btn-link) {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
.btn-raised {
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
}
.btn-raised:active:not(.btn-link) {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
.btn-default,
.btn-default:hover,
.btn-default:active,
.btn-default:focus {
background-color: transparent;
color: #000000;
}
.btn-default:hover {
background-color: #FFFFFF;
}
.btn-primary,
.btn-primary:hover,
.btn-primary:active,
.btn-primary:focus {
background-color: #4285f4;
color: #ffffff;
}
.btn-success,
.btn-success:hover,
.btn-success:active,
.btn-success:focus {
background-color: #0f9d58;
color: #ffffff;
}
.btn-info,
.btn-info:hover,
.btn-info:active,
.btn-info:focus {
background-color: #3498db;
color: #ffffff;
}
.btn-warning,
.btn-warning:hover,
.btn-warning:active,
.btn-warning:focus {
background-color: #ff5722;
color: #ffffff;
}
.btn-danger,
.btn-danger:hover,
.btn-danger:active,
.btn-danger:focus {
background-color: #db4437;
color: #ffffff;
}
.open > .dropdown-toggle.btn-default {
background-color: transparent;
}
.open > .dropdown-toggle.btn-primary {
background-color: #4285f4;
}
.open > .dropdown-toggle.btn-success {
background-color: #0f9d58;
}
.open > .dropdown-toggle.btn-info {
background-color: #3498db;
}
.open > .dropdown-toggle.btn-warning {
background-color: #ff5722;
}
.open > .dropdown-toggle.btn-danger {
background-color: #db4437;
}
.btn-flat {
box-shadow: none !important;
}
.btn-flat.btn-default:hover {
background: none;
}
.btn-group,
.btn-group-vertical {
position: relative;
border-radius: 4px;
margin: 10px 1px;
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
}
.btn-group:active:not(.btn-link),
.btn-group-vertical:active:not(.btn-link) {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
.btn-group.open .dropdown-toggle,
.btn-group-vertical.open .dropdown-toggle {
box-shadow: none;
}
.btn-group.btn-group-raised,
.btn-group-vertical.btn-group-raised {
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
}
.btn-group.btn-group-raised:active:not(.btn-link),
.btn-group-vertical.btn-group-raised:active:not(.btn-link) {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
.btn-group .btn,
.btn-group-vertical .btn,
.btn-group .btn:active,
.btn-group-vertical .btn:active,
.btn-group .btn-group,
.btn-group-vertical .btn-group {
box-shadow: none !important;
margin: 0;
}
.btn-group .btn:active .caret,
.btn-group-vertical .btn:active .caret {
margin-left: -1px;
}
.btn-group-flat {
box-shadow: none !important;
}
.ripple-wrapper {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 100%;
overflow: hidden;
border-radius: 2px;
}
.ripple {
fill: black;
fill-opacity: 0.05;
stroke: none;
-webkit-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1);
-webkit-transform-origin: 50%;
-ms-transform-origin: 50%;
transform-origin: 50%;
opacity: 0;
}
.ripple.ripple-on {
transition: opacity 0.15s ease-in 0s -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
-webkit-transition: opacity 0.15s ease-in 0s, -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
opacity: 1;
}
.ripple.ripple-out {
-webkit-transition: opacity 0.2s linear 0s !important;
transition: opacity 0.2s linear 0s !important;
opacity: 0;
}
.form-horizontal .checkbox {
padding-top: 15px;
}
.checkbox label {
cursor: pointer;
padding-left: 45px;
position: relative;
}
.checkbox label span {
display: block;
position: absolute;
left: 10px;
transition-duration: 0.2s;
}
.checkbox label .bubble {
background: rgba(137, 137, 137, 0.3);
left: 0;
top: -10px;
height: 40px;
width: 40px;
border-radius: 100%;
transform: scale(0);
transition: transform .1s, opacity 0.2s 0.4s;
z-index: 1;
}
.checkbox label .bubble.animate {
transform: scale(1);
opacity: 0;
}
.checkbox label .box {
border: 2px solid #5A5F5A;
height: 20px;
width: 20px;
transition-delay: 0.2s;
}
.checkbox label .check {
top: -4px;
left: 16px;
width: 12px;
height: 24px;
border: 2px solid #0F9D58;
border-top: none;
border-left: none;
opacity: 0;
z-index: 888;
transform: rotate(45deg);
transition-delay: 0.2s;
}
.checkbox input[type=checkbox] {
display: none;
}
.checkbox input[type=checkbox]:checked ~ .box {
opacity: 0;
transform: scale(0) rotate(-180deg);
}
.checkbox input[type=checkbox]:checked ~ .bubble {
background: rgba(15, 157, 88, 0.3);
}
.checkbox input[type=checkbox]:checked ~ .check {
opacity: 1;
transform: scale(1) rotate(45deg);
}
.form-horizontal .radio {
margin-bottom: 10px;
}
.radio label {
cursor: pointer;
padding-left: 45px;
position: relative;
}
.radio label span {
display: block;
position: absolute;
left: 10px;
top: 2px;
transition-duration: 0.2s;
}
.radio label .bubble {
background: rgba(137, 137, 137, 0.3);
left: 0;
top: -8px;
height: 34px;
width: 34px;
border-radius: 100%;
transform: scale(0);
transition: transform .1s, opacity 0.2s 0.4s;
z-index: 1;
}
.radio label .bubble.animate {
transform: scale(1);
opacity: 0;
}
.radio label .circle {
border: 2px solid #5A5F5A;
height: 15px;
width: 15px;
border-radius: 100%;
}
.radio label .check {
height: 15px;
width: 15px;
border-radius: 100%;
background-color: #5a5f5a;
transform: scale(0);
}
.radio.radio-default .check {
background-color: #5a5f5a;
}
.radio.radio-primary .check {
background-color: #4285f4;
}
.radio.radio-success .check {
background-color: #0f9d58;
}
.radio.radio-info {
background-color: #3498db;
}
.radio.radio-warning .check {
background-color: #ff5722;
}
.radio.radio-danger .check {
background-color: #db4437;
}
.radio input[type=radio] {
display: none;
}
.radio input[type=radio]:checked ~ .check {
transform: scale(1);
}
.radio input[type=radio]:checked ~ .circle {
transform: scale(1);
border: 1px;
}
.form-control-wrapper {
position: relative;
/* active state */
}
.form-control-wrapper .form-control,
.form-control-wrapper .form-control:focus {
float: none;
border: 0;
box-shadow: none;
border-radius: 0;
background: transparent;
border-bottom: 1px solid #757575;
}
.form-control-wrapper .form-control:focus {
outline: none;
}
.form-control-wrapper .floating-label {
color: #7E7E7E;
font-size: 14px;
position: absolute;
pointer-events: none;
left: 12px;
top: 7px;
transition: 0.2s ease all;
opacity: 0;
}
.form-control-wrapper .form-control:focus ~ .floating-label {
top: -10px;
font-size: 10px;
color: #5264ae;
}
.form-control-wrapper .form-control:not(.empty) ~ .floating-label {
top: -10px;
font-size: 10px;
opacity: 1;
}
.form-control-wrapper .form-control:focus:invalid ~ .floating-label {
color: #db4437;
}
.form-control-wrapper .form-control:focus ~ .material-input:after {
background-color: #5264ae;
}
.form-control-wrapper .form-control:focus:invalid ~ .material-input:before,
.form-control-wrapper .form-control:focus:invalid ~ .material-input:after {
background-color: #db4437;
}
.form-control-wrapper .form-control.empty ~ .floating-label {
opacity: 1;
}
.form-control-wrapper .material-input:before {
position: absolute;
content: "";
width: 100%;
left: 0;
height: 2px;
background-color: #5264ae;
bottom: -1px;
transform: scaleX(0);
transition: transform 0s;
}
.form-control-wrapper .form-control:focus ~ .material-input:before {
transform: scaleX(1);
transition: transform 0.2s ease-out;
}
.form-control-wrapper .material-input:after {
content: "";
position: absolute;
height: 18px;
width: 100px;
margin-top: -1px;
top: 25%;
left: 0;
pointer-events: none;
opacity: 0.9;
}
.form-control-wrapper .input-lg ~ .material-input:after {
height: 26px;
}
.form-control-wrapper textarea {
resize: none;
}
.form-control-wrapper textarea ~ .form-control-highlight {
margin-top: -11px;
}
.form-control-wrapper .form-control:focus ~ .material-input:after {
-webkit-animation: input-highlight 0.3s ease;
animation: input-highlight 0.3s ease;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
.form-group.has-warning .material-input:before,
.form-group.has-warning input.form-control:focus ~ .material-input:after {
background: #ff5722;
}
.form-group.has-warning .control-label,
.form-group.has-warning input.form-control:focus ~ .floating-label {
color: #ff5722;
}
.form-group.has-error .material-input:before,
.form-group.has-error input.form-control:focus ~ .material-input:after {
background: #db4437;
}
.form-group.has-error .control-label,
.form-group.has-error input.form-control:focus ~ .floating-label {
color: #db4437;
}
.form-group.has-success .material-input:before,
.form-group.has-success input.form-control:focus ~ .material-input:after {
background: #0f9d58;
}
.form-group.has-success .control-label,
.form-group.has-success input.form-control:focus ~ .floating-label {
color: #0f9d58;
}
.form-group.has-info .material-input:before,
.form-group.has-info input.form-control:focus ~ .material-input:after {
background: #3498db;
}
.form-group.has-info .control-label,
.form-group.has-info input.form-control:focus ~ .floating-label {
color: #3498db;
}
.input-group .form-control-wrapper {
margin-right: 5px;
margin-left: 5px;
bottom: -10px;
}
.input-group .form-control-wrapper .form-control {
float: none;
}
.input-group .input-group-addon {
border: 0;
}
.input-group .input-group-btn .btn {
border-radius: 4px;
}
select.form-control {
border: 0;
box-shadow: none;
border-bottom: 1px solid #757575;
border-radius: 0;
}
select.form-control:focus {
box-shadow: none;
border-color: #757575;
}
.container .well,
.container .jumbotron {
background-color: #fff;
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
border-radius: 2px;
}
.container .well p,
.container .jumbotron p {
font-weight: 300;
}
.modal-content {
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
border-radius: 0;
border: 0;
}
.modal-content .modal-header {
border-bottom: 0;
}
.modal-content .modal-footer {
border-top: 0;
}
.modal-content .modal-footer .btn + .btn {
margin-bottom: 10px;
}
.list-group {
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
border-radius: 2px;
}
.list-group .list-group-item:last-child {
border-bottom-right-radius: 2px;
border-bottom-left-radius: 2px;
}
.list-group .list-group-item:first-child {
border-top-right-radius: 2px;
boborder-top-right-radius: 2px;
}
.navbar {
background-color: #4285f4;
border: 0;
border-radius: 0;
}
.navbar .navbar-brand {
position: relative;
height: 60px;
line-height: 30px;
color: #ffffff;
}
.navbar .navbar-brand:hover,
.navbar .navbar-brand:focus {
color: #ffffff;
background-color: transparent;
}
.navbar .navbar-text {
color: #ffffff;
}
.navbar .navbar-nav > li > a {
color: #ffffff;
padding-top: 20px;
padding-bottom: 20px;
}
.navbar .navbar-nav > li > a:hover,
.navbar .navbar-nav > li > a:focus {
color: #ffffff;
background-color: transparent;
}
.navbar .navbar-nav > .active > a,
.navbar .navbar-nav > .active > a:hover,
.navbar .navbar-nav > .active > a:focus {
color: #ffffff;
background-color: rgba(0, 0, 0, 0.05);
}
.navbar .navbar-nav > .disabled > a,
.navbar .navbar-nav > .disabled > a:hover,
.navbar .navbar-nav > .disabled > a:focus {
color: #e5e5e5;
background-color: transparent;
}
.navbar .navbar-toggle {
border-color: #ffffff;
}
.navbar .navbar-toggle:hover,
.navbar .navbar-toggle:focus {
background-color: transparent;
}
.navbar .navbar-toggle .icon-bar {
background-color: #ffffff;
}
.navbar .navbar-collapse,
.navbar .navbar-form {
border-color: #206ff2;
}
.navbar .navbar-nav > .open > a,
.navbar .navbar-nav > .open > a:hover,
.navbar .navbar-nav > .open > a:focus {
background-color: rgba(0, 0, 0, 0.05);
color: #ffffff;
}
@media (max-width: 767px) {
.navbar .navbar-nav .open .dropdown-menu > .dropdown-header {
border: 0;
color: #d4d4d4;
}
.navbar .navbar-nav .open .dropdown-menu .divider {
background-color: #ffffff;
}
.navbar .navbar-nav .open .dropdown-menu > li > a {
color: #ffffff;
}
.navbar .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar .navbar-nav .open .dropdown-menu > li > a:focus {
color: #ffffff;
background-color: transparent;
}
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #ffffff;
background-color: rgba(0, 0, 0, 0.05);
}
.navbar .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #e5e5e5;
background-color: transparent;
}
}
.navbar .navbar-link {
color: #ffffff;
}
.navbar .navbar-link:hover {
color: #ffffff;
}
.navbar .btn-link {
color: #ffffff;
}
.navbar .btn-link:hover,
.navbar .btn-link:focus {
color: #ffffff;
}
.navbar .btn-link[disabled]:hover,
fieldset[disabled] .navbar .btn-link:hover,
.navbar .btn-link[disabled]:focus,
fieldset[disabled] .navbar .btn-link:focus {
color: #e5e5e5;
}
.navbar .navbar-form .form-control-wrapper .form-control {
border-color: #ffffff;
color: #ffffff;
}
.navbar .navbar-form .form-control-wrapper .material-input:before,
.navbar .navbar-form .form-control-wrapper input:focus ~ .material-input:after {
background-color: #ffffff;
}
.navbar .navbar-form ::-webkit-input-placeholder {
color: #ffffff;
}
.navbar .navbar-form :-moz-placeholder {
color: #ffffff;
}
.navbar .navbar-form ::-moz-placeholder {
color: #ffffff;
}
.navbar .navbar-form :-ms-input-placeholder {
color: #ffffff;
}
.navbar-primary {
background-color: #4285f4;
}
.navbar-primary .navbar-collapse,
.navbar-primary .navbar-form {
border-color: #206ff2;
}
.navbar-success {
background-color: #0f9d58;
}
.navbar-success .navbar-collapse,
.navbar-success .navbar-form {
border-color: #0c7c46;
}
.navbar-info {
background-color: #3498db;
}
.navbar-info .navbar-collapse,
.navbar-info .navbar-form {
border-color: #2386c8;
}
.navbar-warning {
background-color: #ff5722;
}
.navbar-warning .navbar-collapse,
.navbar-warning .navbar-form {
border-color: #fd3d00;
}
.navbar-danger {
background-color: #db4437;
}
.navbar-danger .navbar-collapse,
.navbar-danger .navbar-form {
border-color: #ca3124;
}
.navbar-inverse {
background-color: #5264ae;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
border-color: #465696;
}
.dropdown-menu {
border: 0;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
}
.dropdown-menu .divider {
background-color: rgba(229, 229, 229, 0.12);
}
.dropdown-menu li {
overflow: hidden;
position: relative;
}
.dropdown-menu li a:hover {
background-color: transparent;
}
.alert,
.alert-success,
.alert-info,
.alert-warning,
.alert-danger {
border: 0px;
border-radius: 0;
}
.alert a,
.alert-success a,
.alert-info a,
.alert-warning a,
.alert-danger a,
.alert .alert-link,
.alert-success .alert-link,
.alert-info .alert-link,
.alert-warning .alert-link,
.alert-danger .alert-link {
color: #FFFFFF;
}
.alert-success {
color: #FFFFFF;
background-color: #0f9d58;
}
.alert-info {
color: #FFFFFF;
background-color: #3498db;
}
.alert-warning {
color: #FFFFFF;
background-color: #ff5722;
}
.alert-danger {
color: #FFFFFF;
background-color: #db4437;
}
.progress {
height: 4px;
border-radius: 0;
box-shadow: none;
background: #c8c8c8;
}
.progress .progress-bar {
box-shadow: none;
}
.progress .progress-bar,
.progress .progress-bar-info {
background-color: #3498db;
}
.progress .progress-bar-warning {
background-color: #ff5722;
}
.progress .progress-bar-danger {
background-color: #db4437;
}
.progress .progress-bar-success {
background-color: #0f9d58;
}
.text-warning {
color: #ff5722;
}
.text-primary {
color: #4285f4;
}
.text-danger {
color: #db4437;
}
.text-success {
color: #0f9d58;
}
.text-info {
color: #3498db;
}

View File

@ -18,7 +18,11 @@
border-radius: 4px;
text-transform: uppercase;
text-decoration: none;
color: @darkbg-text;
&:hover {
color: @darkbg-text;
}
&:hover:not(.btn-link) {
.shadow-z-2-hover();
}
@ -27,57 +31,29 @@
.shadow-z-3();
}
outline: none !important;
.variations(~":not(.btn-link)", background-color, @btn-default);
}
.btn-raised {
.btn-shadow();
}
.btn-default {
&, &:hover, &:active, &:focus {
background-color: @btn-default;
color: @btn-default-text;
}
// 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 {
background-color: #FFFFFF;
color: @lightbg-text;
}
}
.btn-primary {
&, &:hover, &:active, &:focus {
background-color: @btn-primary;
color: @btn-primary-text;
}
}
.btn-success {
&, &:hover, &:active, &:focus {
background-color: @btn-success;
color: @btn-success-text;
}
}
.btn-info {
&, &:hover, &:active, &:focus {
background-color: @btn-info;
color: @btn-info-text;
}
}
.btn-warning {
&, &:hover, &:active, &:focus {
background-color: @btn-warning;
color: @btn-warning-text;
}
}
.btn-danger {
&, &:hover, &:active, &:focus {
background-color: @btn-danger;
color: @btn-danger-text;
.btn:not([class^="btn btn-"]), .btn-default {
&:hover {
background-color: rgba(255,255,255,0.5);
}
}
.btn-raised {
.btn-shadow();
}
.open > .dropdown-toggle.btn {
&-default { background-color: @btn-default; }
&-primary { background-color: @btn-primary; }
&-success { background-color: @btn-success; }
&-info { background-color: @btn-info; }
&-warning { background-color: @btn-warning; }
&-danger { background-color: @btn-danger; }
.variations(~"", background-color, @btn-default);
}
.btn-flat {
box-shadow: none !important;

View File

@ -14,8 +14,8 @@
left: 10px;
transition-duration: 0.2s;
}
.bubble {
background: @input-unchecked;
.ripple {
background-color: @lightbg-text;
left: 0;
top: -10px;
height: 40px;
@ -24,13 +24,15 @@
transform: scale(0);
transition: transform .1s, opacity 0.2s 0.4s;
z-index: 1;
opacity: 0.2;
margin: 0;
&.animate {
transform: scale(1);
opacity: 0;
}
}
.box {
border: 2px solid #5A5F5A;
border: 2px solid @lightbg-text;
height: 20px;
width: 20px;
transition-delay: 0.2s;
@ -40,7 +42,7 @@
left: 16px;
width: 12px;
height: 24px;
border: 2px solid #0F9D58;
border: 2px solid;
border-top: none;
border-left: none;
opacity: 0;
@ -48,18 +50,28 @@
transform: rotate(45deg);
transition-delay: 0.2s;
}
}
.variations(~" .check", color, @success);
input[type=checkbox][disabled]:checked ~ .check,
input[type=checkbox][disabled]:not(:checked) ~ .box {
opacity: 0.5;
}
input[type=checkbox][disabled] ~ .ripple {
opacity: 0.1;
}
input[type=checkbox] { display: none; }
input[type=checkbox]:checked ~ .box {
opacity: 0;
transform: scale(0) rotate(-180deg);
}
input[type=checkbox]:checked ~ .bubble {
background: @input-checked;
}
.variations(~" input[type=checkbox]:checked ~ .ripple", background-color, @success);
input[type=checkbox]:checked ~ .check {
opacity: 1;
transform: scale(1) rotate(45deg);
}
input[type=checkbox][disabled] ~ .ripple {
background-color: @lightbg-text;
}
}

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<title>Bootstrap Material</title>
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/css/bootstrap.css" rel="stylesheet">
<link href="material/material.css" rel="stylesheet">
<link href="material.css" rel="stylesheet">
<style>
body{padding-top:50px}#banner{border-bottom:none}.page-header h1{font-size:4em}.bs-docs-section{margin-top:8em}.bs-component{position:relative}.bs-component .modal{position:relative;top:auto;right:auto;left:auto;bottom:auto;z-index:1;display:block}.bs-component .modal-dialog{width:90%}.bs-component .popover{position:relative;display:inline-block;width:220px;margin:20px}#source-button{position:absolute;top:0;right:0;z-index:100;font-weight:bold;padding: 5px 10px;}.progress{margin-bottom:10px}footer{margin:5em 0}footer li{float:left;margin-right:1.5em;margin-bottom:1.5em}footer p{clear:left;margin-bottom:0}.splash{padding:4em 0 0;background-color:#141d27;color:#fff;text-align:center}.splash h1{font-size:4em}.splash #social{margin:2em 0}.splash .alert{margin:2em 0}.section-tout{padding:4em 0 3em;border-bottom:1px solid rgba(0,0,0,0.05);background-color:#eaf1f1}.section-tout .fa{margin-right:.5em}.section-tout p{margin-bottom:3em}.section-preview{padding:4em 0 4em}.section-preview .preview{margin-bottom:4em;background-color:#eaf1f1}.section-preview .preview .image{position:relative}.section-preview .preview .image:before{box-shadow:inset 0 0 0 1px rgba(0,0,0,0.1);position:absolute;top:0;left:0;width:100%;height:100%;content:"";pointer-events:none}.section-preview .preview .options{padding:1em 2em 2em;border:1px solid rgba(0,0,0,0.05);border-top:none;text-align:center}.section-preview .preview .options p{margin-bottom:2em}.section-preview .dropdown-menu{text-align:left}.section-preview .lead{margin-bottom:2em}@media (max-width:767px){.section-preview .image img{width:100%}}.sponsor{text-align:center}.sponsor a:hover{text-decoration:none}@media (max-width:767px){#banner{margin-bottom:2em;text-align:center}}
</style>
@ -1286,6 +1286,6 @@
})();
</script>
<script src="material/material.js?v2"></script>
<script src="material.js?v0.0.1"></script>
</body>
</html>

View File

@ -93,6 +93,14 @@
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
select ~ .material-input:before {
bottom: 1px;
}
select ~ .material-input:after {
display: none;
}
}
.form-group {
@ -128,6 +136,10 @@
color: @input-info;
}
}
.variations(~" .material-input:before", background-color, @lightbg-text);
.variations(~" input.form-control:focus ~ .material-input:after", background-color, @lightbg-text);
.variations(~" .control-label", color, @lightbg-text);
.variations(~" input.form-control:focus ~ .floating-label", color, @lightbg-text);
}

File diff suppressed because it is too large Load Diff

View File

@ -6,10 +6,10 @@ $(function (){
$(withRipple).append("<div class=ripple-wrapper><div class=ripple></div></div>");
// Add fake-checkbox to material checkboxes
$(".checkbox label input").after("<span class=\"bubble\"></span><span class=\"check\"></span><span class=\"box\"></span>");
$(".checkbox label input").after("<span class=ripple></span><span class=check></span><span class=box></span>");
// Add fake-radio to material radios
$(".radio label input").after("<span class=\"bubble\"></span><span class=\"circle\"></span><span class=\"check\"></span>");
$(".radio label input").after("<span class=ripple></span><span class=circle></span><span class=check></span>");
// Add elements for material inputs
$("input.form-control, textarea.form-control, select.form-control").each( function() {
@ -74,7 +74,7 @@ $(function (){
rippleOut($ripple, $rippleWrapper);
}
})
.on("mouseup", withRipple, function() {
.on("mouseup mouseleave", withRipple, function() {
var $self = $(this),
$rippleWrapper = $self.find(".ripple-wrapper"),
$ripple = $self.find(".ripple");
@ -87,23 +87,23 @@ $(function (){
var rippleOut = function($ripple, $rippleWrapper) {
$ripple.attr("class", "ripple ripple-on ripple-out");
$rippleWrapper.fadeOut(200, function() {
$rippleWrapper.fadeOut(800, function() {
$rippleWrapper.attr("class", "ripple-wrapper").attr("style", "");
$ripple.attr("class", "ripple").attr("style", "");
});
};
// Material inputs engine (bubble effect)
// Material inputs engine (ripple effect)
$(document).on("click", ".checkbox label, .radio label", function() {
var $bubble = $(this).find(".bubble"),
var $ripple = $(this).find(".ripple"),
timestamp = "t" + new Date().getTime();
$bubble.attr("class", "bubble");
$bubble.addClass("animate").addClass(timestamp);
$ripple.attr("class", "ripple");
$ripple.addClass("animate").addClass(timestamp);
setTimeout(function() {
if ($bubble.hasClass(timestamp)) {
$bubble.removeClass("animate").removeClass(timestamp);
if ($ripple.hasClass(timestamp)) {
$ripple.removeClass("animate").removeClass(timestamp);
}
}, 200);
}, 800);
});
$(document).on("change", ".form-control", function() {

View File

@ -5,11 +5,18 @@
@import url(http://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 "variables.less";
@import "mixins.less";
@import "animations.less";
@import "shadows.less";
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 {
@ -31,8 +38,11 @@ body, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
// Text inputs
@import "inputs.less";
legend {
border-bottom: 0;
}
.container {
.container, .container-fluid {
.well, .jumbotron {
background-color: #fff;
.shadow-z-2();

78
mixins.less Normal file
View File

@ -0,0 +1,78 @@
// main: material.less
// usage: .variations(~" .check", color, transparent);
.variations(@extra, @property, @default) {
// Bootstrap shades
&@{extra}, &-default@{extra} {
@{property}: @default;
}
&-primary@{extra} {
@{property}: @primary;
}
&-success@{extra} {
@{property}: @success;
}
&-info@{extra} {
@{property}: @info;
}
&-warning@{extra} {
@{property}: @warning;
}
&-danger@{extra} {
@{property}: @danger;
}
// Material shades
&-material-red@{extra} {
@{property}: @red;
}
&-material-pink@{extra} {
@{property}: @pink;
}
&-material-purple@{extra} {
@{property}: @purple;
}
&-material-deeppurple@{extra} {
@{property}: @deeppurple;
}
&-material-indigo@{extra} {
@{property}: @indigo;
}
&-material-lightblue@{extra} {
@{property}: @lightblue;
}
&-material-cyan@{extra} {
@{property}: @cyan;
}
&-material-teal@{extra} {
@{property}: @teal;
}
&-material-lightgreen@{extra} {
@{property}: @lightgreen;
}
&-material-lime@{extra} {
@{property}: @lime;
}
&-material-lightyellow@{extra} {
@{property}: @lightyellow;
}
&-material-orange@{extra} {
@{property}: @orange;
}
&-material-deeporange@{extra} {
@{property}: @deeporange;
}
&-material-grey@{extra} {
@{property}: @grey;
}
&-material-bluegrey@{extra} {
@{property}: @bluegrey;
}
&-material-brown@{extra} {
@{property}: @brown;
}
&-material-lightgrey@{extra} {
@{property}: @lightgrey;
}
}
@all-variations: ~"-default, -primary, -info, -success, -warning, -danger";

View File

@ -65,7 +65,7 @@
.navbar-collapse,
.navbar-form {
border-color: darken(@navbar-default-bg, 7%);
border-color: rgba(0,0,0,0.1);
}
// Dropdowns
@ -154,27 +154,9 @@
::-moz-placeholder { color: @navbar-border; };
:-ms-input-placeholder { color: @navbar-border; };
}
}
.navbar {
&-primary {
background-color: @navbar-default-bg;
.navbar-collapse, .navbar-form { border-color: darken(@navbar-default-bg, 7%); }
}
&-success {
background-color: @navbar-success-bg;
.navbar-collapse, .navbar-form { border-color: darken(@navbar-success-bg, 7%); }
}
&-info { background-color: @navbar-info-bg;
.navbar-collapse, .navbar-form { border-color: darken(@navbar-info-bg, 7%); }
}
&-warning { background-color: @navbar-warning-bg;
.navbar-collapse, .navbar-form { border-color: darken(@navbar-warning-bg, 7%); }
}
&-danger { background-color: @navbar-danger-bg;
.navbar-collapse, .navbar-form { border-color: darken(@navbar-danger-bg, 7%); }
}
&-inverse { background-color: @navbar-inverse-bg;
.navbar-collapse, .navbar-form { border-color: darken(@navbar-inverse-bg, 7%); }
.variations(~"", background-color, @primary);
&-inverse {
background-color: @indigo;
}
}

View File

@ -7,17 +7,6 @@
background: #c8c8c8;
.progress-bar {
box-shadow: none;
&, &-info {
background-color: @progress-info;
}
&-warning {
background-color: @progress-warning;
}
&-danger {
background-color: @progress-danger;
}
&-success {
background-color: @progress-success;
}
.variations(~"", background-color, @primary);
}
}

View File

@ -15,8 +15,8 @@
top: 2px;
transition-duration: 0.2s;
}
.bubble {
background: @input-unchecked;
.ripple {
background-color: @lightbg-text;
left: 0;
top: -8px;
height: 34px;
@ -25,13 +25,15 @@
transform: scale(0);
transition: transform .1s, opacity 0.2s 0.4s;
z-index: 1;
opacity: 0.2;
margin: 0;
&.animate {
transform: scale(1);
opacity: 0;
}
}
.circle {
border: 2px solid #5A5F5A;
border: 2px solid @lightbg-text;
height: 15px;
width: 15px;
border-radius: 100%;
@ -44,21 +46,23 @@
transform: scale(0);
}
}
&.radio {
&-default .check { background-color: @radio-default; }
&-primary .check { background-color: @radio-primary; }
&-success .check { background-color: @radio-success; }
&-info { background-color: @radio-info; }
&-warning .check { background-color: @radio-warning; }
&-danger .check { background-color: @radio-danger; }
.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(1);
transform: scale(0.55);
}
input[type=radio]:checked ~ .circle {
transform: scale(1);
border: 1px;
input[type=radio][disabled] ~ .circle {
border-color: @lightbg-text;
}
input[type=radio][disabled] ~ .check {
background-color: @lightbg-text;
}
}

View File

@ -34,7 +34,7 @@
opacity: 1;
}
.ripple.ripple-out {
-webkit-transition: opacity 0.2s linear 0s !important;
transition: opacity 0.2s linear 0s !important;
-webkit-transition: opacity 1s linear 0s !important;
transition: opacity 0.8s linear 0s !important;
opacity: 0;
}

BIN
screenshots/palette.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -6,6 +6,7 @@
> a {
color: #FFFFFF;
border: 0;
margin: 0;
&:hover {
background: transparent;
border: 0;

View File

@ -1,65 +1,101 @@
// main: material.less
// 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: #3498DB;
@warning: @deeporange;
@danger: @red;
// Typography elements for Material
@darkbg-text: #FFFFFF;
@lightbg-text: #4D4D4D;
@icon-color: rgba(0,0,0,0.5);
// Bootstrap variables
@btn-default: transparent;
@btn-default-text: #000000;
@btn-default-text: @lightbg-text;
@btn-primary: #4285F4;
@btn-primary-text: #FFFFFF;
@btn-primary: @primary;
@btn-primary-text: @darkbg-text;
@btn-success: #0F9D58;
@btn-success-text: #FFFFFF;
@btn-success: @success;
@btn-success-text: @darkbg-text;
@btn-info: #3498DB;
@btn-info-text: #FFFFFF;
@btn-info: @info;
@btn-info-text: @darkbg-text;
@btn-warning: #FF5722;
@btn-warning-text: #FFFFFF;
@btn-warning: @warning;
@btn-warning-text: @darkbg-text;
@btn-danger: #DB4437;
@btn-danger-text: #FFFFFF;
@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: #5A5F5A;
@radio-primary: @btn-primary;
@radio-success: @btn-success;
@radio-info: @btn-info;
@radio-warning: @btn-warning;
@radio-danger: @btn-danger;
@radio-default: @lightbg-text;
@radio-primary: @primary;
@radio-success: @success;
@radio-info: @info;
@radio-warning: @warning;
@radio-danger: @danger;
@input-danger: @btn-danger;
@input-danger: @danger;
@input-default: #5264AE;
@input-warning: @btn-warning;
@input-success: @btn-success;
@input-info: @btn-info;
@input-warning: @warning;
@input-success: @success;
@input-info: @info;
@navbar-danger-bg: @btn-danger;
@navbar-danger-bg: @danger;
@navbar-inverse-bg: #5264AE;
@navbar-warning-bg: @btn-warning;
@navbar-success-bg: @btn-success;
@navbar-info-bg: @btn-info;
@navbar-default-bg: @btn-primary;
@navbar-color: #FFFFFF;
@navbar-link-color: #FFFFFF;
@navbar-link-hover-color: #FFFFFF;
@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: #FFFFFF;
@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: #FFFFFF;
@navbar-toggle-border-color: #FFFFFF;
@navbar-brand-color: @darkbg-text;
@navbar-toggle-border-color: @darkbg-text;
@navbar-toggle-hover-bg: transparent;
@navbar-toggle-icon-bar-bg: #FFFFFF;
@navbar-border: #FFFFFF;
@navbar-toggle-icon-bar-bg: @darkbg-text;
@navbar-border: @darkbg-text;
@alert-success: @btn-success;
@alert-info: @btn-info;
@alert-warning: @btn-warning;
@alert-danger: @btn-danger;
@alert-success: @success;
@alert-info: @info;
@alert-warning: @warning;
@alert-danger: @danger;
@progress-success: @success;
@progress-info: @info;
@progress-warning: @warning;
@progress-danger: @danger;
@progress-success: @btn-success;
@progress-info: @btn-info;
@progress-warning: @btn-warning;
@progress-danger: @btn-danger;