Project

General

Profile

1
// Name:            Grid
2
// Description:     Component to create responsive, fluid and nestable grids
3
//
4
// Component:       `uk-grid`
5
//
6
// Modifiers:       `uk-grid-small`
7
//                  `uk-grid-medium`
8
//                  `uk-grid-large`
9
//                  `uk-grid-collapse`
10
//                  `uk-grid-divider`
11
//                  `uk-grid-match`
12
//                  `uk-grid-stack`
13
//                  `uk-grid-margin`
14
//                  `uk-grid-margin-small`
15
//                  `uk-grid-margin-medium`
16
//                  `uk-grid-margin-large`
17
//                  `uk-grid-margin-collapse`
18
//
19
// Sub-modifier:    `uk-grid-item-match`
20
//
21
// States:          `uk-first-column`
22
//
23
// ========================================================================
24

    
25

    
26
// Variables
27
// ========================================================================
28

    
29
@grid-gutter-horizontal:                        @global-gutter;
30
@grid-gutter-vertical:                          @grid-gutter-horizontal;
31
@grid-gutter-horizontal-l:                      @global-medium-gutter;
32
@grid-gutter-vertical-l:                        @grid-gutter-horizontal-l;
33

    
34
@grid-small-gutter-horizontal:                  @global-small-gutter;
35
@grid-small-gutter-vertical:                    @grid-small-gutter-horizontal;
36

    
37
@grid-medium-gutter-horizontal:                 @global-gutter;
38
@grid-medium-gutter-vertical:                   @grid-medium-gutter-horizontal;
39

    
40
@grid-large-gutter-horizontal:                  @global-medium-gutter;
41
@grid-large-gutter-vertical:                    @grid-large-gutter-horizontal;
42
@grid-large-gutter-horizontal-l:                @global-large-gutter;
43
@grid-large-gutter-vertical-l:                  @grid-large-gutter-horizontal-l;
44

    
45
@grid-divider-border-width:                     @global-border-width;
46
@grid-divider-border:                           @global-border;
47

    
48

    
49
/* ========================================================================
50
   Component: Grid
51
 ========================================================================== */
52

    
53
/*
54
 * 1. Allow cells to wrap into the next line
55
 * 2. Reset lists
56
 */
57

    
58
.uk-grid {
59
    display: -ms-flexbox;
60
    display: -webkit-flex;
61
    display: flex;
62
    /* 1 */
63
    -ms-flex-wrap: wrap;
64
    -webkit-flex-wrap: wrap;
65
    flex-wrap: wrap;
66
    /* 2 */
67
    margin: 0;
68
    padding: 0;
69
    list-style: none;
70
}
71

    
72
/*
73
 * Grid cell
74
 * Note: Space is allocated solely based on content dimensions, but shrinks: 0 1 auto
75
 * Reset margin for e.g. paragraphs
76
 */
77

    
78
.uk-grid > * { margin: 0; }
79

    
80
/*
81
 * Remove margin from the last-child
82
 */
83

    
84
.uk-grid > * > :last-child { margin-bottom: 0; }
85

    
86

    
87
/* Gutter
88
 ========================================================================== */
89

    
90
/*
91
 * Default
92
 */
93

    
94
/* Horizontal */
95
.uk-grid { margin-left: -@grid-gutter-horizontal; }
96
.uk-grid > * { padding-left: @grid-gutter-horizontal; }
97

    
98
/* Vertical */
99
.uk-grid + .uk-grid,
100
.uk-grid > .uk-grid-margin,
101
* + .uk-grid-margin { margin-top: @grid-gutter-vertical; }
102

    
103
/* Desktop and bigger */
104
@media (min-width: @breakpoint-large) {
105

    
106
    /* Horizontal */
107
    .uk-grid { margin-left: -@grid-gutter-horizontal-l; }
108
    .uk-grid > * { padding-left: @grid-gutter-horizontal-l; }
109

    
110
    /* Vertical */
111
    .uk-grid + .uk-grid,
112
    .uk-grid > .uk-grid-margin,
113
    * + .uk-grid-margin { margin-top: @grid-gutter-vertical-l; }
114

    
115
}
116

    
117
/*
118
 * Small
119
 */
