bootstrap/scss/_custom-forms.scss
2015-12-08 02:48:05 +03:00

226 lines
4.9 KiB
SCSS

// Embedded icons from Open Iconic.
// Released under MIT and copyright 2014 Waybury.
// http://useiconic.com/open
// Checkboxes and radios
//
// Base class takes care of all the key behavioral aspects.
.c-input {
position: relative;
display: inline;
padding-left: 1.5rem;
color: #555;
cursor: pointer;
> input {
position: absolute;
z-index: -1; // Put the input behind the label so it doesn't overlay text
opacity: 0;
&:checked ~ .c-indicator {
color: #fff;
background-color: #0074d9;
@include box-shadow(none);
}
&:focus ~ .c-indicator {
// the mixin is not used here to make sure there is feedback
box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9;
}
&:active ~ .c-indicator {
color: #fff;
background-color: #84c6ff;
@include box-shadow(none);
}
}
+ .c-input {
margin-left: 1rem;
}
}
// Custom indicator
//
// Generates a shadow element to create our makeshift checkbox/radio background.
.c-indicator {
position: absolute;
top: 0;
left: 0;
display: block;
width: 1rem;
height: 1rem;
font-size: 65%;
line-height: 1rem;
color: #eee;
text-align: center;
user-select: none;
background-color: #eee;
background-repeat: no-repeat;
background-position: center center;
background-size: 50% 50%;
@include box-shadow(inset 0 .125rem .125rem rgba(0,0,0,.1));
}
// Checkboxes
//
// Tweak just a few things for checkboxes.
.c-checkbox {
.c-indicator {
border-radius: .25rem;
}
input:checked ~ .c-indicator {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E");
}
input:indeterminate ~ .c-indicator {
background-color: #0074d9;
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E");
@include box-shadow(none);
}
}
// Radios
//
// Tweak just a few things for radios.
.c-radio {
.c-indicator {
border-radius: 50%;
}
input:checked ~ .c-indicator {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E");
}
}
// Layout options
//
// By default radios and checkboxes are `inline-block` with no additional spacing
// set. Use these optional classes to tweak the layout.
.c-inputs-stacked {
.c-input {
display: inline;
&::after {
display: block;
margin-bottom: .25rem;
content: "";
}
+ .c-input {
margin-left: 0;
}
}
}
// Select
//
// Replaces the browser default select with a custom one, mostly pulled from
// http://primercss.io.
//
// Includes IE9-specific hacks (noted by ` \9`).
.c-select {
display: inline-block;
max-width: 100%;
padding: .375rem 1.75rem .375rem .75rem;
padding-right: .75rem \9;
vertical-align: middle;
background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;
background-image: none \9;
background-size: 8px 10px;
border: $input-border-width solid $input-border-color;
// Use vendor prefixes as `appearance` isn't part of the CSS spec.
-moz-appearance: none;
-webkit-appearance: none;
&:focus {
border-color: #51a7e8;
outline: none;
@include box-shadow(inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(81, 167, 232, 0.5));
}
// Hides the default caret in IE11
&::-ms-expand {
opacity: 0;
}
}
.c-select-sm {
padding-top: 3px;
padding-bottom: 3px;
font-size: 12px;
&:not([multiple]) {
height: 26px;
min-height: 26px;
}
}
// File
//
// Custom file input.
.file {
position: relative;
display: inline-block;
height: 2.5rem;
cursor: pointer;
}
.file input {
min-width: 14rem;
margin: 0;
filter: alpha(opacity = 0);
opacity: 0;
}
.file-custom {
position: absolute;
top: 0;
right: 0;
left: 0;
z-index: 5;
height: 2.5rem;
padding: .5rem 1rem;
line-height: 1.5;
color: #555;
user-select: none;
background-color: #fff;
border: $input-border-width solid #ddd;
border-radius: .25rem;
@include box-shadow(inset 0 .2rem .4rem rgba(0,0,0,.05));
}
.file-custom::after {
content: "Choose file...";
}
.file-custom::before {
position: absolute;
top: -.075rem;
right: -.075rem;
bottom: -.075rem;
z-index: 6;
display: block;
height: 2.5rem;
padding: .5rem 1rem;
line-height: 1.5;
color: #555;
content: "Browse";
background-color: #eee;
border: $input-border-width solid #ddd;
border-radius: 0 .25rem .25rem 0;
}
// Focus state
.file input:focus ~ .file-custom {
@include box-shadow(0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9);
}