utilities.md 11.7 KB
Newer Older
Mark Otto's avatar
Mark Otto committed
1
---
Mark Otto's avatar
Mark Otto committed
2
layout: docs
3
title: Utility classes
4
group: components
Mark Otto's avatar
Mark Otto committed
5
---
Mark Otto's avatar
Mark Otto committed
6

7
Bootstrap includes dozens of utilities—classes with a single purpose. They're designed to reduce the frequency of highly repetitive declarations in your CSS while allowing for quick and easy development.
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}

14
15
## Spacing

16
Assign `margin` or `padding` to an element or a subset of its sides with shorthand classes. Includes support for individual properties, all properties, and vertical and horizontal properties. All classes are multiples on the global default value, `1rem`.
17

18
19
20
The classes are named using the format: `{property}-{sides}-{size}`

Where *property* is one of:
21

22
23
24
25
* `m` - for classes that set `margin`
* `p` - for classes that set `padding`

Where *sides* is one of:
26

27
28
29
30
31
32
33
34
35
* `t` - for classes that set `margin-top` or `padding-top`
* `b` - for classes that set `margin-bottom` or `padding-bottom`
* `l` - for classes that set `margin-left` or `padding-left`
* `r` - for classes that set `margin-right` or `padding-right`
* `x` - for classes that set both `*-left` and `*-right`
* `y` - for classes that set both `*-top` and `*-bottom`
* `a` - for classes that set a `margin` or `padding` on all 4 sides of the element

Where *size* is one of:
36

37
38
39
40
41
* `0` - for classes that eliminate the `margin` or `padding` by setting it to `0`
* `1` - (by default) for classes that set the `margin` or `padding` to `$spacer-x` or `$spacer-y`
* `2` - (by default) for classes that set the `margin` or `padding` to `$spacer-x * 1.5` or `$spacer-y * 1.5`
* `3` - (by default) for classes that set the `margin` or `padding` to `$spacer-x * 3` or `$spacer-y * 3`

42
43
(You can add more sizes by adding entries to the `$spacers` Sass map variable.)

44
Here are some representative examples of these classes:
45

Mark Otto's avatar
Mark Otto committed
46
{% highlight scss %}
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
.m-t-0 {
  margin-top: 0 !important;
}

.m-l-1 {
  margin-left: $spacer-x !important;
}

.p-x-2 {
  padding-left: ($spacer-x * 1.5) !important;
  padding-right: ($spacer-x * 1.5) !important;
}

.p-a-3 {
  padding: ($spacer-y * 3) ($spacer-x * 3) !important;
}
Mark Otto's avatar
Mark Otto committed
63
{% endhighlight %}
64

65
66
### Horizontal centering
Additionally, Bootstrap also includes an `.m-x-auto` class for horizontally centering fixed-width block level content by setting the horizontal margins to `auto`.
67

Mark Otto's avatar
Mark Otto committed
68
69
70
71
72
73
74
<div class="bd-example">
  <div class="m-x-auto" style="width: 200px; background-color: rgba(86,61,124,.15);">
    Centered element
  </div>
</div>

{% highlight html %}
75
<div class="m-x-auto" style="width: 200px;">
Mark Otto's avatar
Mark Otto committed
76
77
78
  Centered element
</div>
{% endhighlight %}
79

80
## Text alignment
81
82
83
84
85
86
87
88

Easily realign text to components with text alignment classes.

{% example html %}
<p class="text-justify">Justified text.</p>
<p class="text-nowrap">No wrap text.</p>
{% endexample %}

89
90
91
92
93
94
95
96
97
98
99
100
101
For left, right, and center alignment, responsive classes are available that use the same viewport width breakpoints as the grid system.

{% example html %}
<p class="text-xs-left">Left aligned text on all viewport sizes.</p>
<p class="text-xs-center">Center aligned text on all viewport sizes.</p>
<p class="text-xs-right">Right aligned text on all viewport sizes.</p>

