CRAFTING UI

Frontend Design
Layout (del 2)
Responsive components
Agenda
Subgrid
Container Queries
Nesting
Subgrid
Container Queries
Agenda
-
Forstå, hvordan hjælper med komplekse layouts
-
Anvende til responsive komponenter
-
Øvelser for at opbygge praktisk erfaring
Container Queries
-
Forstå, hvordan hjælper med komplekse layouts
-
Anvende til responsive komponenter
-
Øvelser for at opbygge praktisk erfaring
Subgrid
Agenda
Agenda
Subgrid
Mål: Forstå komplekse layouts
Subgrid
Loading...
Alignment

.cards {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 1rem;
}🤷♂️
CSS Grid
Mis

💩
Alignment
CSS Grid
Mis

Alignment
Subgrid
Mis

Alignment
Subgrid
Mis
.cards {
display: grid;
}
.card {
display: grid;
}
grid-template-rows:
auto auto auto;Alignment
Subgrid
Mis
.cards {
display: grid;
}
.card {
display: grid;
grid-template-rows: subgrid;
}
grid-template-rows:
auto auto auto;Alignment
Subgrid
Mis
.cards {
display: grid;
}
.card {
display: grid;
grid-template-rows: subgrid;
}
grid-template-rows:
auto auto auto;Alignment
Subgrid
Mis
.cards {
display: grid;
grid-template-rows:
auto auto auto;
}
.card {
display: grid;
grid-template-rows: subgrid;
grid-row: span 3;
}
grid-template-rows:
auto auto auto;.cards {
display: grid;
grid-template-rows:
auto auto auto;
}
.card {
display: grid;
grid-template-rows: subgrid;
grid-row: span 3;
}1
2
3
Alignment
Subgrid
Mis
.cards {
display: grid;
grid-template-rows:
auto auto auto;
}
.card {
display: grid;
grid-template-rows: subgrid;
grid-row: span 3;
}
grid-template-rows:
auto auto auto;Implicit grid
Alignment
Subgrid
Øvelse
Fiks denne med Subgrid

Alignment
Page Layout
.container {
display: grid;
grid-template-columns:
[full-start] 1fr [content] minmax(0, 1200px) 1fr [full-end];
column-gap: 1rem;
> * {
grid-column: content;
}
.full-bleed {
grid-column: full;
}
}Grid pattern
.container {
display: grid;
grid-template-columns:
[full-start] 1fr [content] minmax(0, 1200px) 1fr [full-end];
column-gap: 1rem;
> * {
grid-column: content;
}
.full-bleed {
grid-column: full;
}
}Page Layout
Grid pattern
Børnebørn følger ikke indholdsbredden

Subgrid

Lav øvelsen, der ligger på git-branch'en "subgrid-caption" på GitHub
Subgrid Caption
Øvelse
Subgrid
Ressourcer




Subgrid
Container Queries
Agenda
Container Queries
Responsive komponenter
@media
Container Queries
Responsive komponenter
@container
Container Queries
Responsive komponenter
@container
- size
- name
- style
- scroll-state





Container queries kan ikke lade sig gøre
Container Queries

?
Hvis containerens bredde er > 400px, så sæt containerens bredde til 300px
🤷♂️
Hvis containerens bredde er 300px, så sæt containerens bredde til 600px
Løsningen? Containment
I praksis betyder det: en ekstra <div>
Løsningen? Containment
I praksis betyder det: en ekstra <div>
Container Queries

"På små skærme"
"På store skærme"
Card component

"Når der er lidt plads"
"Når der er meget plads"
Card component
Container queries
vs media queries

Container queries
media queries
@media (width > 900px) {...}@container card (width > 400px) {...}@media
Container queries
media queries
@media (width > 900px) {...}@container card (width > 400px) {...}@container
Container queries
@container (width > 640px) {
.card {
flex-direction: column;
}
}.card-wrapper {
container-type: inline-size;
}
@container (width > 640px) {
.card {
flex-direction: column;
}
}Den ekstra div
Container queries
Container queries
Eksempel
Container queries
Eksempel

Skift farve på baggrund af størrelse
Container queries
Øvelse

Container queries
Nesting
span {
@container (width > 75px) {
background: var(--color-2);
}
@container (width > 100px) {
background: var(--color-3);
}
...
}@media -> @container
Øvelse

.card {
container-type: inline-size;
}
article {
@container (width > 400px) { ... }
@container (width > 600px) { ... }
}
Container queries
:has()
> 300px

< 300px
- Kortet med billedet skal først tildeles et grid med to kolonner (2fr 3fr), når .card-wrapper er større end 600px
- @container (width > 600px)
- .card-wrapper skal have containter-typen "inline-size"
- container-type: inline-size; */
Container queries
:has()
> 300px

< 300px
Card komponent
Øvelse

.card-wrapper {
container-type: inline-size;
container-name: main;
}
@container main (width > 640px) {
.card {
flex-direction: column;
}
}Container queries
Navngivning
.card-wrapper {
/* container-type: inline-size;
container-name: main; */
container: main / inline-size;
}
@container main (width > 640px) {
.card {
flex-direction: column;
}
}Container queries
Navngivning
> 600px


< 400px
main
.card-wrapper
Flere containere
Øvelse
.card-wrapper {
container: card / inline-size;
}
.card {
font-size: clamp(1.45rem, 6cqw, 1.75rem);
}6 % af bredden
Container queries units
cqw, cqh, cqi, cqb, cqmin, cqmax
Container query units
h2 {
font-size: clamp(1.25rem, 5cqw, 2.5rem);
}
Flere containere
Øvelse

Lav øvelsen, der ligger på git-branch'en "responsive-album" på GitHub
Responsive Album
Øvelse

Selvstændig aktivitet
Lav øvelsen, der ligger på git-branch'en "bento-grid" på GitHub
Bento Grid
Øvelse

Selvstændig aktivitet
Lav øvelsen, der ligger på git-branch'en "makrolayout" på GitHub
Subgrid: Makro-layout
Øvelse
Slides
Kursusmateriale
Copy of Crafting UI: Layout (del 2)
By Dannie Vinther
Copy of Crafting UI: Layout (del 2)
Crafting UI w/ CSS
- 17