Flexbox Grid Layout
The Responsive Flexbox Grid Layout System uses a series of containers, rows, and columns to lay out and align content. It is built with a flexbox and is fully responsive.
Implementation Details
- The Flexbox Grid is compatible with six responsive breakpoints, which are based on
min-width
media queries.
This means that a breakpoint affects that specific breakpoint and all those above it. For example, the class.k-col-sm-size-25
applies tosm
,md
,lg
,xl
, andxxl
breakpoints.
You can manage the column sizing and behavior for each breakpoint individually. - Containers—they are used to contain and center the content and set the layout
max-width
for each breakpoint. Use.k-container
for a responsive pixel width or.k-container-fluid
forwidth: 100%
across all viewports and devices. Adding a Gap utility class to the container will add a gutter between the rows. - Rows—the
.k-row
wraps the columns. Adding ak-col-gap-{n}
,k-col-gap-{bp}-{n}
Gap class to the row will add a gutter between the columns. - Columns—the
.k-col
,.k-col-{bp}
,.k-col-size-{p}
,.k-col-{bp}-size-{p}
wrap the content and specify how wide a column will be. The width of the columns is based on the percentage of the available space. So if you need a column that occupies 1/2 of the available space, use the.k-col-size-50
(or.k-col-{bp}-size-50
). If you need a column that occupies 1/3 of the available space, use the fraction class.k-col-size-33-3
(or.k-col-{bp}-size-33-3
). You can choose from a list of Flexbox Grid Classes. - Gutters—the
.k-gap-{n}
,.k-gap-{bp}-{n}
add a gutter to the layout.
Breakpoints
Here is how the Responsive Layout System changes across the above-mentioned breakpoints:
xs <576px | sm ≥576px | md ≥768px | lg ≥992px | xl ≥1200px | xxl ≥1400px | |
---|---|---|---|---|---|---|
Container max-width | None (auto) | 540px | 720px | 960px | 1140px | 1320px |
Class prefix | .k-col-size-xs-1 | .k-col-size-sm-1 | .k-col-size-md-1 | .k-col-size-lg-1 | .k-col-size-xl-1 | .k-col-size-xxl-1 |
Similarly to the breakpoints, you can also customize the container widths by using Sass:
@use '@progress/kendo-theme-utils/scss/all.scss' as * with ( $kendo-container-max-widths: ( sm: 500px, md: 700px, lg: 920px, xl: 1100px, xxl: 1300px, ));
Flexbox Grid Classes
Flexbox Grid classes are utility classes designed to make responsive grid layouts easy and consistent. All classes are composed with a base name, and some are followed by a breakpoint identifier (xs
, sm
, md
, lg
, xl
, or xxl
), and lastly, a value or modifier. This naming convention allows you to apply different grid settings at various screen sizes, making your layouts fully responsive and adaptable.
Flexbox Column Size
These utility classes allow you to control the width and sizing behavior of flexbox columns, making it easy to create flexible or fixed-width layouts. Responsive variants like .k-col-md-size-33-3
let you apply these widths at different breakpoints for adaptive layouts.
Utility Class | CSS Property |
---|---|
.k-col | flex: 1 0 0%; |
.k-col-size-{1-100} | flex: 0 0 auto; width: 1%; |
.k-col-size-8-3 | flex: 0 0 auto; width: 8.3333%; |
.k-col-size-9-1 | flex: 0 0 auto; width: 9.0909%; |
.k-col-size-11-1 | flex: 0 0 auto; width: 11.1111%; |
.k-col-size-12-5 | flex: 0 0 auto; width: 12.5%; |
.k-col-size-14-3 | flex: 0 0 auto; width: 14.2857%; |
.k-col-size-16-7 | flex: 0 0 auto; width: 16.6666%; |
.k-col-size-33-3 | flex: 0 0 auto; width: 33.3333%; |
.k-col-size-41-6 | flex: 0 0 auto; width: 41.6666%; |
.k-col-size-58-3 | flex: 0 0 auto; width: 58.3333%; |
.k-col-size-66-6 | flex: 0 0 auto; width: 66.6666%; |
.k-col-size-83-3 | flex: 0 0 auto; width: 83.3333%; |
.k-col-size-91-6 | flex: 0 0 auto; width: 91.6666%; |
.k-col-{sm|md|lg|xl|xxl} | flex: 1 0 0%; |
.k-col-{sm|md|lg|xl|xxl}-size-{1-100} | flex: 0 0 auto; width: 1%; |
.k-col-{sm|md|lg|xl|xxl}-size-8-3 | flex: 0 0 auto; width: 8.3333%; |
.k-col-{sm|md|lg|xl|xxl}-size-9-1 | flex: 0 0 auto; width: 9.0909%; |
.k-col-{sm|md|lg|xl|xxl}-size-11-1 | flex: 0 0 auto; width: 11.1111%; |
.k-col-{sm|md|lg|xl|xxl}-size-12-5 | flex: 0 0 auto; width: 12.5%; |
.k-col-{sm|md|lg|xl|xxl}-size-14-3 | flex: 0 0 auto; width: 14.2857%; |
.k-col-{sm|md|lg|xl|xxl}-size-16-7 | flex: 0 0 auto; width: 16.6666%; |
.k-col-{sm|md|lg|xl|xxl}-size-33-3 | flex: 0 0 auto; width: 33.3333%; |
.k-col-{sm|md|lg|xl|xxl}-size-41-6 | flex: 0 0 auto; width: 41.6666%; |
.k-col-{sm|md|lg|xl|xxl}-size-58-3 | flex: 0 0 auto; width: 58.3333%; |
.k-col-{sm|md|lg|xl|xxl}-size-66-6 | flex: 0 0 auto; width: 66.6666%; |
.k-col-{sm|md|lg|xl|xxl}-size-83-3 | flex: 0 0 auto; width: 83.3333%; |
.k-col-{sm|md|lg|xl|xxl}-size-91-6 | flex: 0 0 auto; width: 91.6666%; |
Flexbox Column Gap
These utility classes let you control the gap between columns in a layout. You can use them to quickly adjust column spacing for consistent and flexible designs. Responsive variants like .k-col-gap-md-1
are also available, allowing you to set different gaps at different breakpoints.
Utility Class | CSS Property |
---|---|
.k-col-gap-0 | --kendo-col-gap: 0px; |
.k-col-gap-1px | --kendo-col-gap: 1px; |
.k-col-gap-0\.5 | --kendo-col-gap: 0.125rem; |
.k-col-gap-1 | --kendo-col-gap: 0.25rem; |
.k-col-gap-1\.5 | --kendo-col-gap: 0.375rem; |
.k-col-gap-2 | --kendo-col-gap: 0.5rem; |
.k-col-gap-2\.5 | --kendo-col-gap: 0.625rem; |
.k-col-gap-3 | --kendo-col-gap: 0.75rem; |
.k-col-gap-3\.5 | --kendo-col-gap: 0.875rem; |
.k-col-gap-4 | --kendo-col-gap: 1rem; |
.k-col-gap-4\.5 | --kendo-col-gap: 1.125rem; |
.k-col-gap-5 | --kendo-col-gap: 1.25rem; |
.k-col-gap-5\.5 | --kendo-col-gap: 1.375rem; |
.k-col-gap-6 | --kendo-col-gap: 1.5rem; |
.k-col-gap-6\.5 | --kendo-col-gap: 1.625rem; |
.k-col-gap-7 | --kendo-col-gap: 1.75rem; |
.k-col-gap-7\.5 | --kendo-col-gap: 1.875rem; |
.k-col-gap-8 | --kendo-col-gap: 2rem; |
.k-col-gap-9 | --kendo-col-gap: 2.25rem; |
.k-col-gap-10 | --kendo-col-gap: 2.5rem; |
.k-col-gap-11 | --kendo-col-gap: 2.75rem; |
.k-col-gap-12 | --kendo-col-gap: 3rem; |
.k-col-gap-13 | --kendo-col-gap: 3.25rem; |
.k-col-gap-14 | --kendo-col-gap: 3.5rem; |
.k-col-gap-15 | --kendo-col-gap: 3.75rem; |
.k-col-gap-16 | --kendo-col-gap: 4rem; |
.k-col-gap-17 | --kendo-col-gap: 4.25rem; |
.k-col-gap-18 | --kendo-col-gap: 4.5rem; |
.k-col-gap-19 | --kendo-col-gap: 4.75rem; |
.k-col-gap-20 | --kendo-col-gap: 5rem; |
.k-col-gap-21 | --kendo-col-gap: 5.25rem; |
.k-col-gap-22 | --kendo-col-gap: 5.5rem; |
.k-col-gap-23 | --kendo-col-gap: 5.75rem; |
.k-col-gap-24 | --kendo-col-gap: 6rem; |
.k-col-gap-25 | --kendo-col-gap: 7rem; |
.k-col-gap-26 | --kendo-col-gap: 8rem; |
.k-col-gap-27 | --kendo-col-gap: 9rem; |
.k-col-gap-28 | --kendo-col-gap: 10rem; |
.k-col-gap-29 | --kendo-col-gap: 11rem; |
.k-col-gap-30 | --kendo-col-gap: 12rem; |
.k-col-gap-xs | --kendo-col-gap: var(--kendo-spacing-1, 0.25rem); |
.k-col-gap-sm | --kendo-col-gap: var(--kendo-spacing-2, 0.5rem); |
.k-col-gap-md | --kendo-col-gap: var(--kendo-spacing-3, 0.75rem); |
.k-col-gap-lg | --kendo-col-gap: var(--kendo-spacing-4, 1rem); |
.k-col-gap-xl | --kendo-col-gap: var(--kendo-spacing-6, 1.5rem); |
.k-col-gap-thin | --kendo-col-gap: var(--kendo-spacing-0\.5, 0.125rem); |
.k-col-gap-hair | --kendo-col-gap: var(--kendo-spacing-1px, 1px); |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-0 | --kendo-col-gap: 0px; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-1px | --kendo-col-gap: 1px; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-0\.5 | --kendo-col-gap: 0.125rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-1 | --kendo-col-gap: 0.25rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-1\.5 | --kendo-col-gap: 0.375rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-2 | --kendo-col-gap: 0.5rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-2\.5 | --kendo-col-gap: 0.625rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-3 | --kendo-col-gap: 0.75rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-3\.5 | --kendo-col-gap: 0.875rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-4 | --kendo-col-gap: 1rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-4\.5 | --kendo-col-gap: 1.125rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-5 | --kendo-col-gap: 1.25rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-5\.5 | --kendo-col-gap: 1.375rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-6 | --kendo-col-gap: 1.5rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-6\.5 | --kendo-col-gap: 1.625rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-7 | --kendo-col-gap: 1.75rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-7\.5 | --kendo-col-gap: 1.875rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-8 | --kendo-col-gap: 2rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-9 | --kendo-col-gap: 2.25rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-10 | --kendo-col-gap: 2.5rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-11 | --kendo-col-gap: 2.75rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-12 | --kendo-col-gap: 3rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-13 | --kendo-col-gap: 3.25rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-14 | --kendo-col-gap: 3.5rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-15 | --kendo-col-gap: 3.75rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-16 | --kendo-col-gap: 4rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-17 | --kendo-col-gap: 4.25rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-18 | --kendo-col-gap: 4.5rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-19 | --kendo-col-gap: 4.75rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-20 | --kendo-col-gap: 5rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-21 | --kendo-col-gap: 5.25rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-22 | --kendo-col-gap: 5.5rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-23 | --kendo-col-gap: 5.75rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-24 | --kendo-col-gap: 6rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-25 | --kendo-col-gap: 7rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-26 | --kendo-col-gap: 8rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-27 | --kendo-col-gap: 9rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-28 | --kendo-col-gap: 10rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-29 | --kendo-col-gap: 11rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-30 | --kendo-col-gap: 12rem; |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-xs | --kendo-col-gap: var(--kendo-spacing-1, 0.25rem); |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-sm | --kendo-col-gap: var(--kendo-spacing-2, 0.5rem); |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-md | --kendo-col-gap: var(--kendo-spacing-3, 0.75rem); |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-lg | --kendo-col-gap: var(--kendo-spacing-4, 1rem); |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-xl | --kendo-col-gap: var(--kendo-spacing-6, 1.5rem); |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-thin | --kendo-col-gap: var(--kendo-spacing-0\.5, 0.125rem); |
.k-col-gap-{xs|sm|md|lg|xl|xxl}-hair | --kendo-col-gap: var(--kendo-spacing-1px, 1px); |
Usage
Here are a few examples that show how you can use the Flexbox Grid Responsive Layout System.
Equal Width Columns
Setting а size-less class (e.g. k-col
) for each Flexbox Grid column will make every column the same width.
Setting One Column Width
Setting а size class (e.g. k-col-size-50
) for a Flexbox Grid column will set its width to the specified size and resize every other column to the available space.
Breakpoint-Specific Classes
Use breakpoint-specific classes (e.g. k-col-sm-size-75
) to adjust the layout across viewports.
The example shows how the layout is stacked horizontally on a mobile device and vertical on everything else.
Row/Column Gutter
Use breakpoint-specific classes (e.g. k-col-gap-sm-6
) to adjust the gap across viewports.
The example shows how the gap is 1
on a mobile device, and 6
on everything else.