CSS Grid Using CSS Grid today on academic websites at the UCLA IoES Scott Gruber Los Angeles, October 2018

CSS Grid Layout shipped in production browsers 2017.

CSS Grid Layout brings a twodimensional grid system to the Web.

“A grid is an intersecting set of horizontal and vertical lines”

Overview • • • • • • • Grid terminology Grid display type Creating the grid template Naming grid areas Placing grid items Implicit grid behavior Grid spacing and alignment

Grid display: grid;

Grid Rows grid-template-rows grid-row

Grid Columns grid-template-columns grid-column

Grid Gap grid-gap

Grid Area grid-template-areas grid-area

Grid Terminology

Creating a Grid Container To make an element a grid container, set its display property to grid. All of its children automatically become grid items. The markup

<div id="layout"> <div id="one">One</div> <div id="two">Two</div> <div id="three">Three</div> <div id="four">Four</div> <div id="five">Five</div> </div> The styles #layout { display: grid; }

Defining Row and Column Tracks grid-template-rows grid-template-columns • The value of grid-tempate-rows is a list of the heights of each row track in the grid. • The value of grid-template-columns is a list of the widths of each column track in the grid. #layout { display: grid; grid-template-rows: 100px 400px 100px; grid-template-columns: 200px 500px 200px; } • The number of sizes provided determines the number of rows/ columns in the grid. This grid in the example above has 3 rows and 3 columns.

Track Size Values The CSS Grid spec provides a lot of ways to specify the width and height of a track. Some of these ways allow tracks to adapt to available space and/or to the content they contain: • Lengths (such as px or em) • Percentage values (%) • Fractional units (fr) • minmax() • min-content, max-content • auto • fit-content()

Fractional Units (fr) The Grid-specific fractional unit (fr) expands and contracts based on available space: #layout { display: grid; grid-template-rows: 100px 400px 100px; grid-template-columns: 200px 1fr 200px; }

Repeating Track Sizes The shortcut repeat() function lets you repeat patterns in track sizes: repeat(#, track pattern) The first number is the number of repetitions. The track sizes after the comma provide the pattern: BEFORE: grid-template-columns: 200px 20px 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr 20px 1fr 200px; AFTER: grid-template-columns: 200px repeat(5, 20px 1fr) 200px; (Here repeat() is used in a longer sequence of track sizes. It repeats the track sizes 20px 1fr 5 times.)

Giving Names to Grid Areas grid-template-areas • grid-template-areas lets you assign names to areas in the grid to make it easier to place items in that area later. • The value is a list of names for every cell in the grid, listed by row. • When neighboring cells share a name, they form a grid area with that name.

Giving Names to Grid Areas (cont’d) #layout { display: grid; grid-template-rows: [header-start] 100px [content-start] 400px [footerstart] 100px; grid-template-columns: [ads] 200px [main] 1fr [links] 200px; grid-template-areas: "header header header" "ads main links" "footer footer footer" }

Placing Items on the Grid (cont’d) By line number: #one { grid-row-start: 1; grid-row-end: 2; grid-column-start: 1; grid-column-end: 4; } Using a span: #one { ... grid-column-start: 1; grid-column-end: span 3; } Starting from the last grid line and spanning backward: #one { ... grid-column-start: span 3; grid-column-end: -1; } By line name: #one { grid-row-start: header-start; grid-row-end: header-end; … }

Feature Queries @supports (display: grid) { display: grid; grid-gap: 1em; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }

Bootstrap 12 column grid

Bootstrap 12 column grid

"Grid lets us move away from bootstrap 12 column grids"

“Grids can help you create magazine layouts on the web”

“Don’t just choose a grid. Design it!” –Nathan Ford founder of Gridset

“The Fonmon”

“The Gertsner”

“The Gertsner”

“The Carson”

Andy Clarke, Head of Creative at Stuff and Nonsense. Design consultant and mentor. Author of “Art Direction for the Web”

“Art direction and design helps your audience feel something”

Cool CSS to explore in 2019 • Layout - CSS Grid and Flexbox • Multi-column layout • Floats as originally designed. • CSS Shapes, Transforms and Animations • Feature queries

Rachel Andrew Rachel Andrew is a British web developer, author and speaker known for her expertise in HTML, CSS, JavaScript and PHP. Photo by Drew McLellan

“If I can leave you with any advice, it is to make room for time to play with new things.” –Rachel Andrew

Thank you. https://speaking.scottgruber.me