<p class="text-sm-left">Left aligned text on viewports sized SM (small) or wider.</p>
<p class="text-md-left">Left aligned text on viewports sized MD (medium) or wider.</p>
<p class="text-lg-left">Left aligned text on viewports sized LG (large) or wider.</p>
<p class="text-xl-left">Left aligned text on viewports sized XL (extra-large) or wider.</p>
{% endexample %}

102
## Text transform
103
104
105
106
107
108

Transform text in components with text capitalization classes.

{% example html %}
<p class="text-lowercase">Lowercased text.</p>
<p class="text-uppercase">Uppercased text.</p>
109
<p class="text-capitalize">CapiTaliZed text.</p>
110
111
{% endexample %}

112
113
Note how `text-capitalize` only changes the first letter of each word, leaving the case of any other letters unaffected.

114
## Font weight and italics
115

116
Quickly change the weight (boldness) of text or italicize text.
117
118

{% example html %}
119
120
<p class="font-weight-bold">Bold text.</p>
<p class="font-weight-normal">Normal weight text.</p>
121
<p class="font-italic">Italic text.</p>
122
123
{% endexample %}

124
## Contextual colors and backgrounds
125

Mark Otto's avatar
Mark Otto committed
126
127
128
129
130
131
132
133
134
135
136
Convey meaning through color with a handful of emphasis utility classes. These may also be applied to links and will darken on hover just like our default link styles.

{% example html %}
<p class="text-muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p>
<p class="text-primary">Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
<p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p>
<p class="text-info">Maecenas sed diam eget risus varius blandit sit amet non magna.</p>
<p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p>
<p class="text-danger">Donec ullamcorper nulla non metus auctor fringilla.</p>
{% endexample %}

137
138
139
140
141
142
143
144
145
146
147
Contextual text classes also work well on anchors with the provided hover and focus states.

{% example html %}
<a href="#" class="text-muted">Muted link</a>
<a href="#" class="text-primary">Primary link</a>
<a href="#" class="text-success">Success link</a>
<a href="#" class="text-info">Info link</a>
<a href="#" class="text-warning">Warning link</a>
<a href="#" class="text-danger">Danger link</a>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
148
149
150
151
152
153
154
155
Similar to the contextual text color classes, easily set the background of an element to any contextual class. Anchor components will darken on hover, just like the text classes.

{% example html %}
<div class="bg-primary">Nullam id dolor id nibh ultricies vehicula ut id elit.</div>
<div class="bg-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</div>
<div class="bg-info">Maecenas sed diam eget risus varius blandit sit amet non magna.</div>
<div class="bg-warning">Etiam porta sem malesuada magna mollis euismod.</div>
<div class="bg-danger">Donec ullamcorper nulla non metus auctor fringilla.</div>
petetnt's avatar
petetnt committed
156
<div class="bg-inverse">Cras mattis consectetur purus sit amet fermentum.</div>
Mark Otto's avatar
Mark Otto committed
157
158
{% endexample %}

159
160
161
{% callout info %}
#### Dealing with specificity

162
Sometimes contextual classes cannot be applied due to the specificity of another selector. In some cases, a sufficient workaround is to wrap your element's content in a `<div>` with the class.
163
164
{% endcallout %}

165
166
{% capture callout-include %}{% include callout-warning-color-assistive-technologies.md %}{% endcapture %}
{{ callout-include | markdownify }}
Mark Otto's avatar
Mark Otto committed
167

168
169
170
171
172
173
174
175
## Widths

Easily make an element as wide as its parent using the `.w-100` utility class, which sets `width: 100%`.

{% example html %}
<img class="w-100" data-src="holder.js/200px100?outline=yes&text=Width%20%3D%20100%25" alt="Width = 100%">
{% endexample %}

176
## Close icon
Mark Otto's avatar
Mark Otto committed
177

178
Use a generic close icon for dismissing content like modals and alerts. **Be sure to include text for screen readers**, as we've done with `aria-label`.
Mark Otto's avatar
Mark Otto committed
179
180

