Flexbox Layout Module
Ovidiu Olea
Agenda:
- What is FlexBox?
- Flexbox Properties
- Demo
- Q & A
- Flexbox concepts
What is flexbox?
Flexbox module is a new method in CSS3 that allows you to create complex responsive web layouts.
Flexbox concepts
- was designed as a one-dimensional layout model (either as a row or as a column)
- main axis & cross axis
- flex container
The main idea behind the flex layout is to give the container the ability to alter its items' width/height (and order) to best fill the available space
Flexbox concepts
Main axis & Cross axis
When working with flexbox you need to think in terms of two axes, the main axis and the cross axis.
The main axis is defined by the flex-direction property, and the cross axis runs perpendicular to it.
Flexbox concepts
Main axis & Cross axis
The main axis is defined by flex-direction, which has four possible values:
- row
- row-reverse
- column
- column-reverse
Flexbox concepts
Main axis & Cross axis
- row or row-reverse, main axis will run along the row in the inline direction.
Flexbox concepts
Main axis & Cross axis
- column or column-reverse , main axis will run from the top of the page to the bottom , in the block direction.
Flexbox concepts
Cross axis
- cross axis runs perpendicular to the main axis, if flex-direction (main axis) is set to row or row-reverse the cross axis runs down the columns.
Flexbox concepts
Cross axis
If your main axis is column or column-reverse then the cross axis runs along the rows.
Main axis & Cross axis
Flexbox concepts
Flexbox properties
Parent Properties
Children Properties
- flex-direction
- flex-wrap
- justify-content
- order
- flex-grow
- flex-shrink
- flex-basis
- align-items
- flex (shorthand property)
- flex-flow (shorthand property)
- align-self
Parent property
flex-direction property, defines the direction items are placed in the container, and accepts the following values:
- row: Items are placed the same as the text direction.
- row-reverse: Items are placed opposite to the text direction.
- column: Items are placed top to bottom.
- column-reverse: Items are placed bottom to top
.flex-container {
display: flex;
flex-direction: row | column;
background-color: blue;
}
.flex-container > div {
background-color:#f1f1f1;
width: 100px;
margin:10px;
text-align: center;
line-height: 75px;
font-size: 30px;
}
row
row-reverse
column
column-reverse
Parent property
flex-wrap property, specifies whether the flex items should wrap or not and accepts the following values:
- nowrap: Every item is fit to a single line.
- wrap: Items wrap around to additional lines.
- wrap-reverse: Items wrap around to additional lines in reverse.
.flex-container {
display: flex;
flex-wrap: wrap;
background-color: blue;
}
.flex-container > div {
background-color:#f1f1f1;
width: 100px;
margin:10px;
text-align: center;
line-height: 75px;
font-size: 30px;
}
wrap
nowrap
wrap-reverse
Parent property
flex-flow property is a shorthand property for setting both the flex-direction and flex-wrap properties.
.flex-container {
flex-flow: flex-direction flex-wrap;
}
.flex-container {
display: flex;
flex-flow: row wrap;
background-color: Blue;
}
.flex-container > div {
background-color: #f1f1f1;
width: 100px;
margin: 10px;
text-align: center;
line-height: 75px;
font-size: 30px;
}
Parent property
justify-content property, let you align items horizontally and accepts the following values:
- flex-start: Items align to the left side of the container.
- flex-end: Items align to the right side of the container.
- center: Items align at the center of the container.
- space-between: Items display with equal spacing between them.
- space-around: Items display with equal spacing around them.
<div class="flex-container">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
.flex-container {
display: flex;
background-color: blue;
justify-content: center;
}
.flex-container > div {
background-color:#f1f1f1;
margin:10px;
padding:20px;
font-size:30px;
}
center
flex-end
flex-start
space-around
space-between
Parent property
align-items property, let you align items vertically and accepts the following values:
- flex-start: Items align to the top of the container.
- center: Items align at the vertical center of the container.
- flex-end: Items align to the bottom of the container.
- stretch: Items are stretched to fit the container.
.flex-container {
display: flex;
background-color: dodgerblue;
align-items:center;
}
.flex-container > div {
background-color:#f1f1f1;
margin:10px;
padding:20px;
font-size:30px;
}
center
flex-start
flex-end
stretch
Children property
order property specifies the order of the flex items.
.item {
order: <number>;
}
<div class="flex-container">
<div style="order: 3">1</div>
<div style="order: 2">2</div>
<div style="order: 4">3</div>
<div style="order: 1">4</div>
</div>
order
Children property
flex-grow property specifies how much a flex item will grow relative to the rest of the flex items.
.item {
flex-grow: <number>;
}
<div class="flex-container">
<div>7</div>
<div>6</div>
<div style="flex-grow:2">8</div>
</div>
Children property
flex-shrink property specifies how much a flex item will shrink relative to the rest of the flex items.
.item {
flex-shrink: <number>;
}
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex-shrink:2">3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
</div>
Children property
flex-basis property specifies the initial length of a flex item.
.item {
flex-basis: <number>;
}
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex-basis: 400px">3</div>
<div>4</div>
</div>
Children property
flex property is a shorthand property for the flex-grow, flex-shrink, and flex-basis properties.
.item {
flex: flex-grow flex-shrink flex-basis;
}
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex: 0 0 200px">3</div>
<div>4</div>
</div>
Third flex item not growable (0), not shrinkable (0), and with an initial length of 200 pixels:
Children property
align-self property specifies the alignment for the selected item inside the flexible container.
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="align-self: center">3</div>
<div>4</div>
</div>
DEMO
Q&A
Thank You!
Flexbox
By ovidiuo
Flexbox
Flexbox Layout Module
- 87