Skip to content
Created: December 25, 2015

The difference between Flex layout and Grid layout ​

Flexbox and Grid are both CSS layout modules used to solve common page layout problems, but their design ideas and applicable scenarios are different.

1. Definition and basic application ​

  • Flexbox (flexible box layout):

    • Mainly used for one-dimensional layout, that is, arranging elements in one direction horizontally or vertically.
    • For example: navigation bar, toolbar, card layout, etc.
    • Suitable for Linear Layout, you can easily adjust the arrangement, alignment and space allocation of child elements within the parent container.
  • Grid (grid layout):

    • Mainly used for two-dimensional layout, that is, arranging elements in both horizontal and vertical directions.
    • Suitable for more complex layouts, such as: overall page layout, image grid, table layout, etc.
    • It allows you to create a grid of rows and columns and precisely control the size and position of each area through grid-template-rows, grid-template-columns.

2. Differences in applicable scenarios ​

FeaturesFlexboxGrid
Layout DimensionsOne dimension (horizontal or vertical)Two dimensions (horizontal + vertical)
Applicable scenariosOnly one direction is involved in the layout (such as horizontal navigation bar, card layout, etc.)Complex overall layout (such as web page structure, table layout, complex component layout)
Control modeLayout according to the main axis (main axis and cross axis)Layout according to the rows and columns of the grid
FlexibilityFlexible responsive adjustmentPrecise area division and size control
Parent Container RequirementsNo explicit definition of rows and columns is requiredRows and columns of the grid need to be defined

3. Syntax differences and usage ​

Flexbox common properties: ​

  • display: flex;
  • flex-direction: row | column; — Controls the arrangement direction of children (horizontally or vertically)
  • justify-content — horizontal alignment
  • align-items — vertical alignment
  • flex-wrap — controls whether to wrap lines

Example: ​

css
.container {
  display: flex;
  justify-content: space-between; /* 水平分布 */
}

.item {
  flex: 1; /* 使子项均分空间 */
}

Grid common properties: ​

  • display: grid;
  • grid-template-columns — define column widths
  • grid-template-rows — define row heights
  • grid-template-areas — naming layouts by areas
  • grid-gap — define gaps between rows and columns

Example: ​

css
.container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr; /* 定义三列布局 */
  grid-template-rows: auto; /* 行高自动 */
  grid-gap: 20px;
}

.item {
  grid-column: 2 / 3; /* 控制元素跨列 */
}

4. Advantages and Disadvantages of Flexbox and Grid ​

Flexbox Advantages: ​

  • Simple and easy to use, suitable for handling one-dimensional layout.
  • Automatically adjust the size of sub-items according to the size of the container, suitable for dynamic content.
  • Supports flex-grow and flex-shrink to flexibly allocate space.

Flexbox Disadvantages: ​

  • Only suitable for one-dimensional layout, it cannot directly handle complex two-dimensional layout.
  • For grid arrangements and complex layout, the control is not as precise as Grid.

Grid Advantages: ​

  • Suitable for complex two-dimensional layout, dividing the grid through rows and columns.
  • You can precisely control the position of elements in the grid, supporting more complex layout design.
  • The powerful region naming function can easily perform regional management of each element.

Grid Disadvantages: ​

  • Browser Support: Although supported by modern browsers, IE is less compatible.
  • The syntax is relatively complex and suitable for use in Complex layout , which may appear a bit redundant in simple scenarios.

5. Summary ​

If the interviewer asks you "The difference between Flex and Grid", you can answer like this:

Flexbox is mainly used to handle one-dimensional layout, such as horizontally or vertically arranged content, and is especially suitable for simple layout tasks (such as navigation bars, card layouts, etc.). Its advantages are easy to use and flexibility, but it only supports layout in a single direction and cannot handle complex two-dimensional structures.

Grid is a powerful tool for two-dimensional layout. It is suitable for complex page layouts and can accurately control the positions of rows and columns. Things like the overall layout of web pages, table layouts, complex components, etc. can be processed efficiently through Grid. its Precise control and flexibility This makes the design very powerful, but the syntax is relatively complex and may not be fully supported in lower version browsers.