120

    
121
/* Horizontal */
122
.uk-grid-small { margin-left: -@grid-small-gutter-horizontal; }
123
.uk-grid-small > * { padding-left: @grid-small-gutter-horizontal; }
124

    
125
/* Vertical */
126
.uk-grid + .uk-grid-small,
127
.uk-grid-small > .uk-grid-margin,
128
* + .uk-grid-margin-small { margin-top: @grid-small-gutter-vertical; }
129

    
130
/*
131
 * Medium
132
 */
133

    
134
/* Horizontal */
135
.uk-grid-medium { margin-left: -@grid-medium-gutter-horizontal; }
136
.uk-grid-medium > * { padding-left: @grid-medium-gutter-horizontal; }
137

    
138
/* Vertical */
139
.uk-grid + .uk-grid-medium,
140
.uk-grid-medium > .uk-grid-margin,
141
* + .uk-grid-margin-medium { margin-top: @grid-medium-gutter-vertical; }
142

    
143
/*
144
 * Large
145
 */
146

    
147
/* Horizontal */
148
.uk-grid-large { margin-left: -@grid-large-gutter-horizontal; }
149
.uk-grid-large > * { padding-left: @grid-large-gutter-horizontal; }
150

    
151
/* Vertical */
152
.uk-grid + .uk-grid-large,
153
.uk-grid-large > .uk-grid-margin,
154
* + .uk-grid-margin-large { margin-top: @grid-large-gutter-vertical; }
155

    
156
/* Desktop and bigger */
157
@media (min-width: @breakpoint-large) {
158

    
159
    /* Horizontal */
160
    .uk-grid-large { margin-left: -@grid-large-gutter-horizontal-l; }
161
    .uk-grid-large > * { padding-left: @grid-large-gutter-horizontal-l; }
162

    
163
    /* Vertical */
164
    .uk-grid + .uk-grid-large,
165
    .uk-grid-large > .uk-grid-margin,
166
    * + .uk-grid-margin-large { margin-top: @grid-large-gutter-vertical-l; }
167

    
168
}
169

    
170
/*
171
 * Collapse
172
 */
173

    
174
/* Horizontal */
175
.uk-grid-collapse { margin-left: 0; }
176
.uk-grid-collapse > * { padding-left: 0; }
177

    
178
/* Vertical */
179
.uk-grid + .uk-grid-collapse,
180
.uk-grid-collapse > .uk-grid-margin { margin-top: 0; }
181

    
182

    
183
/* Divider
184
 ========================================================================== */
185

    
186
.uk-grid-divider > * { position: relative; }
187

    
188
.uk-grid-divider > :not(.uk-first-column)::before {
189
    content: "";
190
    position: absolute;
191
    top: 0;
192
    bottom: 0;
193
    border-left: @grid-divider-border-width solid @grid-divider-border;
194
}
195

    
196
/* Vertical */
197
.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
198
    content: "";
199
    position: absolute;
200
    left: 0;
201
    right: 0;
202
    border-top: @grid-divider-border-width solid @grid-divider-border;
203
}
204

    
205
/*
206
 * Default
207
 */
208

    
209
/* Horizontal */
210
.uk-grid-divider { margin-left: -(@grid-gutter-horizontal * 2); }
211
.uk-grid-divider > * { padding-left: (@grid-gutter-horizontal * 2); }
212

    
213
.uk-grid-divider > :not(.uk-first-column)::before { left: @grid-gutter-horizontal; }
214

    
215
/* Vertical */
216
.uk-grid-divider.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-gutter-vertical * 2); }
217

    
218
.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
219
    top: -@grid-gutter-vertical;
220
    left: (@grid-gutter-horizontal * 2);
221
}
222

    
223
/* Desktop and bigger */
224
@media (min-width: @breakpoint-large) {
225

    
226
    /* Horizontal */
227
    .uk-grid-divider { margin-left: -(@grid-gutter-horizontal-l * 2); }
228
    .uk-grid-divider > * { padding-left: (@grid-gutter-horizontal-l * 2); }
229

    
230
    .uk-grid-divider > :not(.uk-first-column)::before { left: @grid-gutter-horizontal-l; }
231

    
232
    /* Vertical */
233
    .uk-grid-divider.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-gutter-vertical-l * 2); }
234

    
235
    .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
236
        top: -@grid-gutter-vertical-l;
237
        left: (@grid-gutter-horizontal-l * 2);
238
    }
239

    
240
}
241

    
242
/*
243
 * Small
244
 */
