0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-12-10 22:24:19 +01:00
Bootstrap/scss/_custom-forms.scss

260 lines
6.7 KiB
SCSS
Raw Normal View History

// scss-lint:disable PropertyCount, VendorPrefix
2016-01-06 09:00:08 +01:00
// Embedded icons from Open Iconic.
// Released under MIT and copyright 2014 Waybury.
// https://useiconic.com/open
2015-04-18 20:17:32 +02:00
// Checkboxes and radios
2014-12-24 13:47:08 +01:00
//
// Base class takes care of all the key behavioral aspects.
.custom-control {
2014-12-26 00:40:24 +01:00
position: relative;
display: inline-flex;
min-height: (1rem * $line-height-base);
padding-left: $custom-control-gutter;
margin-right: $custom-control-spacer-x;
}
2014-12-26 00:40:24 +01: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-26 00:40:24 +01: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-26 00:40:24 +01: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 {
background-color: $custom-control-disabled-indicator-bg;
}
~ .custom-control-description {
color: $custom-control-disabled-description-color;
}
2014-12-26 00:40:24 +01:00
}
}
2014-12-24 13:47:08 +01:00
// Custom indicator
//
// Generates a shadow element to create our makeshift checkbox/radio background.
.custom-control-indicator {
2014-12-26 00:40:24 +01:00
position: absolute;
top: (($line-height-base - $custom-control-indicator-size) / 2);
2014-12-26 00:40:24 +01:00
left: 0;
display: block;
width: $custom-control-indicator-size;
height: $custom-control-indicator-size;
pointer-events: none;
2014-12-26 00:40:24 +01:00
user-select: none;
background-color: $custom-control-indicator-bg;
2014-12-26 00:40:24 +01: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 13:47:08 +01:00
// Checkboxes
//
// Tweak just a few things for checkboxes.
.custom-checkbox {
.custom-control-indicator {
@include border-radius($custom-checkbox-radius);
2014-12-26 00:40:24 +01:00
}
.custom-control-input:checked ~ .custom-control-indicator {
2016-02-07 03:05:24 +01:00
background-image: $custom-checkbox-checked-icon;
2014-12-26 00:40:24 +01:00
}
2015-01-01 21:01:55 +01:00
.custom-control-input:indeterminate ~ .custom-control-indicator {
background-color: $custom-checkbox-indeterminate-bg;
2016-02-07 03:05:24 +01:00
background-image: $custom-checkbox-indeterminate-icon;
@include box-shadow($custom-checkbox-indeterminate-box-shadow);
2015-01-01 21:01:55 +01:00
}
}
2014-12-24 13:47:08 +01:00
// Radios
//
// Tweak just a few things for radios.
.custom-radio {
.custom-control-indicator {
border-radius: $custom-radio-radius;
2014-12-26 00:40:24 +01:00
}
.custom-control-input:checked ~ .custom-control-indicator {
2016-02-07 03:05:24 +01:00
background-image: $custom-radio-checked-icon;
2014-12-26 00:40:24 +01:00
}
}
2015-04-18 20:17:32 +02: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 {
display: flex;
flex-direction: column;
.custom-control {
margin-bottom: $custom-control-spacer-y;
2014-12-26 00:40:24 +01:00
+ .custom-control {
2014-12-26 00:40:24 +01:00
margin-left: 0;
}
}
}
2015-04-18 20:17:32 +02:00
2014-12-26 00:40:24 +01:00
// Select
//
// Replaces the browser default select with a custom one, mostly pulled from
// http://primercss.io.
2015-08-23 10:12:00 +02:00
//
2016-01-06 08:34:51 +01:00
.custom-select {
2014-12-26 00:40:24 +01:00
display: inline-block;
max-width: 100%;
$select-border-width: ($custom-select-border-width * 2);
height: calc(#{$input-height} + #{$select-border-width});
padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;
line-height: $custom-select-line-height;
color: $custom-select-color;
2015-12-08 10:06:23 +01:00
vertical-align: middle;
background: $custom-select-bg $custom-select-indicator no-repeat right $custom-select-padding-x center;
background-size: $custom-select-bg-size;
border: $custom-select-border-width solid $custom-select-border-color;
@if $enable-rounded {
border-radius: $custom-select-border-radius;
} @else {
border-radius: 0;
}
appearance: none;
&:focus {
border-color: $custom-select-focus-border-color;
2015-08-23 10:00:22 +02:00
outline: none;
@include box-shadow($custom-select-focus-box-shadow);
&::-ms-value {
// For visual consistency with other platforms/browsers,
// supress the default white text on blue background highlight given to
// the selected option text when the (still closed) <select> receives focus
// in IE and (under certain conditions) Edge.
// See https://github.com/twbs/bootstrap/issues/19398.
color: $input-color;
background-color: $input-bg;
}
}
&:disabled {
color: $custom-select-disabled-color;
background-color: $custom-select-disabled-bg;
}
// Hides the default caret in IE11
&::-ms-expand {
opacity: 0;
}
}
2016-01-06 08:34:51 +01: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 20:17:32 +02:00
2014-12-26 00:40:24 +01:00
// File
//
// Custom file input.
.custom-file {
2014-12-26 00:40:24 +01:00
position: relative;
display: inline-block;
max-width: 100%;
height: $custom-file-height;
2016-05-16 16:00:45 +02:00
margin-bottom: 0;
}
.custom-file-input {
min-width: $custom-file-width;
max-width: 100%;
height: $custom-file-height;
2014-12-26 00:40:24 +01:00
margin: 0;
opacity: 0;
&:focus ~ .custom-file-control {
@include box-shadow($custom-file-focus-box-shadow);
}
}
.custom-file-control {
2014-12-26 00:40:24 +01: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;
pointer-events: none;
2014-12-26 00:40:24 +01:00
user-select: none;
background-color: $custom-file-bg;
border: $custom-file-border-width solid $custom-file-border-color;
2016-01-18 00:32:01 +01: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}):empty::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;
}
}
}