twbs--bootstrap/scss/_custom-forms.scss

250 lines
6.2 KiB
SCSS
Raw Normal View History

2016-01-06 08:00:08 +00:00
// scss-lint:disable PropertyCount
// Embedded icons from Open Iconic.
// Released under MIT and copyright 2014 Waybury.
// http://useiconic.com/open
2015-04-18 18:17:32 +00:00
// Checkboxes and radios
2014-12-24 12:47:08 +00:00
//
// Base class takes care of all the key behavioral aspects.
.custom-control {
2014-12-25 23:40:24 +00:00
position: relative;
display: inline;
padding-left: $custom-control-gutter;
cursor: pointer;
2014-12-25 23:40:24 +00:00
+ .custom-control {
margin-left: $custom-control-spacer-x;
}
}
2014-12-25 23:40:24 +00:00
.custom-control-input {
position: absolute;
z-index: -1; // Put the input behind the label so it doesn't overlay text
opacity: 0;
2014-12-25 23:40:24 +00:00
&:checked ~ .custom-control-indicator {
color: $custom-control-checked-indicator-color;
background-color: $custom-control-checked-indicator-bg;
@include box-shadow($custom-control-checked-indicator-box-shadow);
}
&:focus ~ .custom-control-indicator {
// the mixin is not used here to make sure there is feedback
box-shadow: $custom-control-focus-indicator-box-shadow;
2014-12-25 23:40:24 +00:00
}
&:active ~ .custom-control-indicator {
color: $custom-control-active-indicator-color;
background-color: $custom-control-active-indicator-bg;
@include box-shadow($custom-control-active-indicator-box-shadow);
}
&:disabled {
~ .custom-control-indicator {
cursor: $custom-control-disabled-cursor;
background-color: $custom-control-disabled-indicator-bg;
}
~ .custom-control-description {
color: $custom-control-disabled-description-color;
cursor: $custom-control-disabled-cursor;
}
2014-12-25 23:40:24 +00:00
}
}
2014-12-24 12:47:08 +00:00
// Custom indicator
//
// Generates a shadow element to create our makeshift checkbox/radio background.
.custom-control-indicator {
2014-12-25 23:40:24 +00:00
position: absolute;
top: .0625rem;
2014-12-25 23:40:24 +00:00
left: 0;
display: block;
width: $custom-control-indicator-size;
height: $custom-control-indicator-size;
pointer-events: none;
2014-12-25 23:40:24 +00:00
user-select: none;
background-color: $custom-control-indicator-bg;
2014-12-25 23:40:24 +00:00
background-repeat: no-repeat;
background-position: center center;
background-size: $custom-control-indicator-bg-size;
@include box-shadow($custom-control-indicator-box-shadow);
}
2014-12-24 12:47:08 +00:00
// Checkboxes
//
// Tweak just a few things for checkboxes.
.custom-checkbox {
.custom-control-indicator {
@include border-radius($custom-checkbox-radius);
2014-12-25 23:40:24 +00:00
}
.custom-control-input:checked ~ .custom-control-indicator {
2016-02-07 02:05:24 +00:00
background-image: $custom-checkbox-checked-icon;
2014-12-25 23:40:24 +00:00
}
2015-01-01 20:01:55 +00:00
.custom-control-input:indeterminate ~ .custom-control-indicator {
background-color: $custom-checkbox-indeterminate-bg;
2016-02-07 02:05:24 +00:00
background-image: $custom-checkbox-indeterminate-icon;
@include box-shadow($custom-checkbox-indeterminate-box-shadow);
2015-01-01 20:01:55 +00:00
}
}
2014-12-24 12:47:08 +00:00
// Radios
//
// Tweak just a few things for radios.
.custom-radio {
.custom-control-indicator {
border-radius: $custom-radio-radius;
2014-12-25 23:40:24 +00:00
}
.custom-control-input:checked ~ .custom-control-indicator {
2016-02-07 02:05:24 +00:00
background-image: $custom-radio-checked-icon;
2014-12-25 23:40:24 +00:00
}
}
2015-04-18 18:17:32 +00:00
// Layout options
//
// By default radios and checkboxes are `inline-block` with no additional spacing
// set. Use these optional classes to tweak the layout.
.custom-controls-stacked {
.custom-control {
2014-12-25 23:40:24 +00:00
display: inline;
&::after {
2014-12-25 23:40:24 +00:00
display: block;
margin-bottom: $custom-control-spacer-y;
2014-12-25 23:40:24 +00:00
content: "";
}
+ .custom-control {
2014-12-25 23:40:24 +00:00
margin-left: 0;
}
}
}
2015-04-18 18:17:32 +00:00
2014-12-25 23:40:24 +00:00
// Select
//
// Replaces the browser default select with a custom one, mostly pulled from
// http://primercss.io.
2015-08-23 08:12:00 +00:00
//
// Includes IE9-specific hacks (noted by ` \9`).
2016-01-06 07:34:51 +00:00
.custom-select {
2014-12-25 23:40:24 +00:00
display: inline-block;
max-width: 100%;
padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;
padding-right: $custom-select-padding-x \9;
color: $custom-select-color;
2015-12-08 09:06:23 +00:00
vertical-align: middle;
background: $custom-select-bg $custom-select-indicator no-repeat right $custom-select-padding-x center;
2015-08-23 08:12:00 +00:00
background-image: none \9;
background-size: $custom-select-bg-size;
border: $custom-select-border-width solid $custom-select-border-color;
@include border-radius($custom-select-border-radius);
2015-08-23 08:12:00 +00:00
// Use vendor prefixes as `appearance` isn't part of the CSS spec.
-moz-appearance: none;
2015-08-23 08:12:00 +00:00
-webkit-appearance: none;
&:focus {
border-color: $custom-select-focus-border-color;
2015-08-23 08:00:22 +00:00
outline: none;
@include box-shadow($custom-select-focus-box-shadow);
}
// Hides the default caret in IE11
&::-ms-expand {
opacity: 0;
}
}
2016-01-06 07:34:51 +00:00
.custom-select-sm {
padding-top: $custom-select-padding-y;
padding-bottom: $custom-select-padding-y;
font-size: $custom-select-sm-font-size;
// &:not([multiple]) {
// height: 26px;
// min-height: 26px;
// }
}
2015-04-18 18:17:32 +00:00
2014-12-25 23:40:24 +00:00
// File
//
// Custom file input.
.custom-file {
2014-12-25 23:40:24 +00:00
position: relative;
display: inline-block;
max-width: 100%;
height: $custom-file-height;
2014-12-25 23:40:24 +00:00
cursor: pointer;
}
.custom-file-input {
min-width: $custom-file-width;
max-width: 100%;
2014-12-25 23:40:24 +00:00
margin: 0;
2015-08-25 05:49:45 +00:00
filter: alpha(opacity = 0);
2014-12-25 23:40:24 +00:00
opacity: 0;
&:focus ~ .custom-file-control {
@include box-shadow($custom-file-focus-box-shadow);
}
}
.custom-file-control {
2014-12-25 23:40:24 +00:00
position: absolute;
top: 0;
right: 0;
left: 0;
z-index: 5;
height: $custom-file-height;
padding: $custom-file-padding-x $custom-file-padding-y;
line-height: $custom-file-line-height;
color: $custom-file-color;
2014-12-25 23:40:24 +00:00
user-select: none;
background-color: $custom-file-bg;
border: $custom-file-border-width solid $custom-file-border-color;
2016-01-17 23:32:01 +00:00
@include border-radius($custom-file-border-radius);
@include box-shadow($custom-file-box-shadow);
@each $lang, $text in map-get($custom-file-text, placeholder) {
&:lang(#{$lang})::after {
content: $text;
}
}
&::before {
position: absolute;
top: -$custom-file-border-width;
right: -$custom-file-border-width;
bottom: -$custom-file-border-width;
z-index: 6;
display: block;
height: $custom-file-height;
padding: $custom-file-padding-x $custom-file-padding-y;
line-height: $custom-file-line-height;
color: $custom-file-button-color;
background-color: $custom-file-button-bg;
border: $custom-file-border-width solid $custom-file-border-color;
@include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);
}
@each $lang, $text in map-get($custom-file-text, button-label) {
&:lang(#{$lang})::before {
content: $text;
}
}
}