papercss/src/flexbox.scss
2017-12-18 23:23:30 +01:00

124 lines
3 KiB
SCSS

$columnNames: col, sm, md, lg;
$columnSizes: 0px, 768px, 992px, 1200px;
$numberOfColumns: 12;
@mixin make-column-class($name, $size, $n, $p: 1) when ($p =< $n)
{
$percent: ($p * 100% / $n);
.${name}-${p} {
@include col-size($percent);
}
@include make-column-class($name, $size, $n, ($p + 1));
}
@mixin make-column-classes($n, $j: 1) when ($j =< length($columnNames))
{
$columnName: extract($columnNames, $j);
$columnSize: extract($columnSizes, $j);
@media (min-width: $columnSize) {
@include make-column-class($columnName, $columnSize, $n);
}
@include make-column-classes($n, $j + 1);
}
@mixin center-all()
{
-webkit-align-items: center;
align-items: center;
-webkit-justify-content: center;
justify-content: center;
}
@mixin col-size($percent)
{
-webkit-box-flex: 0;
-webkit-flex: 0 0 $percent;
-ms-flex: 0 0 $percent;
flex: 0 0 $percent;
max-width: $percent;
}
.row {
margin-right: auto;
margin-left: auto;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
margin-bottom: 1rem;
&.flex-right {
-webkit-box-pack: end;
-webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
}
&.flex-center {
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
&.flex-edges {
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
}
&.flex-spaces {
-webkit-justify-content: space-around;
-ms-flex-pack: distribute;
justify-content: space-around;
}
&.flex-top {
-webkit-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start;
}
&.flex-middle {
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
&.flex-bottom {
-webkit-box-align: end;
-webkit-align-items: flex-end;
-ms-flex-align: end;
align-items: flex-end;
}
}
.col {
padding: 1rem;
@media (max-width: 767px) {
// Stack for mobile
@include col-size(100%);
}
}
.col-fill {
width: auto;
flex: 1 1 0px;
}
@include make-column-classes($numberOfColumns);
.align-top {
-webkit-align-self: flex-start;
-ms-flex-item-align: start;
align-self: flex-start;
}
.align-middle {
-webkit-align-self: center;
-ms-flex-item-align: center;
-ms-grid-row-align: center;
align-self: center;
}
.align-bottom {
-webkit-align-self: flex-end;
-ms-flex-item-align: end;
align-self: flex-end;
}