css - 双循环断点 + 容器宽度,如 Bootstrap
问题描述
我正在开发自己的 CSS 库,并希望将 Bootstrap 的双循环(断点和容器宽度)添加到此网格:http ://hugeinc.github.io/flexboxgrid-sass/
我有这个断点的 sass 地图:
$grid-breakpoints: (
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px,
xxl: 1400px) !default;
这是网格的当前映射,我想删除断点第三个值。
我还为您提供了网格混合和循环,以便您理解代码:
$container-sizes:
sm auto 576px,
md auto 768px,
lg 960px 992px,
xl 1140px 1200px,
xxl 1320px 1400px !default;
@mixin sass-col-common {
padding-right: $half-gutter-width;
padding-left: $half-gutter-width;
@mixin grid-systeme($name, $size) {
.grid-wrapper {
max-width: $size;
padding-right: $outer-margin;
padding-left: $outer-margin;
margin: 0 auto;
}
.col-#{$name} {
@include sass-col-common;
flex-basis: auto;
}
@for $i from 1 through $grid-columns {
.col-#{$name}-#{$i} {
max-width: 100% / $grid-columns * $i;
@include sass-col-common;
flex-basis: 100% / $grid-columns * $i;
}
}
@for $i from 0 through $grid-columns {
.offset-#{$name}-#{$i} {
@include sass-col-common;
@if $i==0 {
margin-left: 0;
}
@else {
margin-left: 100% / $grid-columns * $i;
}
}
}
.col-#{$name} {
max-width: 100%;
flex-grow: 1;
flex-basis: 0;
}
}
@include grid-systeme(xs, auto);
@each $name,
$size,
$container-size in $container-sizes {
@media only screen and (min-width: $container-size) {
@include grid-systeme($name, $size);
}
}
关于 mixins,我从 Bootstrap 复制了这个:
@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {
$min: breakpoint-min($name, $breakpoints);
@if $min {
@media (min-width: $min) {
@content;
}
}
@else {
@content;
}
}
功能相同,我从 Bootstrap 中获取了这些功能:
// 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($grid-breakpoints, $name);
@return if($min !=0, $min, null);
}
// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.
// 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}");
}
例如,我有这个循环,它可以进行响应式定位:
$positions:
0 0%,
25 25%,
50 50%,
75 75%,
100 100%;
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
@each $value, $position in $positions {
.top#{$infix}-#{$value}{
top: $position !important;
}
.left#{$infix}-#{$value}{
left: $position !important;
}
.bottom#{$infix}-#{$value}{
bottom: $position !important;
}
.right#{$infix}-#{$value}{
right: $position !important;
}
}
}
}
我希望能够为网格构建相同类型的循环,使用两个 Sass 映射,一个用于断点,一个用于容器宽度,如下所示:
这样,我只能在 $grid-breakpoints 上循环实用程序(位置、边距...)以及在 $grid-breakpoints 和 $container-widths 上循环。它比我现在拥有的更干净。
$grid-breakpoints: (
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px,
xxl: 1400px) !default;
$container-widths: (
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px,
xxl: 1320px
) !default;
现在我不明白 Bootstrap 是如何处理它的。谢谢您的帮助。
解决方案
推荐阅读
- javascript - 将导航栏 LOGIN 更改为 LOGOUT
- php - 无法在 PHP 中检测到任何有意义的时间差异(恒定时间攻击)
- bluetooth-lowenergy - 使用 Gattlib 包写入而不响应 BLE 设备-RN4871
- mule-studio - 从 mulesoft 调用 oracle 包
- teradata - 修剪雪花中的列数据
- java - 为什么我得到 DocumentBuilder 解析异常?
- php - 如何在 Symfony 中从 Sentry 中排除异常?
- javascript - 如何使用单槽修改数据表中的任何列
- java - 如何将地图列表转换为哈希数组
- javascript - 在使用 flex-grids 时,有没有办法解决在 slideToggle() 内的 slideToggle() 内的 slideToggle() 问题?