flex-layout
Version:
CSS3 Flexbox layout
182 lines (162 loc) • 2.7 kB
text/less
@flex-column: 24;
.flex-clearfix() {
&:before, &:after {
content: " ";
display: flex;
box-sizing: border-box;
width: 0;
height: 0;
font-size: 0;
}
&:after {
clear: both;
}
}
.flex-column, .flex-row {
display: flex;
flex-wrap: wrap;
.flex-clearfix();
}
.flex-column {
flex-direction: row;
}
.flex-row {
flex-direction: column;
}
.flex-around {
justify-content: space-around;
}
.flex-between {
justify-content: space-between;
}
.flex-baseline {
align-items: baseline;
}
.flex-strech {
align-items: stretch;
}
.flex-item {
float: left;
flex-grow: 1;
}
// 递归生成栅格
.build-item(@i) when (@i > 0) {
.build-item((@i - 1));
// 栅格
.flex-item-@{i} {
float: left;
width: percentage(@i / @flex-column);
}
// 向左偏移
.flex-offset-@{i} {
margin-left: percentage(@i / @flex-column);
}
// 排序
.flex-order-@{i} {
order: @i;
}
}
.build-item(@flex-column);
// flex-row的对齐方式
.build-align(@type) when (@type = row) {
&.flex-left {
align-items: flex-start;
}
&.flex-right {
align-items: flex-end;
}
&.flex-top {
justify-content: flex-start;
}
&.flex-bottom {
justify-content: flex-end;
}
&.flex-center {
align-items: center;
}
&.flex-middle {
justify-content: center;
}
}
// flex-column的对齐方式
.build-align(@type) when (@type = column) {
&.flex-left {
justify-content: flex-start;
}
&.flex-right {
justify-content: flex-end;
}
&.flex-top {
align-items: flex-start;
}
&.flex-bottom {
align-items: flex-end;
}
&.flex-center {
justify-content: center;
}
&.flex-middle {
align-items: center;
}
}
.flex-column {
.build-align(column);
}
.flex-row {
.build-align(row);
}
[class*=flex-item] {
&.flex-left {
margin-right: auto;
}
&.flex-right {
margin-left: auto;
}
&.flex-top {
margin-bottom: auto;
}
&.flex-bottom {
margin-top: auto;
}
&.flex-center {
margin-left: auto;
margin-right: auto;
}
&.flex-middle {
margin-top: auto;
margin-bottom: auto;
}
}
.flex-sm-show, .flex-md-show {
display: none;
}
@media (max-width: 992px) {
.flex-md {
flex-direction: column;
.build-align(row);
[class*=flex-item] {
width: 100%;
}
}
.flex-md-hide {
display: none ;
}
.flex-md-show {
display: flex ;
}
}
@media (max-width: 768px) {
.flex-sm {
flex-direction: column;
.build-align(row);
[class*=flex-item] {
width: 100%;
}
}
.flex-sm-hide {
display: none ;
}
.flex-sm-show {
display: flex ;
}
}