Skip to main content

Featured to Learn

CSS flex Property

Example

Let all the flexible items be the same length, regardless of its content:

#main div {
  -ms-flex: 1; /* IE 10 */
  flex: 1;
}

Definition and Usage

The flex property is a shorthand property for:

  • flex-grow - How the element should expand with respect to another flex-items.
  • flex-shrink - How the element should shrink with respect to another flex-items.
  • flex-basis - Minimum Width for the flex-items.

The flex property sets the flexible length on flexible items.

Note: If the element is not a flexible item, the flex property has no effect.

Default value: 0 1 auto
Inherited: no
Animatable: yes, see individual properties.
Version: CSS3
JavaScript syntax: object.style.flex="1"

  • Inherited : "Inherited = no" means that it cannot takes (inherit) it's value from it's parent element.
  • object - object in javascript means the element on which flex is applied.
  • Animatable - "Animatable = yes" means that it can be animated with CSS @keyframes.

Browser Support

The numbers in the table specify the first browser version that fully supports the property.

Numbers followed by -webkit-, -ms- or -moz- specify the first version that worked with a prefix.

Property          
flex 29.0
21.0 -webkit-
11.0
10.0 -ms-
28.0
18.0 -moz-
9.0
6.1 -webkit-
17.0

CSS Syntax

flex: flex-grow flex-shrink flex-basis|auto|initial|inherit;

Property Values

Value Description Demo
flex-grow A number specifying how much the item will grow relative to the rest of the flexible items
flex-shrink A number specifying how much the item will shrink relative to the rest of the flexible items  
flex-basis The length of the item. Legal values: "auto", "inherit", or a number followed by "%", "px", "em" or any other length unit
auto Same as 1 1 auto.  
initial Same as 0 1 auto.  
none Same as 0 0 auto.  
inherit Inherits this property from its parent element.  

More Examples

Example

Using flex together with media queries to create a different layout for different screen sizes/devices:

.flex-container {
  display: flex;
  flex-wrap: wrap;
}

.flex-item-left {
  flex: 50%;
}

.flex-item-right {
  flex: 50%;
}

/* Responsive layout - makes a one column layout (100%) instead of a two-column layout (50%) */
@media (max-width: 800px) {
  .flex-item-right, .flex-item-left {
    flex: 100%;
  }
}

Comments

Most Reads