Files
Brandy Carney a0c0228acb fix(grid): add ion-grid element which wraps the rows/cols and adds padding
update tests to use new ion-grid element

references #6238
2016-04-26 13:33:12 -04:00

231 lines
3.6 KiB
SCSS

@import "../../globals.core";
// Grid
// --------------------------------------------------
// Using flexbox for the grid, inspired by Philip Walton:
// http://philipwalton.github.io/solved-by-flexbox/demos/grids/
// By default each .col within a .row will evenly take up
// available width, and the height of each .col with take
// up the height of the tallest .col in the same .row.
$grid-padding-width: 10px !default;
$grid-responsive-sm-break: 567px !default; // smaller than landscape phone
$grid-responsive-md-break: 767px !default; // smaller than portrait tablet
$grid-responsive-lg-break: 1023px !default; // smaller than landscape tablet
@mixin responsive-grid-break($selector, $max-width) {
@media (max-width: $max-width) {
#{$selector} {
flex-direction: column;
ion-col {
&[width-10],
&[width-20],
&[width-25],
&[width-33],
&[width-34],
&[width-50],
&[width-66],
&[width-67],
&[width-75],
&[width-80],
&[width-90] {
flex: 1;
margin-bottom: ($grid-padding-width * 3) / 2;
margin-left: 0;
width: 100%;
max-width: 100%;
}
}
}
}
}
ion-grid {
display: flex;
flex-direction: column;
padding: ($grid-padding-width / 2);
width: 100%;
}
ion-row {
display: flex;
width: 100%;
&[wrap] {
flex-wrap: wrap;
}
&[top] {
align-items: flex-start;
}
&[bottom] {
align-items: flex-end;
}
&[center] {
align-items: center;
}
&[stretch] {
align-items: stretch;
}
&[baseline] {
align-items: baseline;
}
}
ion-col {
display: block;
flex: 1;
padding: ($grid-padding-width / 2);
width: 100%;
// Column Alignment
&[top] {
align-self: flex-start;
}
&[bottom] {
align-self: flex-end;
}
&[center] {
align-self: center;
}
&[stretch] {
align-self: stretch;
}
&[baseline] {
align-self: baseline;
}
// Column Offsets
&[offset-10] {
margin-left: 10%;
}
&[offset-20] {
margin-left: 20%;
}
&[offset-25] {
margin-left: 25%;
}
&[offset-33],
&[offset-34] {
margin-left: 33.3333%;
}
&[offset-50] {
margin-left: 50%;
}
&[offset-66],
&[offset-67] {
margin-left: 66.6666%;
}
&[offset-75] {
margin-left: 75%;
}
&[offset-80] {
margin-left: 80%;
}
&[offset-90] {
margin-left: 90%;
}
// Explicit Column Percent Sizes
// By default each grid column will evenly distribute
// across the grid. However, you can specify individual
// columns to take up a certain size of the available area
&[width-10] {
flex: 0 0 10%;
max-width: 10%;
}
&[width-20] {
flex: 0 0 20%;
max-width: 20%;
}
&[width-25] {
flex: 0 0 25%;
max-width: 25%;
}
&[width-33],
&[width-34] {
flex: 0 0 33.3333%;
max-width: 33.3333%;
}
&[width-50] {
flex: 0 0 50%;
max-width: 50%;
}
&[width-66],
&[width-67] {
flex: 0 0 66.6666%;
max-width: 66.6666%;
}
&[width-75] {
flex: 0 0 75%;
max-width: 75%;
}
&[width-80] {
flex: 0 0 80%;
max-width: 80%;
}
&[width-90] {
flex: 0 0 90%;
max-width: 90%;
}
}
// Responsive Grid Classes
// Adding a class of responsive-X to a row
// will trigger the width-direction to
// change to column and add some margin
// to any columns in the row for clearity
@include responsive-grid-break('[responsive-sm]', $grid-responsive-sm-break);
@include responsive-grid-break('[responsive-md]', $grid-responsive-md-break);
@include responsive-grid-break('[responsive-lg]', $grid-responsive-lg-break);