What is gridTemplateColumns?
The gridTemplateColumns property defines how many columns your grid has and how wide each
should be. You can use fr units, pixels, percentages, auto,
minmax(), and repeat().
Remember
The value must be a string. Use template literals (backticks) when inserting variables:
`repeat(${num}, 1fr)`
Equal Columns with fr Units
// 3 equal columns
container.style.gridTemplateColumns = '1fr 1fr 1fr';
// 4 equal columns using repeat()
container.style.gridTemplateColumns = 'repeat(4, 1fr)';
Fixed-Width Columns
// 3 columns, each 200px wide
container.style.gridTemplateColumns = 'repeat(3, 200px)';
Mixed Sizing
// Sidebar layout
container.style.gridTemplateColumns = '250px 1fr';
// Holy Grail
container.style.gridTemplateColumns = '200px 1fr 200px';
// Different proportions
container.style.gridTemplateColumns = '2fr 1fr'; // 2/3 and 1/3
Dynamic Columns with Template Literals
const numColumns = 5;
// Use backticks for variables
container.style.gridTemplateColumns = `repeat(${numColumns}, 1fr)`;
// Based on array length
const items = ['a', 'b', 'c'];
container.style.gridTemplateColumns = `repeat(${items.length}, 1fr)`;
Auto-Fit for Responsive Grids
// Fit as many 250px columns as possible
container.style.gridTemplateColumns = 'repeat(auto-fit, minmax(250px, 1fr))';
This creates a truly responsive grid, columns wrap automatically.
Pro Tip
Store common layouts in objects for easy reuse:
const layouts = { sidebar: '250px 1fr' }