245

    
246
/* Horizontal */
247
.uk-grid-divider.uk-grid-small { margin-left: -(@grid-small-gutter-horizontal * 2); }
248
.uk-grid-divider.uk-grid-small > * { padding-left: (@grid-small-gutter-horizontal * 2); }
249

    
250
.uk-grid-divider.uk-grid-small > :not(.uk-first-column)::before { left: @grid-small-gutter-horizontal; }
251

    
252
/* Vertical */
253
.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-small-gutter-vertical * 2); }
254

    
255
.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin::before {
256
    top: -@grid-small-gutter-vertical;
257
    left: (@grid-small-gutter-horizontal * 2);
258
}
259

    
260
/*
261
 * Medium
262
 */
263

    
264
/* Horizontal */
265
.uk-grid-divider.uk-grid-medium { margin-left: -(@grid-medium-gutter-horizontal * 2); }
266
.uk-grid-divider.uk-grid-medium > * { padding-left: (@grid-medium-gutter-horizontal * 2); }
267

    
268
.uk-grid-divider.uk-grid-medium > :not(.uk-first-column)::before { left: @grid-medium-gutter-horizontal; }
269

    
270
/* Vertical */
271
.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-medium-gutter-vertical * 2); }
272

    
273
.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin::before {
274
    top: -@grid-medium-gutter-vertical;
275
    left: (@grid-medium-gutter-horizontal * 2);
276
}
277

    
278
/*
279
 * Large
280
 */
281

    
282
/* Horizontal */
283
.uk-grid-divider.uk-grid-large { margin-left: -(@grid-large-gutter-horizontal * 2); }
284
.uk-grid-divider.uk-grid-large > * { padding-left: (@grid-large-gutter-horizontal * 2); }
285

    
286
.uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before { left: @grid-large-gutter-horizontal; }
287

    
288
/* Vertical */
289
.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-large-gutter-vertical * 2); }
290

    
291
.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before {
292
    top: -@grid-large-gutter-vertical;
293
    left: (@grid-large-gutter-horizontal * 2);
294
}
295

    
296
/* Desktop and bigger */
297
@media (min-width: @breakpoint-large) {
298

    
299
    /* Horizontal */
300
    .uk-grid-divider.uk-grid-large { margin-left: -(@grid-large-gutter-horizontal-l * 2); }
301
    .uk-grid-divider.uk-grid-large > * { padding-left: (@grid-large-gutter-horizontal-l * 2); }
302

    
303
    .uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before { left: @grid-large-gutter-horizontal-l; }
304

    
305
    /* Vertical */
306
    .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin { margin-top: (@grid-large-gutter-vertical-l * 2); }
307

    
308
    .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before {
309
        top: -@grid-large-gutter-vertical-l;
310
        left: (@grid-large-gutter-horizontal-l * 2);
311
    }
312

    
313
}
314

    
315

    
316
/* Match child of a grid cell
317
 ========================================================================== */
318

    
319
/*
320
 * Behave like a block element
321
 * 1. Wrap into the next line
322
 * 2. Take the full width, at least 100%. Only if no class from the Width component is set.
323
 * 3. Expand width even if larger than 100%, e.g. because of negative margin (Needed for nested grids)
324
 */
325

    
326
.uk-grid-match > *,
327
.uk-grid-item-match {
328
    display: -ms-flexbox;
329
    display: -webkit-flex;
330
    display: flex;
331
    /* 1 */
332
    -ms-flex-wrap: wrap;
333
    -webkit-flex-wrap: wrap;
334
    flex-wrap: wrap;
335
}
336

    
337
.uk-grid-match > * > :not([class*='uk-width']),
338
.uk-grid-item-match > :not([class*='uk-width']) {
339
    /* 2 */
340
    box-sizing: border-box;
341
    width: 100%;
342
    /* 3 */
343
    -ms-flex: auto;
344
    -webkit-flex: auto;
345
    flex: auto;
346
}
347

    
348

    
349
// Hooks
350
// ========================================================================
351

    
352
.hook-grid-misc;
353

    
354
.hook-grid-misc() {}
355

    
356

    
357
// Inverse
358
// ========================================================================
359

    
360
@inverse-grid-divider-border:                  @inverse-global-border;
361

    
362
.hook-inverse() {
363

    
364
    .uk-grid-divider > :not(.uk-first-column)::before { border-left-color: @inverse-grid-divider-border; }
365
    .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before { border-top-color: @inverse-grid-divider-border; }
366

    
367
}
(26-26/66)