Чтобы процитировать мои источники, я конвертирую функциональность плиток из Metro-UI в пользовательский проект SCSS / Angular, который я строю.До сих пор я был в состоянии преобразовать большую часть этого 1: 1, наблюдая за mixins, include и переменными.Тем не менее, я не слежу за тем, что команда Metro делает в этом разделе, когда дело доходит до расстановки колонок.Их исходный код (из их LESS-файла - строка 243):
.tiles-grid {
.create-tiles-cells(@i: 1, @k: 1) when (@k <= @i) {
.tile-small.col-@{k} {
grid-column: @k / span 1;
}
.tile-medium.col-@{k} {
grid-column: @k / span 2;
}
.tile-wide.col-@{k} {
grid-column: @k / span 4;
}
.tile-large.col-@{k} {
grid-column: @k / span 4;
}
.tile-small.row-@{k} {
grid-row: @k / span 1;
}
.tile-medium.row-@{k} {
grid-row: @k / span 2;
}
.tile-wide.row-@{k} {
grid-row: @k / span 4;
}
.tile-large.row-@{k} {
grid-row: @k / span 4;
}
//.col-@{k} {
// grid-column: @k;
//}
//.row-@{k} {
// grid-row: @k;
//}
.create-tiles-cells(@i; @k + 1);
}
.create-tiles-cells(12);
}
.tiles-grid {
&.size-half {
width: 70px + @tileMargin * 2;
}
.create-tiles-grid-size(@i: 1, @k: 1) when (@k <= @i) {
&.size-@{k} {
width: (@tileCellSize + @tileMargin * 2) * @k;
}
.create-tiles-grid-size(@i; @k + 1);
}
.create-tiles-grid-size(10);
}
.tiles-grid {
.generate-tiles-media-options(@mediaBreakpointListMobileLength);
.generate-tiles-media-options(@name, @j: 1) when (@j <= @mediaBreakpointListMobileLength) {
@m: extract(@mediaBreakpointListMobile, @j);
@media screen and (min-width: @@m) {
.create-tiles-cells(@i: 1, @k: 1) when (@k <= @i) {
.col-@{m}-@{k} {
grid-column: @k;
}
.row-@{m}-@{k} {
grid-row: @k;
}
.create-tiles-cells(@i; @k + 1);
}
.create-tiles-cells(12);
.create-tiles-grid-size(@i: 1, @k: 1) when (@k <= @i) {
&.size-@{m}-half {
width: 70px + @tileMargin * 2;
}
&.size-@{m}-@{k} {
width: (@tileCellSize + @tileMargin * 2) * @k;
}
.create-tiles-grid-size(@i; @k + 1);
}
.create-tiles-grid-size(10);
}
.generate-tiles-media-options(@name, @j + 1);
}
}
Мое преобразование на данный момент:
.tiles-grid {
@mixin create-tiles-cells($i: 1, $k: 1) when ($k <= $i){
.tile-small.col-#{$k} {
grid-column: $k / span 1;
}
.tile-medium.col-#{$k} {
grid-column: $k / span 2;
}
.tile-wide.col-#{$k} {
grid-column: $k / span 4;
}
.tile-large.col-#{$k} {
grid-column: $k / span 4;
}
.tile-small.row-#{$k} {
grid-row: $k / span 1;
}
.tile-medium.row-#{$k} {
grid-row: $k / span 2;
}
.tile-wide.row-#{$k} {
grid-row: $k / span 4;
}
.tile-large.row-#{$k} {
grid-row: $k / span 4;
}
//.col-${k} {
// grid-column: $k;
//}
//.row-${k} {
// grid-row: $k;
//}
@include create-tiles-cells($i, $k + 1);
}
@include create-tiles-cells(12);
}
.tiles-grid {
&.size-half {
width: 70px + $tileMargin * 2;
}
@mixin create-tiles-grid-size($i: 1, $k: 1) when ($k <= $i){
&.size-#{$k} {
width: ($tileCellSize + $tileMargin * 2) * $k;
}
@include create-tiles-grid-size($i, $k + 1);
}
@include create-tiles-grid-size(10);
}
.tiles-grid {
@include generate-tiles-media-options($mediaBreakpointListMobileLength);
@mixin generate-tiles-media-options($name, $j: 1) when ($j <= $mediaBreakpointListMobileLength){
$m: extract($mediaBreakpointListMobile, $j);
@media screen and (min-width: $m) {
@mixin create-tiles-cells($i: 1, $k: 1) when ($k <= $i){
.col-#{$m}-#{$k} {
grid-column: $k;
}
.row-#{$m}-#{$k} {
grid-row: $k;
}
@include create-tiles-cells($i, $k + 1);
}
@include create-tiles-cells(12);
@mixin create-tiles-grid-size($i: 1, $k: 1) when ($k <= $i){
&.size-#{$m}-half {
width: 70px + $tileMargin * 2;
}
&.size-#{$m}-#{$k} {
width: ($tileCellSize + $tileMargin * 2) * $k;
}
@include create-tiles-grid-size($i, $k + 1);
}
@include create-tiles-grid-size(10);
}
@include generate-tiles-media-options($name, $j + 1);
}
}
Это, конечно, выражение "когда"это вызывает проблему.Из похожих вопросов я понимаю, что мне может понадобиться использовать оператор «для» или «каждый» и разбить его оттуда, но правила синтаксиса сильно отличаются от логики, когда я рассматриваю похожие ответы (например, этот ).Поскольку я не писал оригинальный синтаксис LESS, я пытаюсь работать в обратном направлении через их логику, чтобы определить его эквивалент SCSS.
Из того, что я могу сказать, он пытается определить, как распределить сетки, если / когдадва значения для I и K различны, но, поскольку вы не можете создать новый класс на основе условной переменной в SCSS, меня сбивают с толку.Буду признателен за любые рекомендации.Это последняя часть моего кода, которая не будет компилироваться.