summaryrefslogtreecommitdiff
path: root/templates/assets/bootstrap/scss/mixins
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2017-03-22 19:19:26 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2017-03-22 19:19:26 +0100
commitd42c8b528eb595101954f478e0024e3f079f6fbf (patch)
tree61a528cf94f1f6941f4683ae8736a4a0135c035e /templates/assets/bootstrap/scss/mixins
downloadminionlivesmatter-d42c8b528eb595101954f478e0024e3f079f6fbf.tar.gz
minionlivesmatter-d42c8b528eb595101954f478e0024e3f079f6fbf.zip
first implementation of fun stats site
Diffstat (limited to 'templates/assets/bootstrap/scss/mixins')
-rw-r--r--templates/assets/bootstrap/scss/mixins/_alert.scss14
-rw-r--r--templates/assets/bootstrap/scss/mixins/_background-variant.scss12
-rw-r--r--templates/assets/bootstrap/scss/mixins/_badge.scss11
-rw-r--r--templates/assets/bootstrap/scss/mixins/_border-radius.scss35
-rw-r--r--templates/assets/bootstrap/scss/mixins/_box-shadow.scss5
-rw-r--r--templates/assets/bootstrap/scss/mixins/_breakpoints.scss95
-rw-r--r--templates/assets/bootstrap/scss/mixins/_buttons.scss86
-rw-r--r--templates/assets/bootstrap/scss/mixins/_cards.scss47
-rw-r--r--templates/assets/bootstrap/scss/mixins/_clearfix.scss7
-rw-r--r--templates/assets/bootstrap/scss/mixins/_float.scss9
-rw-r--r--templates/assets/bootstrap/scss/mixins/_forms.scss55
-rw-r--r--templates/assets/bootstrap/scss/mixins/_gradients.scss37
-rw-r--r--templates/assets/bootstrap/scss/mixins/_grid-framework.scss65
-rw-r--r--templates/assets/bootstrap/scss/mixins/_grid.scss100
-rw-r--r--templates/assets/bootstrap/scss/mixins/_hover.scss60
-rw-r--r--templates/assets/bootstrap/scss/mixins/_image.scss36
-rw-r--r--templates/assets/bootstrap/scss/mixins/_list-group.scss26
-rw-r--r--templates/assets/bootstrap/scss/mixins/_lists.scss7
-rw-r--r--templates/assets/bootstrap/scss/mixins/_nav-divider.scss10
-rw-r--r--templates/assets/bootstrap/scss/mixins/_navbar-align.scss9
-rw-r--r--templates/assets/bootstrap/scss/mixins/_pagination.scss21
-rw-r--r--templates/assets/bootstrap/scss/mixins/_reset-text.scss18
-rw-r--r--templates/assets/bootstrap/scss/mixins/_resize.scss6
-rw-r--r--templates/assets/bootstrap/scss/mixins/_screen-reader.scss35
-rw-r--r--templates/assets/bootstrap/scss/mixins/_size.scss6
-rw-r--r--templates/assets/bootstrap/scss/mixins/_table-row.scss30
-rw-r--r--templates/assets/bootstrap/scss/mixins/_text-emphasis.scss12
-rw-r--r--templates/assets/bootstrap/scss/mixins/_text-hide.scss8
-rw-r--r--templates/assets/bootstrap/scss/mixins/_text-truncate.scss8
-rw-r--r--templates/assets/bootstrap/scss/mixins/_transforms.scss14
-rw-r--r--templates/assets/bootstrap/scss/mixins/_transition.scss9
-rw-r--r--templates/assets/bootstrap/scss/mixins/_visibility.scss5
32 files changed, 898 insertions, 0 deletions
diff --git a/templates/assets/bootstrap/scss/mixins/_alert.scss b/templates/assets/bootstrap/scss/mixins/_alert.scss
new file mode 100644
index 0000000..1e9307e
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_alert.scss
@@ -0,0 +1,14 @@
+// Alerts
+
+@mixin alert-variant($background, $border, $body-color) {
+ color: $body-color;
+ background-color: $background;
+ border-color: $border;
+
+ hr {
+ border-top-color: darken($border, 5%);
+ }
+ .alert-link {
+ color: darken($body-color, 10%);
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_background-variant.scss b/templates/assets/bootstrap/scss/mixins/_background-variant.scss
new file mode 100644
index 0000000..54a734d
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_background-variant.scss
@@ -0,0 +1,12 @@
+// Contextual backgrounds
+
+@mixin bg-variant($parent, $color) {
+ #{$parent} {
+ background-color: $color !important;
+ }
+ a#{$parent} {
+ @include hover-focus {
+ background-color: darken($color, 10%) !important;
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_badge.scss b/templates/assets/bootstrap/scss/mixins/_badge.scss
new file mode 100644
index 0000000..9fa44b6
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_badge.scss
@@ -0,0 +1,11 @@
+// Badges
+
+@mixin badge-variant($color) {
+ background-color: $color;
+
+ &[href] {
+ @include hover-focus {
+ background-color: darken($color, 10%);
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_border-radius.scss b/templates/assets/bootstrap/scss/mixins/_border-radius.scss
new file mode 100644
index 0000000..2024feb
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_border-radius.scss
@@ -0,0 +1,35 @@
+// Single side border-radius
+
+@mixin border-radius($radius: $border-radius) {
+ @if $enable-rounded {
+ border-radius: $radius;
+ }
+}
+
+@mixin border-top-radius($radius) {
+ @if $enable-rounded {
+ border-top-left-radius: $radius;
+ border-top-right-radius: $radius;
+ }
+}
+
+@mixin border-right-radius($radius) {
+ @if $enable-rounded {
+ border-top-right-radius: $radius;
+ border-bottom-right-radius: $radius;
+ }
+}
+
+@mixin border-bottom-radius($radius) {
+ @if $enable-rounded {
+ border-bottom-right-radius: $radius;
+ border-bottom-left-radius: $radius;
+ }
+}
+
+@mixin border-left-radius($radius) {
+ @if $enable-rounded {
+ border-top-left-radius: $radius;
+ border-bottom-left-radius: $radius;
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_box-shadow.scss b/templates/assets/bootstrap/scss/mixins/_box-shadow.scss
new file mode 100644
index 0000000..b2410e5
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_box-shadow.scss
@@ -0,0 +1,5 @@
+@mixin box-shadow($shadow...) {
+ @if $enable-shadows {
+ box-shadow: $shadow;
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_breakpoints.scss b/templates/assets/bootstrap/scss/mixins/_breakpoints.scss
new file mode 100644
index 0000000..904b60f
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_breakpoints.scss
@@ -0,0 +1,95 @@
+// Breakpoint viewport sizes and media queries.
+//
+// Breakpoints are defined as a map of (name: minimum width), order from small to large:
+//
+// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)
+//
+// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.
+
+// Name of the next breakpoint, or null for the last breakpoint.
+//
+// >> breakpoint-next(sm)
+// md
+// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// md
+// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))
+// md
+@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
+ $n: index($breakpoint-names, $name);
+ @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
+}
+
+// Minimum breakpoint width. Null for the smallest (first) breakpoint.
+//
+// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// 576px
+@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {
+ $min: map-get($breakpoints, $name);
+ @return if($min != 0, $min, null);
+}
+
+// Maximum breakpoint width. Null for the largest (last) breakpoint.
+// The maximum value is calculated as the minimum of the next one less 0.1.
+//
+// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// 767px
+@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {
+ $next: breakpoint-next($name, $breakpoints);
+ @return if($next, breakpoint-min($next, $breakpoints) - 1px, null);
+}
+
+// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.
+// Useful for making responsive utilities.
+//
+// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// "" (Returns a blank string)
+// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// "-sm"
+@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {
+ @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}");
+}
+
+// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.
+// Makes the @content apply to the given breakpoint and wider.
+@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {
+ $min: breakpoint-min($name, $breakpoints);
+ @if $min {
+ @media (min-width: $min) {
+ @content;
+ }
+ } @else {
+ @content;
+ }
+}
+
+// Media of at most the maximum breakpoint width. No query for the largest breakpoint.
+// Makes the @content apply to the given breakpoint and narrower.
+@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {
+ $max: breakpoint-max($name, $breakpoints);
+ @if $max {
+ @media (max-width: $max) {
+ @content;
+ }
+ } @else {
+ @content;
+ }
+}
+
+// Media that spans multiple breakpoint widths.
+// Makes the @content apply between the min and max breakpoints
+@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {
+ @include media-breakpoint-up($lower, $breakpoints) {
+ @include media-breakpoint-down($upper, $breakpoints) {
+ @content;
+ }
+ }
+}
+
+// Media between the breakpoint's minimum and maximum widths.
+// No minimum for the smallest breakpoint, and no maximum for the largest one.
+// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.
+@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {
+ @include media-breakpoint-between($name, $name, $breakpoints) {
+ @content;
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_buttons.scss b/templates/assets/bootstrap/scss/mixins/_buttons.scss
new file mode 100644
index 0000000..91eb444
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_buttons.scss
@@ -0,0 +1,86 @@
+// Button variants
+//
+// Easily pump out default styles, as well as :hover, :focus, :active,
+// and disabled options for all buttons
+
+@mixin button-variant($color, $background, $border) {
+ $active-background: darken($background, 10%);
+ $active-border: darken($border, 12%);
+
+ color: $color;
+ background-color: $background;
+ border-color: $border;
+ @include box-shadow($btn-box-shadow);
+
+ // Hover and focus styles are shared
+ @include hover {
+ color: $color;
+ background-color: $active-background;
+ border-color: $active-border;
+ }
+ &:focus,
+ &.focus {
+ // Avoid using mixin so we can pass custom focus shadow properly
+ @if $enable-shadows {
+ box-shadow: $btn-box-shadow, 0 0 0 2px rgba($border, .5);
+ } @else {
+ box-shadow: 0 0 0 2px rgba($border, .5);
+ }
+ }
+
+ // Disabled comes first so active can properly restyle
+ &.disabled,
+ &:disabled {
+ background-color: $background;
+ border-color: $border;
+ }
+
+ &:active,
+ &.active,
+ .show > &.dropdown-toggle {
+ color: $color;
+ background-color: $active-background;
+ background-image: none; // Remove the gradient for the pressed/active state
+ border-color: $active-border;
+ @include box-shadow($btn-active-box-shadow);
+ }
+}
+
+@mixin button-outline-variant($color, $color-hover: #fff) {
+ color: $color;
+ background-color: transparent;
+ background-image: none;
+ border-color: $color;
+
+ @include hover {
+ color: $color-hover;
+ background-color: $color;
+ border-color: $color;
+ }
+
+ &:focus,
+ &.focus {
+ box-shadow: 0 0 0 2px rgba($color, .5);
+ }
+
+ &.disabled,
+ &:disabled {
+ color: $color;
+ background-color: transparent;
+ }
+
+ &:active,
+ &.active,
+ .show > &.dropdown-toggle {
+ color: $color-hover;
+ background-color: $color;
+ border-color: $color;
+ }
+}
+
+// Button sizes
+@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {
+ padding: $padding-y $padding-x;
+ font-size: $font-size;
+ @include border-radius($border-radius);
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_cards.scss b/templates/assets/bootstrap/scss/mixins/_cards.scss
new file mode 100644
index 0000000..4b1232d
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_cards.scss
@@ -0,0 +1,47 @@
+// Card variants
+
+@mixin card-variant($background, $border) {
+ background-color: $background;
+ border-color: $border;
+
+ .card-header,
+ .card-footer {
+ background-color: transparent;
+ }
+}
+
+@mixin card-outline-variant($color) {
+ background-color: transparent;
+ border-color: $color;
+}
+
+//
+// Inverse text within a card for use with dark backgrounds
+//
+
+@mixin card-inverse {
+ color: rgba(255,255,255,.65);
+
+ .card-header,
+ .card-footer {
+ background-color: transparent;
+ border-color: rgba(255,255,255,.2);
+ }
+ .card-header,
+ .card-footer,
+ .card-title,
+ .card-blockquote {
+ color: #fff;
+ }
+ .card-link,
+ .card-text,
+ .card-subtitle,
+ .card-blockquote .blockquote-footer {
+ color: rgba(255,255,255,.65);
+ }
+ .card-link {
+ @include hover-focus {
+ color: $card-link-hover-color;
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_clearfix.scss b/templates/assets/bootstrap/scss/mixins/_clearfix.scss
new file mode 100644
index 0000000..11a977b
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_clearfix.scss
@@ -0,0 +1,7 @@
+@mixin clearfix() {
+ &::after {
+ display: block;
+ clear: both;
+ content: "";
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_float.scss b/templates/assets/bootstrap/scss/mixins/_float.scss
new file mode 100644
index 0000000..b43116f
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_float.scss
@@ -0,0 +1,9 @@
+@mixin float-left {
+ float: left !important;
+}
+@mixin float-right {
+ float: right !important;
+}
+@mixin float-none {
+ float: none !important;
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_forms.scss b/templates/assets/bootstrap/scss/mixins/_forms.scss
new file mode 100644
index 0000000..33b186a
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_forms.scss
@@ -0,0 +1,55 @@
+// Form validation states
+//
+// Used in _forms.scss to generate the form validation CSS for warnings, errors,
+// and successes.
+
+@mixin form-control-validation($color) {
+ // Color the label and help text
+ .form-control-feedback,
+ .form-control-label,
+ .col-form-label,
+ .form-check-label,
+ .custom-control {
+ color: $color;
+ }
+
+ // Set the border and box shadow on specific inputs to match
+ .form-control,
+ .custom-select,
+ .custom-file-control {
+ border-color: $color;
+
+ &:focus {
+ @include box-shadow($input-box-shadow, 0 0 6px lighten($color, 20%));
+ }
+ }
+
+ // Set validation states also for addons
+ .input-group-addon {
+ color: $color;
+ background-color: lighten($color, 40%);
+ border-color: $color;
+ }
+}
+
+// Form control focus state
+//
+// Generate a customized focus state and for any input with the specified color,
+// which defaults to the `@input-border-focus` variable.
+//
+// We highly encourage you to not customize the default value, but instead use
+// this to tweak colors on an as-needed basis. This aesthetic change is based on
+// WebKit's default styles, but applicable to a wider range of browsers. Its
+// usability and accessibility should be taken into account with any change.
+//
+// Example usage: change the default blue border and shadow to white for better
+// contrast against a dark gray background.
+@mixin form-control-focus() {
+ &:focus {
+ color: $input-color-focus;
+ background-color: $input-bg-focus;
+ border-color: $input-border-focus;
+ outline: none;
+ @include box-shadow($input-box-shadow-focus);
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_gradients.scss b/templates/assets/bootstrap/scss/mixins/_gradients.scss
new file mode 100644
index 0000000..bad79f9
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_gradients.scss
@@ -0,0 +1,37 @@
+// Gradients
+
+// Horizontal gradient, from left to right
+//
+// Creates two color stops, start and end, by specifying a color and position for each color stop.
+@mixin gradient-x($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
+ background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);
+ background-repeat: repeat-x;
+}
+
+// Vertical gradient, from top to bottom
+//
+// Creates two color stops, start and end, by specifying a color and position for each color stop.
+@mixin gradient-y($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
+ background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);
+ background-repeat: repeat-x;
+}
+
+@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {
+ background-image: linear-gradient($deg, $start-color, $end-color);
+ background-repeat: repeat-x;
+}
+@mixin gradient-x-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
+ background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
+ background-repeat: no-repeat;
+}
+@mixin gradient-y-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
+ background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
+ background-repeat: no-repeat;
+}
+@mixin gradient-radial($inner-color: #555, $outer-color: #333) {
+ background-image: radial-gradient(circle, $inner-color, $outer-color);
+ background-repeat: no-repeat;
+}
+@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {
+ background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_grid-framework.scss b/templates/assets/bootstrap/scss/mixins/_grid-framework.scss
new file mode 100644
index 0000000..0aa814a
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_grid-framework.scss
@@ -0,0 +1,65 @@
+// Framework grid generation
+//
+// Used only by Bootstrap to generate the correct number of grid classes given
+// any value of `$grid-columns`.
+
+@mixin make-grid-columns($columns: $grid-columns, $gutters: $grid-gutter-widths, $breakpoints: $grid-breakpoints) {
+ // Common properties for all breakpoints
+ %grid-column {
+ position: relative;
+ width: 100%;
+ min-height: 1px; // Prevent columns from collapsing when empty
+
+ @include make-gutters($gutters);
+ }
+
+ @each $breakpoint in map-keys($breakpoints) {
+ $infix: breakpoint-infix($breakpoint, $breakpoints);
+
+ // Allow columns to stretch full width below their breakpoints
+ @for $i from 1 through $columns {
+ .col#{$infix}-#{$i} {
+ @extend %grid-column;
+ }
+ }
+ .col#{$infix} {
+ @extend %grid-column;
+ }
+
+ @include media-breakpoint-up($breakpoint, $breakpoints) {
+ // Provide basic `.col-{bp}` classes for equal-width flexbox columns
+ .col#{$infix} {
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%;
+ }
+ .col#{$infix}-auto {
+ flex: 0 0 auto;
+ width: auto;
+ }
+
+ @for $i from 1 through $columns {
+ .col#{$infix}-#{$i} {
+ @include make-col($i, $columns);
+ }
+ }
+
+ @each $modifier in (pull, push) {
+ @for $i from 0 through $columns {
+ .#{$modifier}#{$infix}-#{$i} {
+ @include make-col-modifier($modifier, $i, $columns)
+ }
+ }
+ }
+
+ // `$columns - 1` because offsetting by the width of an entire row isn't possible
+ @for $i from 0 through ($columns - 1) {
+ @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-xs-0
+ .offset#{$infix}-#{$i} {
+ @include make-col-modifier(offset, $i, $columns)
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_grid.scss b/templates/assets/bootstrap/scss/mixins/_grid.scss
new file mode 100644
index 0000000..eb6c012
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_grid.scss
@@ -0,0 +1,100 @@
+/// Grid system
+//
+// Generate semantic grid columns with these mixins.
+
+@mixin make-container($gutters: $grid-gutter-widths) {
+ position: relative;
+ margin-right: auto;
+ margin-left: auto;
+
+ @each $breakpoint in map-keys($gutters) {
+ @include media-breakpoint-up($breakpoint) {
+ $gutter: map-get($gutters, $breakpoint);
+ padding-right: ($gutter / 2);
+ padding-left: ($gutter / 2);
+ }
+ }
+}
+
+
+// For each breakpoint, define the maximum width of the container in a media query
+@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {
+ @each $breakpoint, $container-max-width in $max-widths {
+ @include media-breakpoint-up($breakpoint, $breakpoints) {
+ width: $container-max-width;
+ max-width: 100%;
+ }
+ }
+}
+
+@mixin make-gutters($gutters: $grid-gutter-widths) {
+ @each $breakpoint in map-keys($gutters) {
+ @include media-breakpoint-up($breakpoint) {
+ $gutter: map-get($gutters, $breakpoint);
+ padding-right: ($gutter / 2);
+ padding-left: ($gutter / 2);
+ }
+ }
+}
+
+@mixin make-row($gutters: $grid-gutter-widths) {
+ display: flex;
+ flex-wrap: wrap;
+
+ @each $breakpoint in map-keys($gutters) {
+ @include media-breakpoint-up($breakpoint) {
+ $gutter: map-get($gutters, $breakpoint);
+ margin-right: ($gutter / -2);
+ margin-left: ($gutter / -2);
+ }
+ }
+}
+
+@mixin make-col-ready($gutters: $grid-gutter-widths) {
+ position: relative;
+ // Prevent columns from becoming too narrow when at smaller grid tiers by
+ // always setting `width: 100%;`. This works because we use `flex` values
+ // later on to override this initial width.
+ width: 100%;
+ min-height: 1px; // Prevent collapsing
+
+ @each $breakpoint in map-keys($gutters) {
+ @include media-breakpoint-up($breakpoint) {
+ $gutter: map-get($gutters, $breakpoint);
+ padding-right: ($gutter / 2);
+ padding-left: ($gutter / 2);
+ }
+ }
+}
+
+@mixin make-col($size, $columns: $grid-columns) {
+ flex: 0 0 percentage($size / $columns);
+ // width: percentage($size / $columns);
+ // Add a `max-width` to ensure content within each column does not blow out
+ // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari
+ // do not appear to require this.
+ max-width: percentage($size / $columns);
+}
+
+@mixin make-col-offset($size, $columns: $grid-columns) {
+ margin-left: percentage($size / $columns);
+}
+
+@mixin make-col-push($size, $columns: $grid-columns) {
+ left: if($size > 0, percentage($size / $columns), auto);
+}
+
+@mixin make-col-pull($size, $columns: $grid-columns) {
+ right: if($size > 0, percentage($size / $columns), auto);
+}
+
+@mixin make-col-modifier($type, $size, $columns) {
+ // Work around the lack of dynamic mixin @include support (https://github.com/sass/sass/issues/626)
+ @if $type == push {
+ @include make-col-push($size, $columns);
+ } @else if $type == pull {
+ @include make-col-pull($size, $columns);
+ } @else if $type == offset {
+ @include make-col-offset($size, $columns);
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_hover.scss b/templates/assets/bootstrap/scss/mixins/_hover.scss
new file mode 100644
index 0000000..4aa4b1d
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_hover.scss
@@ -0,0 +1,60 @@
+@mixin hover {
+ // TODO: re-enable along with mq4-hover-shim
+// @if $enable-hover-media-query {
+// // See Media Queries Level 4: https://drafts.csswg.org/mediaqueries/#hover
+// // Currently shimmed by https://github.com/twbs/mq4-hover-shim
+// @media (hover: hover) {
+// &:hover { @content }
+// }
+// }
+// @else {
+// scss-lint:disable Indentation
+ &:hover { @content }
+// scss-lint:enable Indentation
+// }
+}
+
+
+@mixin hover-focus {
+ @if $enable-hover-media-query {
+ &:focus { @content }
+ @include hover { @content }
+ } @else {
+ &:focus,
+ &:hover {
+ @content
+ }
+ }
+}
+
+@mixin plain-hover-focus {
+ @if $enable-hover-media-query {
+ &,
+ &:focus {
+ @content
+ }
+ @include hover { @content }
+ } @else {
+ &,
+ &:focus,
+ &:hover {
+ @content
+ }
+ }
+}
+
+@mixin hover-focus-active {
+ @if $enable-hover-media-query {
+ &:focus,
+ &:active {
+ @content
+ }
+ @include hover { @content }
+ } @else {
+ &:focus,
+ &:active,
+ &:hover {
+ @content
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_image.scss b/templates/assets/bootstrap/scss/mixins/_image.scss
new file mode 100644
index 0000000..c2b45f2
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_image.scss
@@ -0,0 +1,36 @@
+// Image Mixins
+// - Responsive image
+// - Retina image
+
+
+// Responsive image
+//
+// Keep images from scaling beyond the width of their parents.
+
+@mixin img-fluid {
+ // Part 1: Set a maximum relative to the parent
+ max-width: 100%;
+ // Part 2: Override the height to auto, otherwise images will be stretched
+ // when setting a width and height attribute on the img element.
+ height: auto;
+}
+
+
+// Retina image
+//
+// Short retina mixin for setting background-image and -size.
+
+@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
+ background-image: url($file-1x);
+
+ // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,
+ // but doesn't convert dppx=>dpi.
+ // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.
+ // Compatibility info: http://caniuse.com/#feat=css-media-resolution
+ @media
+ only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx
+ only screen and (min-resolution: 2dppx) { // Standardized
+ background-image: url($file-2x);
+ background-size: $width-1x $height-1x;
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_list-group.scss b/templates/assets/bootstrap/scss/mixins/_list-group.scss
new file mode 100644
index 0000000..ba27b50
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_list-group.scss
@@ -0,0 +1,26 @@
+// List Groups
+
+@mixin list-group-item-variant($state, $background, $color) {
+ .list-group-item-#{$state} {
+ color: $color;
+ background-color: $background;
+ }
+
+ //scss-lint:disable QualifyingElement
+ a.list-group-item-#{$state},
+ button.list-group-item-#{$state} {
+ color: $color;
+
+ @include hover-focus {
+ color: $color;
+ background-color: darken($background, 5%);
+ }
+
+ &.active {
+ color: #fff;
+ background-color: $color;
+ border-color: $color;
+ }
+ }
+ // scss-lint:enable QualifyingElement
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_lists.scss b/templates/assets/bootstrap/scss/mixins/_lists.scss
new file mode 100644
index 0000000..2518562
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_lists.scss
@@ -0,0 +1,7 @@
+// Lists
+
+// Unstyled keeps list items block level, just removes default browser padding and list-style
+@mixin list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_nav-divider.scss b/templates/assets/bootstrap/scss/mixins/_nav-divider.scss
new file mode 100644
index 0000000..557673c
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_nav-divider.scss
@@ -0,0 +1,10 @@
+// Horizontal dividers
+//
+// Dividers (basically an hr) within dropdowns and nav lists
+
+@mixin nav-divider($color: #e5e5e5) {
+ height: 1px;
+ margin: ($spacer / 2) 0;
+ overflow: hidden;
+ background-color: $color;
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_navbar-align.scss b/templates/assets/bootstrap/scss/mixins/_navbar-align.scss
new file mode 100644
index 0000000..c454a4f
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_navbar-align.scss
@@ -0,0 +1,9 @@
+// Navbar vertical align
+//
+// Vertically center elements in the navbar.
+// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
+
+// @mixin navbar-vertical-align($element-height) {
+// margin-top: (($navbar-height - $element-height) / 2);
+// margin-bottom: (($navbar-height - $element-height) / 2);
+// }
diff --git a/templates/assets/bootstrap/scss/mixins/_pagination.scss b/templates/assets/bootstrap/scss/mixins/_pagination.scss
new file mode 100644
index 0000000..8cd9317
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_pagination.scss
@@ -0,0 +1,21 @@
+// Pagination
+
+@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
+ .page-link {
+ padding: $padding-y $padding-x;
+ font-size: $font-size;
+ }
+
+ .page-item {
+ &:first-child {
+ .page-link {
+ @include border-left-radius($border-radius);
+ }
+ }
+ &:last-child {
+ .page-link {
+ @include border-right-radius($border-radius);
+ }
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_reset-text.scss b/templates/assets/bootstrap/scss/mixins/_reset-text.scss
new file mode 100644
index 0000000..4cf9e79
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_reset-text.scss
@@ -0,0 +1,18 @@
+// scss-lint:disable DuplicateProperty
+@mixin reset-text {
+ font-family: $font-family-base;
+ // We deliberately do NOT reset font-size or word-wrap.
+ font-style: normal;
+ font-weight: $font-weight-normal;
+ line-height: $line-height-base;
+ text-align: left; // Fallback for where `start` is not supported
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_resize.scss b/templates/assets/bootstrap/scss/mixins/_resize.scss
new file mode 100644
index 0000000..66f233a
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_resize.scss
@@ -0,0 +1,6 @@
+// Resize anything
+
+@mixin resizable($direction) {
+ overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
+ resize: $direction; // Options: horizontal, vertical, both
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_screen-reader.scss b/templates/assets/bootstrap/scss/mixins/_screen-reader.scss
new file mode 100644
index 0000000..a5fa51c
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_screen-reader.scss
@@ -0,0 +1,35 @@
+// Only display content to screen readers
+//
+// See: http://a11yproject.com/posts/how-to-hide-content
+// See: http://hugogiraudel.com/2016/10/13/css-hide-and-seek/
+
+@mixin sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0,0,0,0);
+ white-space: nowrap;
+ clip-path: inset(50%);
+ border: 0;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+//
+// Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+//
+// Credit: HTML5 Boilerplate
+
+@mixin sr-only-focusable {
+ &:active,
+ &:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ overflow: visible;
+ clip: auto;
+ white-space: normal;
+ clip-path: none;
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_size.scss b/templates/assets/bootstrap/scss/mixins/_size.scss
new file mode 100644
index 0000000..b9dd48e
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_size.scss
@@ -0,0 +1,6 @@
+// Sizing shortcuts
+
+@mixin size($width, $height: $width) {
+ width: $width;
+ height: $height;
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_table-row.scss b/templates/assets/bootstrap/scss/mixins/_table-row.scss
new file mode 100644
index 0000000..84f1d30
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_table-row.scss
@@ -0,0 +1,30 @@
+// Tables
+
+@mixin table-row-variant($state, $background) {
+ // Exact selectors below required to override `.table-striped` and prevent
+ // inheritance to nested tables.
+ .table-#{$state} {
+ &,
+ > th,
+ > td {
+ background-color: $background;
+ }
+ }
+
+ // Hover states for `.table-hover`
+ // Note: this is not available for cells or rows within `thead` or `tfoot`.
+ .table-hover {
+ $hover-background: darken($background, 5%);
+
+ .table-#{$state} {
+ @include hover {
+ background-color: $hover-background;
+
+ > td,
+ > th {
+ background-color: $hover-background;
+ }
+ }
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_text-emphasis.scss b/templates/assets/bootstrap/scss/mixins/_text-emphasis.scss
new file mode 100644
index 0000000..9cd4b6a
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_text-emphasis.scss
@@ -0,0 +1,12 @@
+// Typography
+
+@mixin text-emphasis-variant($parent, $color) {
+ #{$parent} {
+ color: $color !important;
+ }
+ a#{$parent} {
+ @include hover-focus {
+ color: darken($color, 10%) !important;
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_text-hide.scss b/templates/assets/bootstrap/scss/mixins/_text-hide.scss
new file mode 100644
index 0000000..52a38a9
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_text-hide.scss
@@ -0,0 +1,8 @@
+// CSS image replacement
+@mixin text-hide() {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_text-truncate.scss b/templates/assets/bootstrap/scss/mixins/_text-truncate.scss
new file mode 100644
index 0000000..3504bb1
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_text-truncate.scss
@@ -0,0 +1,8 @@
+// Text truncate
+// Requires inline-block or block for proper styling
+
+@mixin text-truncate() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_transforms.scss b/templates/assets/bootstrap/scss/mixins/_transforms.scss
new file mode 100644
index 0000000..4005c9d
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_transforms.scss
@@ -0,0 +1,14 @@
+// Applies the given styles only when the browser support CSS3 3D transforms.
+@mixin if-supports-3d-transforms() {
+ @media (-webkit-transform-3d) {
+ // Old Safari, Old Android
+ // http://caniuse.com/#feat=css-featurequeries
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/@media/-webkit-transform-3d
+ @content;
+ }
+
+ @supports (transform: translate3d(0,0,0)) {
+ // The Proper Way: Using a CSS feature query
+ @content;
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_transition.scss b/templates/assets/bootstrap/scss/mixins/_transition.scss
new file mode 100644
index 0000000..7e33dee
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_transition.scss
@@ -0,0 +1,9 @@
+@mixin transition($transition...) {
+ @if $enable-transitions {
+ @if length($transition) == 0 {
+ transition: $transition-base;
+ } @else {
+ transition: $transition;
+ }
+ }
+}
diff --git a/templates/assets/bootstrap/scss/mixins/_visibility.scss b/templates/assets/bootstrap/scss/mixins/_visibility.scss
new file mode 100644
index 0000000..f67fc1c
--- /dev/null
+++ b/templates/assets/bootstrap/scss/mixins/_visibility.scss
@@ -0,0 +1,5 @@
+// Visibility
+
+@mixin invisible($visibility) {
+ visibility: $visibility !important;
+}