grid.md 16.4 KB
Newer Older
Mark Otto's avatar
Mark Otto committed
1
---
Mark Otto's avatar
Mark Otto committed
2
layout: docs
Mark Otto's avatar
Mark Otto committed
3
title: Grid system
4
group: layout
Mark Otto's avatar
Mark Otto committed
5
---
Mark Otto's avatar
Mark Otto committed
6

Mark Otto's avatar
Mark Otto committed
7
Bootstrap includes a powerful mobile-first grid system for building layouts of all shapes and sizes. It's based on a 12 column layout and has multiple tiers, one for each [media query range]({{ site.baseurl }}/layout/overview/#responsive-breakpoints). You can use it with Sass mixins or our predefined classes.
Mark Otto's avatar
Mark Otto committed
8

Mark Otto's avatar
Mark Otto committed
9
10
11
12
13
## Contents

* Will be replaced with the ToC, excluding the "Contents" header
{:toc}

Mark Otto's avatar
Mark Otto committed
14
## How it works
Mark Otto's avatar
Mark Otto committed
15

Mark Otto's avatar
Mark Otto committed
16
At a high level, here's how the grid system works:
Mark Otto's avatar
Mark Otto committed
17

Mark Otto's avatar
Mark Otto committed
18
19
20
21
22
23
24
25
26
27
- There are three major components—containers, rows, and columns.
- Containers—`.container` for fixed width or `.container-fluid` for full width—center your site's contents and help align your grid content.
- Rows are horizontal groups of columns that ensure your columns are lined up properly.
- Content should be placed within columns, and only columns may be immediate children of rows.
- Column classes indicate the number of columns you'd like to use out of the possible 12 per row. So if you want three equal-width columns, you'd use `.col-sm-4`.
- Column `width`s are set in percentages, so they're always fluid and sized relative to their parent element.
- Columns have horizontal `padding` to create the gutters between individual columns.
- There are five grid tiers, one for each [responsive breakpoint]({{ site.baseurl }}/layout/overview/#responsive-breakpoints): extra small, small, medium, large, and extra large.
- Grid tiers are based on minimum widths, meaning they apply to that one tier and all those above it (e.g., `.col-sm-4` applies to small, medium, large, and extra large devices).
- You can use predefined grid classes or Sass mixins for more semantic markup.
Mark Otto's avatar
Mark Otto committed
28

Mark Otto's avatar
Mark Otto committed
29
Sounds good? Great, let's move on to seeing all that in an example.
Mark Otto's avatar
Mark Otto committed
30

Mark Otto's avatar
Mark Otto committed
31
## Quick start example
Mark Otto's avatar
Mark Otto committed
32

Mark Otto's avatar
Mark Otto committed
33
34
35
36
37
If you're using Bootstrap's compiled CSS, this the example you'll want to start with.

{% example html %}
<div class="container">
  <div class="row">
38
    <div class="col-sm-4">
Mark Otto's avatar
Mark Otto committed
39
40
      One of three columns
    </div>
41
    <div class="col-sm-4">
Mark Otto's avatar
Mark Otto committed
42
43
      One of three columns
    </div>
44
    <div class="col-sm-4">
Mark Otto's avatar
Mark Otto committed
45
46
47
48
49
50
      One of three columns
    </div>
  </div>
</div>
{% endexample %}

51
The above example creates three equal-width columns on small, medium, large, and extra large devices using our [predefined grid classes](#predefined-classes). Those columns are centered in the page with the parent `.container`.
Mark Otto's avatar
Mark Otto committed
52

Mark Otto's avatar
Mark Otto committed
53
## Grid options
Mark Otto's avatar
Mark Otto committed
54

Mark Otto's avatar
Mark Otto committed
55
While Bootstrap uses `em`s or `rem`s for defining most sizes, `px`s are used for grid breakpoints and container widths. This is because the viewport width is in pixels and does not change with the [font size](https://drafts.csswg.org/mediaqueries-3/#units).
56

Mark Otto's avatar
Mark Otto committed
57
58
59
60
61
62
63
See how aspects of the Bootstrap grid system work across multiple devices with a handy table.

<div class="table-responsive">
  <table class="table table-bordered table-striped">
    <thead>
      <tr>
        <th></th>
64
        <th class="text-xs-center">
65
          Extra small<br>
66
          <small>&lt;544px</small>
Mark Otto's avatar
Mark Otto committed
67
        </th>
68
        <th class="text-xs-center">
69
          Small<br>
70
          <small>&ge;544px</small>
Mark Otto's avatar
Mark Otto committed
71
        </th>
72
        <th class="text-xs-center">
73
          Medium<br>
74
          <small>&ge;768px</small>
Mark Otto's avatar
Mark Otto committed
75
        </th>
76
        <th class="text-xs-center">
77
          Large<br>
78
          <small>&ge;992px</small>
79
        </th>
80
        <th class="text-xs-center">
81
          Extra large<br>
82
          <small>&ge;1200px</small>
Mark Otto's avatar
Mark Otto committed
83
84
85
86
87
        </th>
      </tr>
    </thead>
    <tbody>
      <tr>
Mark Otto's avatar
Mark Otto committed
88
        <th class="text-nowrap" scope="row">Grid behavior</th>
Mark Otto's avatar
Mark Otto committed
89
        <td>Horizontal at all times</td>
90
        <td colspan="4">Collapsed to start, horizontal above breakpoints</td>
Mark Otto's avatar
Mark Otto committed
91
92
      </tr>
      <tr>
Mark Otto's avatar
Mark Otto committed
93
        <th class="text-nowrap" scope="row">Container width</th>
Mark Otto's avatar
Mark Otto committed
94
        <td>None (auto)</td>
95
96
97
98
        <td>576px</td>
        <td>720px</td>
        <td>940px</td>
        <td>1140px</td>
Mark Otto's avatar
Mark Otto committed
99
100
      </tr>
      <tr>
Mark Otto's avatar
Mark Otto committed
101
        <th class="text-nowrap" scope="row">Class prefix</th>
Mark Otto's avatar
Mark Otto committed
102
103
104
105
        <td><code>.col-xs-</code></td>
        <td><code>.col-sm-</code></td>
        <td><code>.col-md-</code></td>
        <td><code>.col-lg-</code></td>
106
        <td><code>.col-xl-</code></td>
Mark Otto's avatar
Mark Otto committed
107
108
      </tr>
      <tr>
Mark Otto's avatar
Mark Otto committed
109
        <th class="text-nowrap" scope="row"># of columns</th>
110
        <td colspan="5">12</td>
Mark Otto's avatar
Mark Otto committed
111
112
      </tr>
      <tr>
Mark Otto's avatar
Mark Otto committed
113
        <th class="text-nowrap" scope="row">Gutter width</th>
114
        <td colspan="5">1.875rem / 30px (15px on each side of a column)</td>
Mark Otto's avatar
Mark Otto committed
115
116
      </tr>
      <tr>
Mark Otto's avatar
Mark Otto committed
117
        <th class="text-nowrap" scope="row">Nestable</th>
118
        <td colspan="5">Yes</td>
Mark Otto's avatar
Mark Otto committed
119
120
      </tr>
      <tr>
Mark Otto's avatar
Mark Otto committed
121
        <th class="text-nowrap" scope="row">Offsets</th>
122
        <td colspan="5">Yes</td>
Mark Otto's avatar
Mark Otto committed
123
124
      </tr>
      <tr>
Mark Otto's avatar
Mark Otto committed
125
        <th class="text-nowrap" scope="row">Column ordering</th>
126
        <td colspan="5">Yes</td>
Mark Otto's avatar
Mark Otto committed
127
128
129
130
131
      </tr>
    </tbody>
  </table>
</div>

Mark Otto's avatar
Mark Otto committed
132
## Sass mixins
Mark Otto's avatar
Mark Otto committed
133

134
When using Bootstrap's source Sass files, you have the option of using Sass variables and mixins to create custom, semantic, and responsive page layouts. Our [predefined grid classes](#predefined-classes) use these same variables and mixins to provide a whole suite of ready-to-use classes for fast responsive layouts.
Mark Otto's avatar
Mark Otto committed
135

Mark Otto's avatar
Mark Otto committed
136
### Variables
Mark Otto's avatar
Mark Otto committed
137

Mark Otto's avatar
Mark Otto committed
138
Variables and maps determine the number of columns, the gutter width, and the media query point at which to begin floating columns. We use these to generate the predefined grid classes documented above, as well as for the custom mixins listed below.
Mark Otto's avatar
Mark Otto committed
139
140

{% highlight scss %}
Mark Otto's avatar
Mark Otto committed
141
$grid-columns:      12;
Mark Otto's avatar
Mark Otto committed
142
$grid-gutter-width: 30px;
Mark Otto's avatar
Mark Otto committed
143

Mark Otto's avatar
Mark Otto committed
144
145
146
147
$grid-breakpoints: (
  // Extra small screen / phone
  xs: 0,
  // Small screen / phone
148
  sm: 544px,
Mark Otto's avatar
Mark Otto committed
149
  // Medium screen / tablet
150
  md: 768px,
Mark Otto's avatar
Mark Otto committed
151
  // Large screen / desktop
152
  lg: 992px,
Mark Otto's avatar
Mark Otto committed
153
  // Extra large screen / wide desktop
154
  xl: 1200px
155
);
Mark Otto's avatar
Mark Otto committed
156

Mark Otto's avatar
Mark Otto committed
157
158
159
160
161
$container-max-widths: (
  sm: 576px,
  md: 720px,
  lg: 940px,
  xl: 1140px
162
);
Mark Otto's avatar
Mark Otto committed
163
164
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
165
### Mixins
Mark Otto's avatar
Mark Otto committed
166
167
168
169
170

Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.

{% highlight scss %}
// Creates a wrapper for a series of columns
171
@mixin make-row($gutter: $grid-gutter-width) {
172
173
174
175
176
177
  @if $enable-flex {
    display: flex;
    flex-wrap: wrap;
  } @else {
    @include clearfix();
  }
178
179
  margin-left:  ($gutter / -2);
  margin-right: ($gutter / -2);
Mark Otto's avatar
Mark Otto committed
180
181
182
}

// Make the element grid-ready (applying everything but the width)
183
@mixin make-col-ready($gutter: $grid-gutter-width) {
Mark Otto's avatar
Mark Otto committed
184
  position: relative;
185
186
187
188
189
190
191
  min-height: 1px; // Prevent collapsing
  padding-right: ($gutter / 2);
  padding-left:  ($gutter / 2);

  // Prevent columns from becoming too narrow when at smaller grid tiers by
  // always setting `width: 100%;`. This works because we use `flex` values
  // later on to override this initial width.
192
  @if $enable-flex {
193
    width: 100%;
194
  }
Mark Otto's avatar
Mark Otto committed
195
196
}

197
@mixin make-col($size, $columns: $grid-columns) {
198
199
200
201
202
203
204
  @if $enable-flex {
    flex: 0 0 percentage($size / $columns);
    // Add a `max-width` to ensure content within each column does not blow out
    // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari
    // do not appear to require this.
    max-width: percentage($size / $columns);
  } @else {
205
    float: left;
206
207
    width: percentage($size / $columns);
  }
Mark Otto's avatar
Mark Otto committed
208
209
210
}

// Get fancy by offsetting, or changing the sort order
211
212
@mixin make-col-offset($size, $columns: $grid-columns) {
  margin-left: percentage($size / $columns);
Mark Otto's avatar
Mark Otto committed
213
}
214
215
216

@mixin make-col-push($size, $columns: $grid-columns) {
  left: if($size > 0, percentage($size / $columns), auto);
Mark Otto's avatar
Mark Otto committed
217
}
218
219
220

@mixin make-col-pull($size, $columns: $grid-columns) {
  right: if($size > 0, percentage($size / $columns), auto);
Mark Otto's avatar
Mark Otto committed
221
222
223
}
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
224
### Example usage
Mark Otto's avatar
Mark Otto committed
225
226
227

You can modify the variables to your own custom values, or just use the mixins with their default values. Here's an example of using the default settings to create a two-column layout with a gap between.

228
See it in action in <a href="http://jsbin.com/ruxona/edit">this rendered example</a>.
Mark Otto's avatar
Mark Otto committed
229
230
231
232

{% highlight scss %}
.container {
  max-width: 60em;
233
  @include make-container();
Mark Otto's avatar
Mark Otto committed
234
235
}
.row {
236
  @include make-row();
Mark Otto's avatar
Mark Otto committed
237
238
}
.content-main {
239
  @include make-col-ready();
Mark Otto's avatar
Mark Otto committed
240
241

  @media (max-width: 32em) {
242
    @include make-col(6);
Mark Otto's avatar
Mark Otto committed
243
244
  }
  @media (min-width: 32.1em) {
245
    @include make-col(8);
Mark Otto's avatar
Mark Otto committed
246
247
248
  }
}
.content-secondary {
249
  @include make-col-ready();
Mark Otto's avatar
Mark Otto committed
250
251

  @media (max-width: 32em) {
252
    @include make-col(6);
Mark Otto's avatar
Mark Otto committed
253
254
  }
  @media (min-width: 32.1em) {
255
    @include make-col(4);
Mark Otto's avatar
Mark Otto committed
256
257
258
259
260
261
262
263
264
265
266
267
268
  }
}
{% endhighlight %}

{% highlight html %}
<div class="container">
  <div class="row">
    <div class="content-main">...</div>
    <div class="content-secondary">...</div>
  </div>
</div>
{% endhighlight %}

269
270
271
272
## Predefined classes

In addition to our semantic mixins, Bootstrap includes an extensive set of prebuilt classes for quickly creating grid columns. It includes options for device-based column sizing, reordering columns, and more.

Mark Otto's avatar
Mark Otto committed
273
274
### Example: Stacked-to-horizontal

275
Using a single set of `.col-md-*` grid classes, you can create a basic grid system that starts out stacked on mobile devices and tablet devices (the extra small to small range) before becoming horizontal on desktop (medium) devices. Place grid columns within any `.row`.
Mark Otto's avatar
Mark Otto committed
276

Mark Otto's avatar
Mark Otto committed
277
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
278
279
{% example html %}
<div class="row">
280
281
282
283
284
285
286
287
288
289
290
291
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
  <div class="col-md-1">col-md-1</div>
Mark Otto's avatar
Mark Otto committed
292
293
</div>
<div class="row">
294
295
  <div class="col-md-8">col-md-8</div>
  <div class="col-md-4">col-md-4</div>
Mark Otto's avatar
Mark Otto committed
296
297
</div>
<div class="row">
298
299
300
  <div class="col-md-4">col-md-4</div>
  <div class="col-md-4">col-md-4</div>
  <div class="col-md-4">col-md-4</div>
Mark Otto's avatar
Mark Otto committed
301
302
</div>
<div class="row">
303
304
  <div class="col-md-6">col-md-6</div>
  <div class="col-md-6">col-md-6</div>
Mark Otto's avatar
Mark Otto committed
305
306
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
307
</div>
Mark Otto's avatar
Mark Otto committed
308
309
310
311
312

### Example: Mobile and desktop

Don't want your columns to simply stack in smaller devices? Use the extra small and medium device grid classes by adding `.col-xs-*` and `.col-md-*` to your columns. See the example below for a better idea of how it all works.

Mark Otto's avatar
Mark Otto committed
313
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
314
315
316
{% example html %}
<!-- Stack the columns on mobile by making one full-width and the other half-width -->
<div class="row">
317
318
  <div class="col-xs-12 col-md-8">.col-xs-12 .col-md-8</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
Mark Otto's avatar
Mark Otto committed
319
320
321
322
</div>

<!-- Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->
<div class="row">
323
324
325
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
Mark Otto's avatar
Mark Otto committed
326
327
328
329
</div>

<!-- Columns are always 50% wide, on mobile and desktop -->
<div class="row">
330
331
  <div class="col-xs-6">.col-xs-6</div>
  <div class="col-xs-6">.col-xs-6</div>
Mark Otto's avatar
Mark Otto committed
332
333
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
334
</div>
Mark Otto's avatar
Mark Otto committed
335

Mark Otto's avatar
Mark Otto committed
336
### Example: Mobile, tablet, desktop
Mark Otto's avatar
Mark Otto committed
337
338
339

Build on the previous example by creating even more dynamic and powerful layouts with tablet `.col-sm-*` classes.

Mark Otto's avatar
Mark Otto committed
340
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
341
342
{% example html %}
<div class="row">
343
344
  <div class="col-xs-12 col-sm-6 col-md-8">.col-xs-12 .col-sm-6 .col-md-8</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
Mark Otto's avatar
Mark Otto committed
345
346
</div>
<div class="row">
347
348
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
Mark Otto's avatar
Mark Otto committed
349
  <!-- Optional: clear the XS cols if their content doesn't match in height -->
350
  <div class="clearfix hidden-sm-up"></div>
351
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
Mark Otto's avatar
Mark Otto committed
352
353
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
354
</div>
Mark Otto's avatar
Mark Otto committed
355
356
357
358
359

### Example: Column wrapping

If more than 12 columns are placed within a single row, each group of extra columns will, as one unit, wrap onto a new line.

Mark Otto's avatar
Mark Otto committed
360
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
361
362
{% example html %}
<div class="row">
363
364
365
  <div class="col-xs-9">.col-xs-9</div>
  <div class="col-xs-4">.col-xs-4<br>Since 9 + 4 = 13 &gt; 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.</div>
  <div class="col-xs-6">.col-xs-6<br>Subsequent columns continue along the new line.</div>
Mark Otto's avatar
Mark Otto committed
366
367
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
368
</div>
Mark Otto's avatar
Mark Otto committed
369
370
371

### Example: Responsive column resets

372
With the four tiers of grids available you're bound to run into issues where, at certain breakpoints, your columns don't clear quite right as one is taller than the other. To fix that, use a combination of a `.clearfix` and our [responsive utility classes]({{ site.baseurl }}/layout/responsive-utilities/).
Mark Otto's avatar
Mark Otto committed
373

Mark Otto's avatar
Mark Otto committed
374
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
375
376
{% example html %}
<div class="row">
377
378
  <div class="col-xs-6 col-sm-3">.col-xs-6 .col-sm-3</div>
  <div class="col-xs-6 col-sm-3">.col-xs-6 .col-sm-3</div>
Mark Otto's avatar
Mark Otto committed
379
380

  <!-- Add the extra clearfix for only the required viewport -->
381
  <div class="clearfix hidden-sm-up"></div>
Mark Otto's avatar
Mark Otto committed
382

383
384
  <div class="col-xs-6 col-sm-3">.col-xs-6 .col-sm-3</div>
  <div class="col-xs-6 col-sm-3">.col-xs-6 .col-sm-3</div>
Mark Otto's avatar
Mark Otto committed
385
386
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
387
</div>
Mark Otto's avatar
Mark Otto committed
388

Heinrich Fenkart's avatar
Heinrich Fenkart committed
389
In addition to column clearing at responsive breakpoints, you may need to **reset offsets, pushes, or pulls**. See this in action in [the grid example]({{ site.baseurl }}/examples/grid/).
Mark Otto's avatar
Mark Otto committed
390

Mark Otto's avatar
Mark Otto committed
391
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
392
393
{% example html %}
<div class="row">
394
395
  <div class="col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
  <div class="col-sm-5 offset-sm-2 col-md-6 offset-md-0">.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0</div>
Mark Otto's avatar
Mark Otto committed
396
397
398
</div>

<div class="row">
399
400
  <div class="col-sm-6 col-md-5 col-lg-6">.col.col-sm-6.col-md-5.col-lg-6</div>
  <div class="col-sm-6 col-md-5 offset-md-2 col-lg-6 offset-lg-0">.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0</div>
Mark Otto's avatar
Mark Otto committed
401
402
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
403
</div>
Mark Otto's avatar
Mark Otto committed
404
405
406

### Example: Offsetting columns

407
Move columns to the right using `.offset-md-*` classes. These classes increase the left margin of a column by `*` columns. For example, `.offset-md-4` moves `.col-md-4` over four columns.
Mark Otto's avatar
Mark Otto committed
408

Mark Otto's avatar
Mark Otto committed
409
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
410
411
{% example html %}
<div class="row">
412
413
  <div class="col-md-4">.col-md-4</div>
  <div class="col-md-4 offset-md-4">.col-md-4 .offset-md-4</div>
Mark Otto's avatar
Mark Otto committed
414
415
</div>
<div class="row">
416
417
  <div class="col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
  <div class="col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
Mark Otto's avatar
Mark Otto committed
418
419
</div>
<div class="row">
420
  <div class="col-md-6 offset-md-3">.col-md-6 .offset-md-3</div>
Mark Otto's avatar
Mark Otto committed
421
422
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
423
</div>
Mark Otto's avatar
Mark Otto committed
424
425
426

### Example: Nesting columns

Mark Otto's avatar
Mark Otto committed
427
To nest your content with the default grid, add a new `.row` and set of `.col-sm-*` columns within an existing `.col-sm-*` column. Nested rows should include a set of columns that add up to 12 or fewer (it is not required that you use all 12 available columns).
Mark Otto's avatar
Mark Otto committed
428

Mark Otto's avatar
Mark Otto committed
429
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
430
431
{% example html %}
<div class="row">
432
433
  <div class="col-sm-9">
    Level 1: .col-sm-9
Mark Otto's avatar
Mark Otto committed
434
    <div class="row">
435
436
      <div class="col-xs-8 col-sm-6">
        Level 2: .col-xs-8 .col-sm-6
Mark Otto's avatar
Mark Otto committed
437
      </div>
438
439
      <div class="col-xs-4 col-sm-6">
        Level 2: .col-xs-4 .col-sm-6
Mark Otto's avatar
Mark Otto committed
440
441
442
443
444
      </div>
    </div>
  </div>
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
445
</div>
Mark Otto's avatar
Mark Otto committed
446
447
448

### Example: Column ordering

449
Easily change the order of our built-in grid columns with `.push-md-*` and `.pull-md-*` modifier classes.
Mark Otto's avatar
Mark Otto committed
450

Mark Otto's avatar
Mark Otto committed
451
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
452
453
{% example html %}
<div class="row">
454
455
  <div class="col-md-9 push-md-3">.col-md-9 .push-md-3</div>
  <div class="col-md-3 pull-md-9">.col-md-3 .pull-md-9</div>
Mark Otto's avatar
Mark Otto committed
456
457
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
458
</div>
459
460
461
462
463

## Customizing the grid

Using our built-in grid Sass variables and maps, it's possible to completely customize the predefined grid classes. Change the number of tiers, the media query dimensions, and the container widths—then recompile.

464
465
466
467
468
469
470
471
472
473
474
475
### Columns and gutters

The number of grid columns and their horizontal padding (aka, gutters) can be modified via Sass variables. `$grid-columns` is used to generate the widths (in percent) of each individual column while `$grid-gutter-width` is divided evenly across `padding-left` and `padding-right` for the column gutters.

{% highlight scss %}
$grid-columns: 12;
$grid-gutter-width: 30px;
{% endhighlight %}

### Grid tiers

Moving beyond the columns themselves, you may also customize the number of grid tiers. If you wanted just three grid tiers, you'd update the `$grid-breakpoints` and `$container-max-widths` to something like this:
476
477
478
479
480
481
482
483
484
485
486
487

{% highlight scss %}
$grid-breakpoints: (
  sm: 480px,
  md: 768px,
  lg: 1024px
);

$container-max-widths: (
  sm: 420px,
  md: 720px,
  lg: 940px
488
);
489
490
{% endhighlight %}

491
When making any changes to the Sass variables or maps, you'll need to save your changes and recompile. Doing so will out a brand new set of predefined grid classes for column widths, offsets, pushes, and pulls. Responsive visibility utilities will also be updated to use the custom breakpoints.