order
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
The order
CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending order
value and then by their source code order. Items not given an explicit order
value are assigned the default value of 0
.
Try it
In the above demo, select the options on the left-hand side to change the value of the pink box's order
property. The light blue boxes have been given fixed order
values.
Bear in mind the effect of source order. For example, when order: 2;
is selected, the pink box is placed before the two blue boxes with order: 2;
. This is because the pink box appears before the blue boxes in the source code.
Syntax
/* <integer> values */
order: 5;
order: -5;
/* Global values */
order: inherit;
order: initial;
order: revert;
order: revert-layer;
order: unset;
Since order
is only meant to affect the visual order of elements and not their logical or tab order. order
must not be used on non-visual media such as speech.
Defined in the CSS display module, this property impacts only grid and flex items. When order
is set on an element whose parent's display
property is not creating a flex or grid container, the order
property has no effect.
Values
<integer>
-
Represents the ordinal group to be used by the item.
Accessibility
Using the order
property will create a disconnect between the visual presentation of content and DOM order. This will adversely affect low vision users navigating with the aid of assistive technology such as a screen reader. If the visual order differs from the DOM order, your users will have different experiences depending on how they access your content.
- Flexbox & the keyboard navigation disconnect via Tink (2016)
- Source Order Matters via Adrian Roselli (2015)
- Understanding WCAG, Guideline 1.3 explanations
- Understanding Success Criterion 1.3.2 | W3C Understanding WCAG 2.0
Formal definition
Initial value | 0 |
---|---|
Applies to | Flex items, grid items, and absolutely-positioned flex and grid container children |
Inherited | no |
Computed value | as specified |
Animation type | an integer |
Formal syntax
order =
<integer>
Examples
Ordering items in a flex container
In this example, we create a classic two-sidebar layout.
HTML
We include a header, a footer, and a main content area. The main content includes an article and two side bars. Note their order! We'll use the CSS order
property to change their visual order.
<header>Header</header>
<main>
<article>Article</article>
<nav>Nav</nav>
<aside>Aside</aside>
</main>
<footer>Footer</footer>
CSS
We style the main area using flexible box layout module features; by setting display
to flex
, the <main>
element becomes a flex container. By default, this creates flex items of equal vertical size. The sidebars are both given an absolute width
, while the <article>
will consume all the positive free space with a flex-grow
factor set via the flex
shorthand.
We then set different order
property values on each of the flex container's three children; this means the CSS is defining that component's visual order rather than it appearing in the order declared in the HTML.
main {
display: flex;
text-align: center;
}
main > article {
flex: 1;
order: 2;
}
main > nav {
width: 200px;
order: 1;
}
main > aside {
width: 200px;
order: 3;
}
Result
The <article>
appears first in the source order but visually rendered in the center.
Specifications
Specification |
---|
CSS Display Module Level 3 # order-property |
Browser compatibility
BCD tables only load in the browser