我找到了一个flexbox/grid layout的SCSS mixin HERE。这种混合Flexbox /网格布局SCSS mixin如何工作?
以下是完整的混入:
@mixin grid-col(
$col: null,
$grid-columns: 12,
$col-offset: null,
$gutter: null,
$condensed: false,
$align-self: null,
$flex-grow: 0,
$flex-shrink:1,
$flex-basis: auto,
$order: null,
$grid-type: skeleton,
$last-child: false
){
@if type-of($col) == number and unitless($col) == true {
$flex-grow: 0;
$flex-shrink: 0;
$flex-basis: percentage($col/$grid-columns);
@if $grid-type == skeleton {
@if $gutter and unit($gutter) == '%' {
$flex-basis: $flex-basis - $gutter;
} @else if $gutter and unitless($gutter) == false {
$flex-basis: calc(#{$flex-basis} - #{$gutter});
}
} @else if $grid-type == margin-offset {
@if $gutter and unit($gutter) == '%' {
$flex-basis: (100% - ($gutter * ($grid-columns/$col - 1)))/($grid-columns/$col);
} @else if $gutter and unitless($gutter) == false {
$flex-basis: calc(#{$flex-basis} - #{$gutter * ($grid-columns/$col - 1)/($grid-columns/$col)});
}
}
@if $col-offset and unit($col-offset) == '%' {
$flex-basis: $flex-basis + $col-offset;
} @else if $col-offset and unitless($col-offset) == false {
$flex-basis: calc(#{$flex-basis} + #{$col-offset});
}
} @else if type-of($col) == number and unitless($col) == false {
$flex-grow: 0;
$flex-shrink: 0;
$flex-basis: $col;
} @else if type-of($col) == string and $col == 'auto' {
$flex-grow: 1;
$flex-shrink: 1;
$flex-basis: auto;
max-width: 100%;
width: auto;
} @else if type-of($col) == string and $col == 'equal' {
// flex: 1
$flex-grow: 1;
$flex-shrink: 1;
$flex-basis: 0;
} @else if type-of($col) == string and $col == 'none' {
// flex: none
$flex-grow: 0;
$flex-shrink: 0;
$flex-basis: auto;
} @else if type-of($col) == string and $col == 'initial' {
// flex: initial
$flex-grow: 0;
$flex-shrink: 1;
$flex-basis: auto;
} @else if type-of($col) == string and $col == 'breakpoint' {
$flex-grow: 0;
$flex-shrink: 1;
$flex-basis: auto;
width: 100%;
}
flex: $flex-grow $flex-shrink $flex-basis;
@if $align-self {
align-self: $align-self;
}
@if type-of($order) == number {
order: $order;
}
@if $gutter and unitless($gutter) == false {
@if $grid-type == skeleton {
@if $condensed == true {
@include grid-gutter($margin: 0 $gutter/2);
} @else {
@include grid-gutter($margin: 0 $gutter/2 $gutter);
}
} @else if $grid-type == margin-offset {
@if type-of($col) == string and $col == 'breakpoint' {
@include grid-gutter($margin-right: 0);
} @else if $last-child {
@include grid-gutter($margin-right: 0);
} @else {
@include grid-gutter($margin-right: $gutter);
}
@if $condensed == false {
@include grid-gutter($margin-bottom: $gutter);
}
}
}
@content;
}
我不明白这个混入所有参数的意思做,例如$condensed: false,
。我曾与flexbox和Scss合作过很多次,但我只是觉得这个mixin稍微超出了我的视野。
具体来说,我挣扎理解混入的这一部分:
@else if $grid-type == margin-offset {
@if $gutter and unit($gutter) == '%' {
$flex-basis: (100% - ($gutter * ($grid-columns/$col - 1)))/($grid-columns/$col);
} @else if $gutter and unitless($gutter) == false {
$flex-basis: calc(#{$flex-basis} - #{$gutter * ($grid-columns/$col - 1)/($grid-columns/$col)});
}
}
有人能解释一下这部分给我吗?
@LGSon这个问题的原因在那里很差 - 它会很快被拒绝并关闭,请参阅[为什么实施和调试问题与软件工程的主题无关?](https://softwareengineering.meta.stackexchange.com/q/7864/ 31260)推荐阅读:** [软件工程(以前称为程序员)是怎么回事?堆栈溢出指南](https://softwareengineering.meta.stackexchange。com/q/7182/31260)** – gnat
@gnat好的,但我已经从_Software Engineering_改为_Code Review _....? IYO,那是个好地方吗?或者你会有什么建议? – LGSon
几乎没有@LGSon - 请参阅[他们的帮助中心](https://codereview.stackexchange.com/help/on-topic)中的“六是”要求,它看起来并不符合以下要求:“To据我所知,代码是否按预期工作?“ – gnat