{% example html %}
Mark Otto's avatar
Mark Otto committed
181
<button type="button" class="close" aria-label="Close">
Mark Otto's avatar
Mark Otto committed
182
183
184
185
  <span aria-hidden="true">&times;</span>
</button>
{% endexample %}

186
## Responsive floats
Mark Otto's avatar
Mark Otto committed
187

188
189
190
These utility classes float an element to the left or right, or disable floating, based on the current viewport size using the [CSS `float` property](https://developer.mozilla.org/en-US/docs/Web/CSS/float). `!important` is included to avoid specificity issues. These use the same viewport width breakpoints as the grid system.

Two similar non-responsive mixins (`pull-left` and `pull-right`) are also available.
Mark Otto's avatar
Mark Otto committed
191
192

{% example html %}
193
194
195
196
197
198
199
200
<div class="pull-xs-left">Float left on all viewport sizes</div><br>
<div class="pull-xs-right">Float right on all viewport sizes</div><br>
<div class="pull-xs-none">Don't float on all viewport sizes</div><br>

<div class="pull-sm-left">Float left on viewports sized SM (small) or wider</div><br>
<div class="pull-md-left">Float left on viewports sized MD (medium) or wider</div><br>
<div class="pull-lg-left">Float left on viewports sized LG (large) or wider</div><br>
<div class="pull-xl-left">Float left on viewports sized XL (extra-large) or wider</div><br>
Mark Otto's avatar
Mark Otto committed
201
202
{% endexample %}

Mark Otto's avatar
Mark Otto committed
203
{% highlight scss %}
204
// Related simple non-responsive mixins
Mark Otto's avatar
Mark Otto committed
205
.element {
Mark Otto's avatar
Mark Otto committed
206
  @include pull-left;
Mark Otto's avatar
Mark Otto committed
207
208
}
.another-element {
Mark Otto's avatar
Mark Otto committed
209
  @include pull-right;
Mark Otto's avatar
Mark Otto committed
210
211
212
}
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
213
## Clearfix
Mark Otto's avatar
Mark Otto committed
214

Mark Otto's avatar
Mark Otto committed
215
216
Easily clear `float`s by adding `.clearfix` **to the parent element**. Utilizes [the micro clearfix](http://nicolasgallagher.com/micro-clearfix-hack/) as popularized by Nicolas Gallagher. Can also be used as a mixin.

Mark Otto's avatar
Mark Otto committed
217
218
219
{% highlight html %}
<div class="clearfix">...</div>
{% endhighlight %}
Mark Otto's avatar
Mark Otto committed
220

Mark Otto's avatar
Mark Otto committed
221
222
223
224
225
226
227
228
229
230
231
232
233
{% highlight scss %}
// Mixin itself
.clearfix() {
  &:before,
  &:after {
    content: " ";
    display: table;
  }
  &:after {
    clear: both;
  }
}

Mark Otto's avatar
Mark Otto committed
234
// Usage as a mixin
Mark Otto's avatar
Mark Otto committed
235
.element {
236
  @include clearfix;
Mark Otto's avatar
Mark Otto committed
237
238
239
}
{% endhighlight %}

240
241
242
243
244
245
246
247
248
249
250
251
252
253
## Fixed positioning

The `.pos-f-t` class can be used to easily position elements at the top of the viewport and make them as wide as the viewport. **Be sure you understand the ramifications of fixed-position elements within your project.** Here's how the class is defined:

{% highlight scss %}
.pos-f-t {
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  z-index: $zindex-navbar-fixed;
}
{% endhighlight %}

254
## Invisible content
Mark Otto's avatar
Mark Otto committed
255

256
The `.invisible` class can be used to toggle only the visibility of an element, meaning its `display` is not modified and the element can still affect the flow of the document.
257
258

{% highlight html %}
259
<div class="invisible">...</div>
Mark Otto's avatar
Mark Otto committed
260
261
{% endhighlight %}

262
{% highlight scss %}
Mark Otto's avatar
Mark Otto committed
263
// Class
264
265
266
267
.invisible {
  visibility: hidden;
}

Mark Otto's avatar
Mark Otto committed
268
// Usage as a mixin
269
.element {
Quy's avatar
Quy committed
270
  @include invisible;
271
}
Mark Otto's avatar
Mark Otto committed
272
{% endhighlight %}
273

274
## Screen readers and keyboard users
Mark Otto's avatar
Mark Otto committed
275

Heinrich Fenkart's avatar
Heinrich Fenkart committed
276
277
278
279
280
Hide an element to all devices **except screen readers** with `.sr-only`. Combine `.sr-only` with `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user). Can also be used as mixins.

{% comment %}
Necessary for following [accessibility best practices](../getting-started/#accessibility).
{% endcomment %}
Mark Otto's avatar
Mark Otto committed
281

Mark Otto's avatar
Mark Otto committed
282
283
284
{% highlight html %}
<a class="sr-only sr-only-focusable" href="#content">Skip to main content</a>
{% endhighlight %}
Mark Otto's avatar
Mark Otto committed
285

Mark Otto's avatar
Mark Otto committed
286
{% highlight scss %}
Mark Otto's avatar
Mark Otto committed
287
// Usage as a mixin
Mark Otto's avatar
Mark Otto committed
288
.skip-navigation {
289
290
  @include sr-only;
  @include sr-only-focusable;
Mark Otto's avatar
Mark Otto committed
291
292
293
}
{% endhighlight %}

294
## Image replacement
Mark Otto's avatar
Mark Otto committed
295
296
297

Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image.

Mark Otto's avatar
Mark Otto committed
298
{% highlight html %}
Mark Otto's avatar
Mark Otto committed
299
<h1 class="text-hide">Custom heading</h1>
Mark Otto's avatar
Mark Otto committed
300
{% endhighlight %}
Mark Otto's avatar
Mark Otto committed
301
302

{% highlight scss %}
Mark Otto's avatar
Mark Otto committed
303
// Usage as a mixin
Mark Otto's avatar
Mark Otto committed
304
.heading {
305
  @include text-hide;
Mark Otto's avatar
Mark Otto committed
306
307
}
{% endhighlight %}
308

309
## Responsive embeds
310
311
312
313
314
315
316
317
318
319
320
321
322

Allow browsers to determine video or slideshow dimensions based on the width of their containing block by creating an intrinsic ratio that will properly scale on any device.

Rules are directly applied to `<iframe>`, `<embed>`, `<video>`, and `<object>` elements; optionally use an explicit descendant class `.embed-responsive-item` when you want to match the styling for other attributes.

**Pro-Tip!** You don't need to include `frameborder="0"` in your `<iframe>`s as we override that for you.

{% example html %}
<div class="embed-responsive embed-responsive-16by9">
  <iframe class="embed-responsive-item" src="//www.youtube.com/embed/zpOULjyy-n8?rel=0" allowfullscreen></iframe>
</div>
{% endexample %}

323
Aspect ratios can be customized with modifier classes.
324
325

{% highlight html %}
326
327
328
329
330
<!-- 21:9 aspect ratio -->
<div class="embed-responsive embed-responsive-21by9">
  <iframe class="embed-responsive-item" src="..."></iframe>
</div>

331
332
333
334
335
336
337
338
339
<!-- 16:9 aspect ratio -->
<div class="embed-responsive embed-responsive-16by9">
  <iframe class="embed-responsive-item" src="..."></iframe>
</div>

<!-- 4:3 aspect ratio -->
<div class="embed-responsive embed-responsive-4by3">
  <iframe class="embed-responsive-item" src="..."></iframe>
</div>
340
341
342
343
344

<!-- 1:1 aspect ratio -->
<div class="embed-responsive embed-responsive-1by1">
  <iframe class="embed-responsive-item" src="..."></iframe>
</div>
345
{% endhighlight %}