我正在编写一些SASS,以为网格输出几种列/行组合。它在现代浏览器中可以正常工作,因为它们都知道如何使用CSS的repeat()
函数。但是,当然,我必须为IE11和Edge进行开发...
我有此功能,可以输出1-12列和1-24行之间的所有组合(是的,输出很多,但这是必需的)。
.grid-container {
width:calc(100% + 10px);
margin-left:-5px;
margin-top:-5px;
position:relative;
&.s {
@for $column from 1 through 12 {
@for $row from 1 through 24 {
&#{$column}x#{$row} {
.grid {
-ms-grid-columns: 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr;
-ms-grid-rows: 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr 12fr;
grid-template-columns: repeat($column, calc((100% / #{$column})));
grid-template-rows: repeat($row, calc((100% / #{$row})));
grid-column-gap: 0px;
grid-row-gap: 0px;
}
}
}
}
}
}
现在,我正在尝试找出如何使-ms-grid-columns
和-ms-grid rows
动态的。现在,它只是为12x12网格构建的,但我希望它们具有正确的fr
单位数量,具体取决于输出的网格大小。
我发现LESS具有一个merge
函数,可以很好地运行,但是我不知道SASS中有什么
答案 0 :(得分:0)
您可以简单地将某些内容递归地附加到变量中:
@function columns($n) {
$thing: '';
@for $count from 1 through $n {
$thing: #{$thing} 1fr;
}
@return $thing;
}
答案 1 :(得分:0)
您必须分开row
和column
。另外,您还必须将AutoPrefixer与-ms
前缀的postcss一起使用。演示检查Autoprefixer online。
@for $col from 1 through 12{
.grid-col-#{$col}{
grid-template-columns: repeat($col, calc(100% / #{$col}));
}
}
@for $row from 1 through 24{
.grid-row-#{$row}{
grid-template-rows: repeat($row, calc(100% / #{$row}));
}
}
的CSS输出
/* prefixed by https://autoprefixer.github.io (PostCSS: v7.0.26, autoprefixer: v9.7.3) */
.grid-col-1 {
-ms-grid-columns: (-webkit-calc(100% / 1))[1];
-ms-grid-columns: (-moz-calc(100% / 1))[1];
-ms-grid-columns: (calc(100% / 1))[1];
grid-template-columns: repeat(1, -webkit-calc(100% / 1));
grid-template-columns: repeat(1, -moz-calc(100% / 1));
grid-template-columns: repeat(1, calc(100% / 1));
}
.grid-col-2 {
-ms-grid-columns: (-webkit-calc(100% / 2))[2];
-ms-grid-columns: (-moz-calc(100% / 2))[2];
-ms-grid-columns: (calc(100% / 2))[2];
grid-template-columns: repeat(2, -webkit-calc(100% / 2));
grid-template-columns: repeat(2, -moz-calc(100% / 2));
grid-template-columns: repeat(2, calc(100% / 2));
}
.grid-col-3 {
-ms-grid-columns: (-webkit-calc(100% / 3))[3];
-ms-grid-columns: (-moz-calc(100% / 3))[3];
-ms-grid-columns: (calc(100% / 3))[3];
grid-template-columns: repeat(3, -webkit-calc(100% / 3));
grid-template-columns: repeat(3, -moz-calc(100% / 3));
grid-template-columns: repeat(3, calc(100% / 3));
}
.grid-col-4 {
-ms-grid-columns: (-webkit-calc(100% / 4))[4];
-ms-grid-columns: (-moz-calc(100% / 4))[4];
-ms-grid-columns: (calc(100% / 4))[4];
grid-template-columns: repeat(4, -webkit-calc(100% / 4));
grid-template-columns: repeat(4, -moz-calc(100% / 4));
grid-template-columns: repeat(4, calc(100% / 4));
}
.grid-col-5 {
-ms-grid-columns: (-webkit-calc(100% / 5))[5];
-ms-grid-columns: (-moz-calc(100% / 5))[5];
-ms-grid-columns: (calc(100% / 5))[5];
grid-template-columns: repeat(5, -webkit-calc(100% / 5));
grid-template-columns: repeat(5, -moz-calc(100% / 5));
grid-template-columns: repeat(5, calc(100% / 5));
}
.grid-col-6 {
-ms-grid-columns: (-webkit-calc(100% / 6))[6];
-ms-grid-columns: (-moz-calc(100% / 6))[6];
-ms-grid-columns: (calc(100% / 6))[6];
grid-template-columns: repeat(6, -webkit-calc(100% / 6));
grid-template-columns: repeat(6, -moz-calc(100% / 6));
grid-template-columns: repeat(6, calc(100% / 6));
}
.grid-col-7 {
-ms-grid-columns: (-webkit-calc(100% / 7))[7];
-ms-grid-columns: (-moz-calc(100% / 7))[7];
-ms-grid-columns: (calc(100% / 7))[7];
grid-template-columns: repeat(7, -webkit-calc(100% / 7));
grid-template-columns: repeat(7, -moz-calc(100% / 7));
grid-template-columns: repeat(7, calc(100% / 7));
}
.grid-col-8 {
-ms-grid-columns: (-webkit-calc(100% / 8))[8];
-ms-grid-columns: (-moz-calc(100% / 8))[8];
-ms-grid-columns: (calc(100% / 8))[8];
grid-template-columns: repeat(8, -webkit-calc(100% / 8));
grid-template-columns: repeat(8, -moz-calc(100% / 8));
grid-template-columns: repeat(8, calc(100% / 8));
}
.grid-col-9 {
-ms-grid-columns: (-webkit-calc(100% / 9))[9];
-ms-grid-columns: (-moz-calc(100% / 9))[9];
-ms-grid-columns: (calc(100% / 9))[9];
grid-template-columns: repeat(9, -webkit-calc(100% / 9));
grid-template-columns: repeat(9, -moz-calc(100% / 9));
grid-template-columns: repeat(9, calc(100% / 9));
}
.grid-col-10 {
-ms-grid-columns: (-webkit-calc(100% / 10))[10];
-ms-grid-columns: (-moz-calc(100% / 10))[10];
-ms-grid-columns: (calc(100% / 10))[10];
grid-template-columns: repeat(10, -webkit-calc(100% / 10));
grid-template-columns: repeat(10, -moz-calc(100% / 10));
grid-template-columns: repeat(10, calc(100% / 10));
}
.grid-col-11 {
-ms-grid-columns: (-webkit-calc(100% / 11))[11];
-ms-grid-columns: (-moz-calc(100% / 11))[11];
-ms-grid-columns: (calc(100% / 11))[11];
grid-template-columns: repeat(11, -webkit-calc(100% / 11));
grid-template-columns: repeat(11, -moz-calc(100% / 11));
grid-template-columns: repeat(11, calc(100% / 11));
}
.grid-col-12 {
-ms-grid-columns: (-webkit-calc(100% / 12))[12];
-ms-grid-columns: (-moz-calc(100% / 12))[12];
-ms-grid-columns: (calc(100% / 12))[12];
grid-template-columns: repeat(12, -webkit-calc(100% / 12));
grid-template-columns: repeat(12, -moz-calc(100% / 12));
grid-template-columns: repeat(12, calc(100% / 12));
}
.grid-row-1 {
-ms-grid-rows: (-webkit-calc(100% / 1))[1];
-ms-grid-rows: (-moz-calc(100% / 1))[1];
-ms-grid-rows: (calc(100% / 1))[1];
grid-template-rows: repeat(1, -webkit-calc(100% / 1));
grid-template-rows: repeat(1, -moz-calc(100% / 1));
grid-template-rows: repeat(1, calc(100% / 1));
}
.grid-row-2 {
-ms-grid-rows: (-webkit-calc(100% / 2))[2];
-ms-grid-rows: (-moz-calc(100% / 2))[2];
-ms-grid-rows: (calc(100% / 2))[2];
grid-template-rows: repeat(2, -webkit-calc(100% / 2));
grid-template-rows: repeat(2, -moz-calc(100% / 2));
grid-template-rows: repeat(2, calc(100% / 2));
}
.grid-row-3 {
-ms-grid-rows: (-webkit-calc(100% / 3))[3];
-ms-grid-rows: (-moz-calc(100% / 3))[3];
-ms-grid-rows: (calc(100% / 3))[3];
grid-template-rows: repeat(3, -webkit-calc(100% / 3));
grid-template-rows: repeat(3, -moz-calc(100% / 3));
grid-template-rows: repeat(3, calc(100% / 3));
}
.grid-row-4 {
-ms-grid-rows: (-webkit-calc(100% / 4))[4];
-ms-grid-rows: (-moz-calc(100% / 4))[4];
-ms-grid-rows: (calc(100% / 4))[4];
grid-template-rows: repeat(4, -webkit-calc(100% / 4));
grid-template-rows: repeat(4, -moz-calc(100% / 4));
grid-template-rows: repeat(4, calc(100% / 4));
}
.grid-row-5 {
-ms-grid-rows: (-webkit-calc(100% / 5))[5];
-ms-grid-rows: (-moz-calc(100% / 5))[5];
-ms-grid-rows: (calc(100% / 5))[5];
grid-template-rows: repeat(5, -webkit-calc(100% / 5));
grid-template-rows: repeat(5, -moz-calc(100% / 5));
grid-template-rows: repeat(5, calc(100% / 5));
}
.grid-row-6 {
-ms-grid-rows: (-webkit-calc(100% / 6))[6];
-ms-grid-rows: (-moz-calc(100% / 6))[6];
-ms-grid-rows: (calc(100% / 6))[6];
grid-template-rows: repeat(6, -webkit-calc(100% / 6));
grid-template-rows: repeat(6, -moz-calc(100% / 6));
grid-template-rows: repeat(6, calc(100% / 6));
}
.grid-row-7 {
-ms-grid-rows: (-webkit-calc(100% / 7))[7];
-ms-grid-rows: (-moz-calc(100% / 7))[7];
-ms-grid-rows: (calc(100% / 7))[7];
grid-template-rows: repeat(7, -webkit-calc(100% / 7));
grid-template-rows: repeat(7, -moz-calc(100% / 7));
grid-template-rows: repeat(7, calc(100% / 7));
}
.grid-row-8 {
-ms-grid-rows: (-webkit-calc(100% / 8))[8];
-ms-grid-rows: (-moz-calc(100% / 8))[8];
-ms-grid-rows: (calc(100% / 8))[8];
grid-template-rows: repeat(8, -webkit-calc(100% / 8));
grid-template-rows: repeat(8, -moz-calc(100% / 8));
grid-template-rows: repeat(8, calc(100% / 8));
}
.grid-row-9 {
-ms-grid-rows: (-webkit-calc(100% / 9))[9];
-ms-grid-rows: (-moz-calc(100% / 9))[9];
-ms-grid-rows: (calc(100% / 9))[9];
grid-template-rows: repeat(9, -webkit-calc(100% / 9));
grid-template-rows: repeat(9, -moz-calc(100% / 9));
grid-template-rows: repeat(9, calc(100% / 9));
}
.grid-row-10 {
-ms-grid-rows: (-webkit-calc(100% / 10))[10];
-ms-grid-rows: (-moz-calc(100% / 10))[10];
-ms-grid-rows: (calc(100% / 10))[10];
grid-template-rows: repeat(10, -webkit-calc(100% / 10));
grid-template-rows: repeat(10, -moz-calc(100% / 10));
grid-template-rows: repeat(10, calc(100% / 10));
}
.grid-row-11 {
-ms-grid-rows: (-webkit-calc(100% / 11))[11];
-ms-grid-rows: (-moz-calc(100% / 11))[11];
-ms-grid-rows: (calc(100% / 11))[11];
grid-template-rows: repeat(11, -webkit-calc(100% / 11));
grid-template-rows: repeat(11, -moz-calc(100% / 11));
grid-template-rows: repeat(11, calc(100% / 11));
}
.grid-row-12 {
-ms-grid-rows: (-webkit-calc(100% / 12))[12];
-ms-grid-rows: (-moz-calc(100% / 12))[12];
-ms-grid-rows: (calc(100% / 12))[12];
grid-template-rows: repeat(12, -webkit-calc(100% / 12));
grid-template-rows: repeat(12, -moz-calc(100% / 12));
grid-template-rows: repeat(12, calc(100% / 12));
}
.grid-row-13 {
-ms-grid-rows: (-webkit-calc(100% / 13))[13];
-ms-grid-rows: (-moz-calc(100% / 13))[13];
-ms-grid-rows: (calc(100% / 13))[13];
grid-template-rows: repeat(13, -webkit-calc(100% / 13));
grid-template-rows: repeat(13, -moz-calc(100% / 13));
grid-template-rows: repeat(13, calc(100% / 13));
}
.grid-row-14 {
-ms-grid-rows: (-webkit-calc(100% / 14))[14];
-ms-grid-rows: (-moz-calc(100% / 14))[14];
-ms-grid-rows: (calc(100% / 14))[14];
grid-template-rows: repeat(14, -webkit-calc(100% / 14));
grid-template-rows: repeat(14, -moz-calc(100% / 14));
grid-template-rows: repeat(14, calc(100% / 14));
}
.grid-row-15 {
-ms-grid-rows: (-webkit-calc(100% / 15))[15];
-ms-grid-rows: (-moz-calc(100% / 15))[15];
-ms-grid-rows: (calc(100% / 15))[15];
grid-template-rows: repeat(15, -webkit-calc(100% / 15));
grid-template-rows: repeat(15, -moz-calc(100% / 15));
grid-template-rows: repeat(15, calc(100% / 15));
}
.grid-row-16 {
-ms-grid-rows: (-webkit-calc(100% / 16))[16];
-ms-grid-rows: (-moz-calc(100% / 16))[16];
-ms-grid-rows: (calc(100% / 16))[16];
grid-template-rows: repeat(16, -webkit-calc(100% / 16));
grid-template-rows: repeat(16, -moz-calc(100% / 16));
grid-template-rows: repeat(16, calc(100% / 16));
}
.grid-row-17 {
-ms-grid-rows: (-webkit-calc(100% / 17))[17];
-ms-grid-rows: (-moz-calc(100% / 17))[17];
-ms-grid-rows: (calc(100% / 17))[17];
grid-template-rows: repeat(17, -webkit-calc(100% / 17));
grid-template-rows: repeat(17, -moz-calc(100% / 17));
grid-template-rows: repeat(17, calc(100% / 17));
}
.grid-row-18 {
-ms-grid-rows: (-webkit-calc(100% / 18))[18];
-ms-grid-rows: (-moz-calc(100% / 18))[18];
-ms-grid-rows: (calc(100% / 18))[18];
grid-template-rows: repeat(18, -webkit-calc(100% / 18));
grid-template-rows: repeat(18, -moz-calc(100% / 18));
grid-template-rows: repeat(18, calc(100% / 18));
}
.grid-row-19 {
-ms-grid-rows: (-webkit-calc(100% / 19))[19];
-ms-grid-rows: (-moz-calc(100% / 19))[19];
-ms-grid-rows: (calc(100% / 19))[19];
grid-template-rows: repeat(19, -webkit-calc(100% / 19));
grid-template-rows: repeat(19, -moz-calc(100% / 19));
grid-template-rows: repeat(19, calc(100% / 19));
}
.grid-row-20 {
-ms-grid-rows: (-webkit-calc(100% / 20))[20];
-ms-grid-rows: (-moz-calc(100% / 20))[20];
-ms-grid-rows: (calc(100% / 20))[20];
grid-template-rows: repeat(20, -webkit-calc(100% / 20));
grid-template-rows: repeat(20, -moz-calc(100% / 20));
grid-template-rows: repeat(20, calc(100% / 20));
}
.grid-row-21 {
-ms-grid-rows: (-webkit-calc(100% / 21))[21];
-ms-grid-rows: (-moz-calc(100% / 21))[21];
-ms-grid-rows: (calc(100% / 21))[21];
grid-template-rows: repeat(21, -webkit-calc(100% / 21));
grid-template-rows: repeat(21, -moz-calc(100% / 21));
grid-template-rows: repeat(21, calc(100% / 21));
}
.grid-row-22 {
-ms-grid-rows: (-webkit-calc(100% / 22))[22];
-ms-grid-rows: (-moz-calc(100% / 22))[22];
-ms-grid-rows: (calc(100% / 22))[22];
grid-template-rows: repeat(22, -webkit-calc(100% / 22));
grid-template-rows: repeat(22, -moz-calc(100% / 22));
grid-template-rows: repeat(22, calc(100% / 22));
}
.grid-row-23 {
-ms-grid-rows: (-webkit-calc(100% / 23))[23];
-ms-grid-rows: (-moz-calc(100% / 23))[23];
-ms-grid-rows: (calc(100% / 23))[23];
grid-template-rows: repeat(23, -webkit-calc(100% / 23));
grid-template-rows: repeat(23, -moz-calc(100% / 23));
grid-template-rows: repeat(23, calc(100% / 23));
}
.grid-row-24 {
-ms-grid-rows: (-webkit-calc(100% / 24))[24];
-ms-grid-rows: (-moz-calc(100% / 24))[24];
-ms-grid-rows: (calc(100% / 24))[24];
grid-template-rows: repeat(24, -webkit-calc(100% / 24));
grid-template-rows: repeat(24, -moz-calc(100% / 24));
grid-template-rows: repeat(24, calc(100% / 24));
}
HTML用法:
<div class="grid-col-1 grid-row-1"></div>