11// this grid should be only implemented on full browser width elements!
22
3+ //
4+ // breakpoints:
5+ // xxs: max. 575px
6+ // xs: min. 576px
7+ // s: min. 768px
8+ // m: min. 992px
9+ // l: min. 1200px
10+ // xl: min. 1680px
11+ // xxl: min. 1920px
12+
313// values: colums, margin, grid-gutter
414$grid-values-map : (
515 xs : (
@@ -58,24 +68,20 @@ $grid-max-width: #{map-get($min-screensize-map, l)}px;
5868 $min-screensize-map ,
5969 $screensize
6070) {
61- @if $margin == auto {
62- min-width : calc (#{$grid-max-width } - (#{$max-grid-h-margin } * 2 ));
63- } @else {
64- min-width : calc (
65- #{map-get ($min-screensize-map , $screensize )} px - (#{$margin } * 2 )
66- );
67- }
68-
69- margin-left : $margin ;
70- margin-right : $margin ;
71+ padding-left : $margin ;
72+ padding-right : $margin ;
7173}
7274
7375.#{$prefix } grid {
76+ box-sizing : content-box ;
7477 position : relative ;
7578 display : flex ;
7679 flex-direction : column ;
77- margin-left : $grid-h-margin ;
78- margin-right : $grid-h-margin ;
80+
81+ padding-left : $grid-h-margin ;
82+ padding-right : $grid-h-margin ;
83+ margin-left : auto ;
84+ margin-right : auto ;
7985
8086 // set horizontal margin and width of grid container
8187 @each $screensize , $valuelist in $grid-values-map {
@@ -129,8 +135,7 @@ $grid-max-width: #{map-get($min-screensize-map, l)}px;
129135
130136 // get grid max screen with from style-basics/_breakpoints.scss
131137 max-width : $grid-max-width ;
132-
133- border : 1px solid blue ;
138+ // border: 1px solid blue;
134139
135140 & :after ,
136141 & :before {
@@ -140,15 +145,28 @@ $grid-max-width: #{map-get($min-screensize-map, l)}px;
140145 }
141146}
142147
148+ .#{$prefix } grid--valign-center {
149+ justify-content : center ;
150+ }
151+ .#{$prefix } grid--valign-bottom {
152+ justify-content : flex-end ;
153+ }
154+
143155.#{$prefix } grid--no-h-margin {
144156 $grid-h-margin : 0 ;
145157 margin-left : $grid-h-margin ;
146158 margin-right : $grid-h-margin ;
147159}
148160
149161.#{$prefix } grid__row {
162+ $half-grid-gutter : $grid-gutter / 2 ;
163+ // use negative margin to clear grid-gutter
164+ margin-left : - #{$half-grid-gutter } ;
165+ margin-right : - #{$half-grid-gutter } ;
166+
167+ align-items : stretch ;
168+
150169 padding : 0 ;
151- margin : 0 ;
152170 display : block ;
153171 position : relative ;
154172 display : flex ;
@@ -175,95 +193,43 @@ $grid-max-width: #{map-get($min-screensize-map, l)}px;
175193 }
176194}
177195
196+ .#{$prefix } grid__row--align-items-flex-start {
197+ align-items : flex-start ;
198+ }
199+ .#{$prefix } grid__row--align-items-flex-end {
200+ align-items : flex-end ;
201+ }
202+ .#{$prefix } grid__row--align-items-center {
203+ align-items : center ;
204+ }
205+ .#{$prefix } grid__row--align-items-baseline {
206+ align-items : baseline ;
207+ }
208+
178209.#{$prefix } grid__col {
179210 // float is only for non flexbox browsers and overwritten by flex properties in modern browsers
180211 position : relative ;
181212 display : block ;
182213 float : left ;
183214 flex-shrink : 1 ;
184- border : 1px green solid ;
215+ // border: 1px green solid;
216+ width : 100% ;
185217}
186218
187- // set col width for 12 col layout
188- @for $i from 1 through $grid-max-cols {
189- .#{$prefix } grid__col--#{$i } -#{$grid-max-cols } {
190- $cols : $grid-min-cols ;
191-
192- $current-cols : $i ;
193- @if $current-cols > $cols {
194- $current-cols : $cols ;
195- }
196- @include grid-breakpoint-content ($current-cols , $cols , $grid-gutter );
197-
198- // change col with and grid-gutter on different breakpoints
199- @each $screensize , $valuelist in $grid-values-map {
200- $index : index (($grid-values-map ), ($screensize $valuelist ));
201-
202- // get next element from grid-values-map for max-with on breakpoint media query.
203- @if $index < $grid-values-map-length {
204- $iterator-next : nth ($grid-values-map , $index + 1 );
205- $next-screen-size : nth ($iterator-next , 1 );
206-
207- @include breakpoint--min-max (#{$screensize } , #{$next-screen-size } ) {
208- $cols : nth ($valuelist , 1 );
209- // grid-gutter changes with breakpoint
210- $grid-gutter : nth ($valuelist , 3 );
211-
212- $current-cols : $i ;
213- @if $current-cols > $cols {
214- $current-cols : $cols ;
215- }
216- @include grid-breakpoint-content ($current-cols , $cols , $grid-gutter );
217- }
218- }
219- // bigger than xl - breakpoint uses just min-width in media query
220- @else {
221- @include breakpoint--min (#{$screensize } ) {
222- $cols : nth ($valuelist , 1 );
223- $grid-gutter : nth ($valuelist , 3 );
224-
225- @include grid-breakpoint-content ($i , $cols , $grid-gutter );
226- }
227- }
228- }
229- }
219+ .#{$prefix } grid__col--align-self-flex-start {
220+ align-self : flex-start ;
230221}
231-
232- // reverse map for specifity reasons
233- $grid-values-reverse-map : mapReverse ($grid-values-map );
234- // @debug $grid-values-reverse-map;
235-
236- // set cols for xl, l, m, s, xs
237- @each $screensize , $valuelist in $grid-values-reverse-map {
238- $index : index (($grid-values-reverse-map ), ($screensize $valuelist ));
239- $cols : nth ($valuelist , 1 );
240- $grid-gutter : nth ($valuelist , 3 );
241-
242- // get next screen size from reversed map as long as a next element in map exists
243- @if $grid-values-map-length > $index {
244- $iterator-next : nth ($grid-values-reverse-map , $index + 1 );
245- $next-screen-size : nth ($iterator-next , 1 );
246-
247- @for $i from 1 through $cols {
248- .#{$prefix } grid__col--#{$screensize } -#{$i } -#{$cols } {
249- @include breakpoint--min-max (#{$next-screen-size } , #{$screensize } ) {
250- @include grid-breakpoint-content ($i , $cols , $grid-gutter );
251- }
252- }
253- }
254- // get last screen size for media query to display smallest variant
255- } @else {
256- $iterator-next : nth ($grid-values-reverse-map , $index - 1 );
257- $last-screen-size : nth ($iterator-next , 1 );
258-
259- @for $i from 1 through $cols {
260- .#{$prefix } grid__col--#{$screensize } -#{$i } -#{$cols } {
261- @include breakpoint--min-max (#{$screensize } , #{$last-screen-size } ) {
262- @include grid-breakpoint-content ($i , $cols , $grid-gutter );
263- }
264- }
265- }
266- }
222+ .#{$prefix } grid__col--align-self-flex-end {
223+ align-self : flex-end ;
224+ }
225+ .#{$prefix } grid__col--align-self-center {
226+ align-self : center ;
227+ }
228+ .#{$prefix } grid__col--align-self-baseline {
229+ align-self : baseline ;
230+ }
231+ .#{$prefix } grid__col--align-self-stretch {
232+ align-self : stretch ;
267233}
268234
269235// set cols for xxs
@@ -281,3 +247,17 @@ $grid-gutter: 24px;
281247 }
282248 }
283249}
250+
251+ // set cols for xs - xl
252+ @each $screensize , $valuelist in $grid-values-map {
253+ $cols : nth ($valuelist , 1 );
254+ $grid-gutter : nth ($valuelist , 3 );
255+
256+ @for $i from 1 through $cols {
257+ .#{$prefix } grid__col--#{$screensize } -#{$i } -#{$cols } {
258+ @include breakpoint--min (#{$screensize } ) {
259+ @include grid-breakpoint-content ($i , $cols , $grid-gutter );
260+ }
261+ }
262+ }
263+ }
0 commit comments