grid.md 15.6 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
142
143
$grid-columns:      12;
$grid-gutter-width: 15px;

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
162
$container-max-widths: (
  sm: 576px,
  md: 720px,
  lg: 940px,
  xl: 1140px
) !default;
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($gutter: $grid-gutter-width) {
Mark Otto's avatar
Mark Otto committed
184
  position: relative;
185
186
187
188
189
  @if $enable-flex {
    flex: 1;
  } @else {
    float: left;
  }
Mark Otto's avatar
Mark Otto committed
190
  min-height: 1px;
191
192
  padding-left:  ($gutter / 2);
  padding-right: ($gutter / 2);
Mark Otto's avatar
Mark Otto committed
193
194
}

195
196
197
198
199
200
201
202
203
204
205
@mixin make-col-span($size, $columns: $grid-columns) {
  // Set a width (to be used in or out of media queries)
  @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 {
    width: percentage($size / $columns);
  }
Mark Otto's avatar
Mark Otto committed
206
207
208
}

// Get fancy by offsetting, or changing the sort order
209
210
@mixin make-col-offset($columns) {
  margin-left: percentage(($columns / $grid-columns));
Mark Otto's avatar
Mark Otto committed
211
}
212
213
@mixin make-col-push($columns) {
  left: percentage(($columns / $grid-columns));
Mark Otto's avatar
Mark Otto committed
214
}
215
216
@mixin make-col-pull($columns) {
  right: percentage(($columns / $grid-columns));
Mark Otto's avatar
Mark Otto committed
217
218
219
}
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
220
### Example usage
Mark Otto's avatar
Mark Otto committed
221
222
223

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.

224
See it in action in <a href="http://jsbin.com/ruxona/edit">this rendered example</a>.
Mark Otto's avatar
Mark Otto committed
225
226
227
228

{% highlight scss %}
.container {
  max-width: 60em;
229
  @include make-container();
Mark Otto's avatar
Mark Otto committed
230
231
}
.row {
232
  @include make-row();
Mark Otto's avatar
Mark Otto committed
233
234
}
.content-main {
235
  @include make-col();
Mark Otto's avatar
Mark Otto committed
236
237

  @media (max-width: 32em) {
238
    @include make-col-span(6);
Mark Otto's avatar
Mark Otto committed
239
240
  }
  @media (min-width: 32.1em) {
241
    @include make-col-span(8);
Mark Otto's avatar
Mark Otto committed
242
243
244
  }
}
.content-secondary {
245
  @include make-col();
Mark Otto's avatar
Mark Otto committed
246
247

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

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

265
266
267
268
## 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
269
270
### Example: Stacked-to-horizontal

271
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 with the `.col` base class and a modifier within any `.row`.
Mark Otto's avatar
Mark Otto committed
272

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

### 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
309
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
310
311
312
{% example html %}
<!-- Stack the columns on mobile by making one full-width and the other half-width -->
<div class="row">
313
314
  <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
315
316
317
318
</div>

<!-- Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->
<div class="row">
319
320
321
  <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
322
323
324
325
</div>

<!-- Columns are always 50% wide, on mobile and desktop -->
<div class="row">
326
327
  <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
328
329
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
330
</div>
Mark Otto's avatar
Mark Otto committed
331

Mark Otto's avatar
Mark Otto committed
332
### Example: Mobile, tablet, desktop
Mark Otto's avatar
Mark Otto committed
333
334
335

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
336
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
337
338
{% example html %}
<div class="row">
339
340
  <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
341
342
</div>
<div class="row">
343
344
  <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
345
  <!-- Optional: clear the XS cols if their content doesn't match in height -->
346
  <div class="clearfix hidden-sm-up"></div>
347
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
Mark Otto's avatar
Mark Otto committed
348
349
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
350
</div>
Mark Otto's avatar
Mark Otto committed
351
352
353
354
355

### 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
356
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
357
358
{% example html %}
<div class="row">
359
360
361
  <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
362
363
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
364
</div>
Mark Otto's avatar
Mark Otto committed
365
366
367

### Example: Responsive column resets

368
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
369

Mark Otto's avatar
Mark Otto committed
370
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
371
372
{% example html %}
<div class="row">
373
374
  <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
375
376

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

379
380
  <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
381
382
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
383
</div>
Mark Otto's avatar
Mark Otto committed
384

Heinrich Fenkart's avatar
Heinrich Fenkart committed
385
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
386

Mark Otto's avatar
Mark Otto committed
387
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
388
389
{% example html %}
<div class="row">
390
391
  <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
392
393
394
</div>

<div class="row">
395
396
  <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
397
398
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
399
</div>
Mark Otto's avatar
Mark Otto committed
400
401
402

### Example: Offsetting columns

403
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
404

Mark Otto's avatar
Mark Otto committed
405
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
406
407
{% example html %}
<div class="row">
408
409
  <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
410
411
</div>
<div class="row">
412
413
  <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
414
415
</div>
<div class="row">
416
  <div class="col-md-6 offset-md-3">.col-md-6 .offset-md-3</div>
Mark Otto's avatar
Mark Otto committed
417
418
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
419
</div>
Mark Otto's avatar
Mark Otto committed
420
421
422

### Example: Nesting columns

Mark Otto's avatar
Mark Otto committed
423
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
424

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

### Example: Column ordering

Easily change the order of our built-in grid columns with `.col-md-push-*` and `.col-md-pull-*` modifier classes.

Mark Otto's avatar
Mark Otto committed
447
<div class="bd-example-row">
Mark Otto's avatar
Mark Otto committed
448
449
{% example html %}
<div class="row">
450
451
  <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
452
453
</div>
{% endexample %}
Mark Otto's avatar
Mark Otto committed
454
</div>
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476

## 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.

For example, if you wanted just three grid tiers, you'd update the `$grid-breakpoints` and `$container-max-widths` to something like this:

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

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

Save your changes and recompile to have 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.