145 lines
3.6 KiB
SCSS
145 lines
3.6 KiB
SCSS
|
// Миксин для media-breakpoint-up
|
||
|
@mixin media-breakpoint-up($breakpoint, $breakpoints: $grid-breakpoints) {
|
||
|
$min-width: map-get($breakpoints, $breakpoint);
|
||
|
|
||
|
@if $min-width {
|
||
|
@media (min-width: #{$min-width}) {
|
||
|
@content;
|
||
|
}
|
||
|
} @else {
|
||
|
@warn "Нет валидного брейкпоинта для '#{$breakpoint}'.";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Миксин для media-breakpoint-down
|
||
|
@mixin media-breakpoint-down($breakpoint, $breakpoints: $grid-breakpoints) {
|
||
|
$max-width: map-get($breakpoints, $breakpoint) - 0.02px;
|
||
|
|
||
|
@if $max-width {
|
||
|
@media (max-width: #{$max-width}) {
|
||
|
@content;
|
||
|
}
|
||
|
} @else {
|
||
|
@warn "Нет валидного брейкпоинта для '#{$breakpoint}'.";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Миксин для media-breakpoint-between
|
||
|
@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {
|
||
|
$min-width: map-get($breakpoints, $lower);
|
||
|
$max-width: map-get($breakpoints, $upper) - 0.02px;
|
||
|
|
||
|
@if $min-width and $max-width {
|
||
|
@media (min-width: #{$min-width}) and (max-width: #{$max-width}) {
|
||
|
@content;
|
||
|
}
|
||
|
} @else {
|
||
|
@warn "Нет валидных брейкпоинтов для '#{$lower}' или '#{$upper}'.";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Миксин make-container
|
||
|
@mixin make-container($max-widths: $container-max-widths, $gutter: $grid-gutter-width) {
|
||
|
width: 100%;
|
||
|
padding-right: $gutter;
|
||
|
padding-left: $gutter;
|
||
|
margin-right: auto;
|
||
|
margin-left: auto;
|
||
|
|
||
|
@each $breakpoint, $max-width in $max-widths {
|
||
|
@include media-breakpoint-up($breakpoint, $grid-breakpoints) {
|
||
|
max-width: #{$max-width};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Миксин make-row
|
||
|
@mixin make-row($gutter: $grid-gutter-width) {
|
||
|
--gutter-x: #{$gutter};
|
||
|
--gutter-y: 0;
|
||
|
|
||
|
display: flex;
|
||
|
flex-wrap: wrap;
|
||
|
margin-top: calc(-1 * var(--gutter-y));
|
||
|
margin-right: calc(-0.5 * var(--gutter-x));
|
||
|
margin-left: calc(-0.5 * var(--gutter-x));
|
||
|
}
|
||
|
|
||
|
// Миксин make-col-ready
|
||
|
@mixin make-col-ready() {
|
||
|
box-sizing: border-box;
|
||
|
flex-shrink: 0;
|
||
|
width: 100%;
|
||
|
max-width: 100%;
|
||
|
padding-right: calc(var(--gutter-x) * 0.5);
|
||
|
padding-left: calc(var(--gutter-x) * 0.5);
|
||
|
margin-top: var(--gutter-y);
|
||
|
}
|
||
|
|
||
|
// Миксин make-col
|
||
|
@mixin make-col($size: false, $columns: $grid-columns) {
|
||
|
@if $size {
|
||
|
flex: 0 0 auto;
|
||
|
width: calc(100% * #{calc($size / $columns)});
|
||
|
} @else {
|
||
|
flex: 1 1 0;
|
||
|
max-width: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Миксин make-col-auto
|
||
|
@mixin make-col-auto() {
|
||
|
flex: 0 0 auto;
|
||
|
width: auto;
|
||
|
}
|
||
|
|
||
|
// Миксин make-col-offset
|
||
|
@mixin make-col-offset($size, $columns: $grid-columns) {
|
||
|
$num: calc($size / $columns);
|
||
|
|
||
|
margin-left: if($num == 0, 0, calc(100% * #{$num}));
|
||
|
}
|
||
|
|
||
|
// Миксин row-cols
|
||
|
@mixin row-cols($count) {
|
||
|
> * {
|
||
|
flex: 0 0 auto;
|
||
|
width: 100% / $count;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Миксин make-grid-columns
|
||
|
@mixin make-grid-columns($columns: $grid-columns, $breakpoints: $grid-breakpoints) {
|
||
|
@each $breakpoint, $value in $breakpoints {
|
||
|
$infix: if($breakpoint == 'xs', '', "-#{$breakpoint}");
|
||
|
|
||
|
@include media-breakpoint-up($breakpoint, $breakpoints) {
|
||
|
@for $i from 1 through $columns {
|
||
|
.col#{$infix}-#{$i} {
|
||
|
@include make-col($i, $columns);
|
||
|
}
|
||
|
|
||
|
.offset#{$infix}-#{$i} {
|
||
|
@include make-col-offset($i, $columns);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Генерация классов контейнера и ряда
|
||
|
.container,
|
||
|
.container-fluid {
|
||
|
@include make-container($container-max-widths, $grid-gutter-width);
|
||
|
}
|
||
|
|
||
|
.row {
|
||
|
@include make-row;
|
||
|
|
||
|
> * {
|
||
|
@include make-col-ready;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Генерация классов столбцов и смещений
|
||
|
@include make-grid-columns($grid-columns, $grid-breakpoints);
|