---
title: Layout
path: utilities/layout
status: Stable
---
Change the document layout with display, float, alignment, and other utilities.
{:toc}
## Display
Adjust the display of an element with `.d-block`, `.d-none`, `.d-inline`, `.d-inline-block`, `.d-table`, `.d-table-cell` utilities.
```html
.d-inline
.d-inline-block
.d-block
.d-table-cell
.d-table-cell
.d-none
```
### The HTML `hidden` attribute
As of [Primer v10.10.0](https://github.com/primer/primer/releases/v10.10.0), `primer-base` includes a rule that sets `display: none !important` for any element with the [`hidden` attribute][hidden]. You can safely use the `hidden` attribute with display utilities, but we suggest:
1. Use the `hidden` attribute (and corresponding JavaScript property) if you're going to programmatically show and hide content.
1. Use `d-none` and/or its responsive variants (`d-sm-block`, `d-lg-none`) to conditionally show content at different screen sizes.
Rather than toggling the `d-none` class in JavaScript, you should toggle the `hidden` property on an element. This means that you won't have to restore any more specific display utility (`d-inline` or `d-flex`, for instance) just to work around the order in which they're listed in the stylesheet.
```js
// Good:
element.hidden = !visible
// Bad:
element.classList.toggle('d-none', !visible)
element.classList.toggle('d-inline', visible)
```
### `display:table` wrapping issues
There are known issues with using `display:table` and wrapping long strings, particularly in Firefox. You may need to use `table-fixed` on elements with `d-table` and apply column widths to table cells, which you can do with our [column width styles](../../objects/grid#column-widths).
```html
.d-table-cell
d-table-cell .col-10
```
### Responsive display
A selection of display utilities are able to be applied or changed per [breakpoint](../../objects/grid#breakpoints). `.d-block`, `.d-none`, `.d-inline`, and `.d-inline-block` are available as responsive utilities using the following formula: `d-[breakpoint]-[property]`. For example: `d-md-inline-block`. Each responsive display utility is applied to the specified breakpoint and up.
In the following example, the `ul` element switches from `display: block` on mobile to `display: inline-block` at the `md` breakpoint, while the list items remain inline.
```html
.d-md-inline-block
.d-inline
.d-inline
```
### Responsive hide
Hide utilities are able to be applied or changed per breakpoint using the following formula: `hide-[breakpoint]`, for example: `hide-sm`. Hide utilities act differently from other responsive styles and are applied to each **breakpoint-range only**.
| Shorthand | Range |
| --- | --- |
| -sm | 0—544px |
| -md | 544px—768px |
| -lg | 768px—1004px |
| -xl | 1004px and above |
```html
```
### Text direction
`.direction-ltr` or `.direction-rtl` can be used to change the text direction. This is especially helpful when paired with `.d-table`, `.d-table-cell`, and `.v-align-middle` to create equal height, vertically centered, alternating content.
## Visibility
Adjust the visibility of an element with `.v-hidden` and `.v-visible`.
## Overflow
Adjust element overflow with `.overflow-hidden`, `.overflow-scroll`, and `.overflow-auto`. `.overflow-hidden` can also be used to create a new [block formatting context](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context) or clear floats.
## Floats
Use `.float-left` and `.float-right` to set floats, and `.clearfix` to clear.
```html
.float-left
.float-right
```
### Responsive floats
Float utilities can be applied or changed per [breakpoint](../../objects/grid#breakpoints). This can be useful for responsive layouts when you want an element to be full width on mobile but floated at a larger breakpoint.
Each responsive float utility is applied to the specified breakpoint and up, using the following formula: `float-[breakpoint]-[property]`. For example: `float-md-left`. Remember to use `.clearfix` to clear.
```html
.float-md-left
.float-md-right
```
## Alignment
Adjust the alignment of an element with `.v-align-baseline`, `.v-align-top`, `.v-align-middle` or `.v-align-bottom`. The vertical-align property only applies to inline or table-cell boxes.
```html
Potatoes
.v-align-baseline
.v-align-top
.v-align-middle
.v-align-bottom
```
Use `v-align-text-top` or `v-align-text-bottom` to adjust the alignment of an element with the top or bottom of the parent element's font.
```html
Potatoes
.v-align-text-top.v-align-text-bottom
```
## Width and height
Use `.width-fit` to set max-width 100%.
```html
```
Use `.width-full` to set width to 100%.
```html
```
Use `.height-fit` to set max-height 100%.
```html
```
## Position
Position utilities can be used to alter the default document flow. **Be careful when using positioning, it's often unnecessary and commonly misused.**
Use `.position-relative` to create a new stacking context.
_Note how the other elements are displayed as if "Two" were in its normal position and taking up space._
```html
One
Two
Three
Four
```
Use `.position-absolute` to take elements out of the normal document flow.
```html
```
Use `.position-fixed` to position an element relative to the viewport. **Be careful when using fixed positioning. It is tricky to use and can lead to unwanted side effects.**
_Note: fixed positioning has been disabled here for demonstration only._
```html
.position-fixed
```
Use `top-0`, `right-0`, `bottom-0`, and `left-0` with `position-absolute`, `position-fixed`, or `position-relative` to further specify an elements position.
```html
.top-0 .left-0
.top-0 .right-0
.bottom-0 .right-0
.bottom-0 .left-0
```
To fill an entire width or height, use opposing directions.
_Note: fixed positioning has been disabled here for demonstration only._
```html
.position-fixed .left-0 .right-0
```
### Screen reader only
Use `.sr-only` to position an element outside of the viewport for screen reader access only. **Even though the element can't be seen, make sure it still has a sensible tab order.**
```html
Button activated!
```
## The media object
Create a media object with utilities.
```html
Image
Body Bacon ipsum dolor amet shankle rump tenderloin pork chop meatball strip steak bresaola doner sirloin capicola biltong shank pig. Alcatra frankfurter ham hock, ribeye prosciutto hamburger kevin brisket chuck burgdoggen short loin.
```
Create a double-sided media object for a container with a flexible center.
```html
Image
Image
Body Bacon ipsum dolor amet shankle rump tenderloin pork chop meatball strip steak bresaola doner sirloin capicola biltong shank pig. Alcatra frankfurter ham hock, ribeye prosciutto hamburger kevin brisket chuck burgdoggen short loin.
```
You can also create a media object with [flexbox utilities](./flexbox#media-object) instead of floats which can be useful for changing the vertical alignment.
[hidden]: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden