CRAFTING UI
Frontend Design
Responsive components
Forstå, hvordan hjælper med komplekse layouts
Anvende til responsive komponenter
Øvelser for at opbygge praktisk erfaring
Forstå, hvordan hjælper med komplekse layouts
Anvende til responsive komponenter
Øvelser for at opbygge praktisk erfaring
Mål: Forstå komplekse layouts
Loading...
.cards {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 1rem;
}CSS Grid
CSS Grid
Subgrid
Subgrid
.cards {
display: grid;
}
.card {
display: grid;
}grid-template-rows:
auto auto auto;Subgrid
.cards {
display: grid;
}
.card {
display: grid;
grid-template-rows: subgrid;
}grid-template-rows:
auto auto auto;Subgrid
.cards {
display: grid;
}
.card {
display: grid;
grid-template-rows: subgrid;
}grid-template-rows:
auto auto auto;Subgrid
.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
Subgrid
.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
Subgrid
Øvelse
Fiks denne med Subgrid
.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;
}
}Grid pattern
Børnebørn følger ikke indholdsbredden
Subgrid
Lav øvelsen, der ligger på git-branch'en "subgrid-caption" på GitHub
Øvelse
Ressourcer
Responsive komponenter
@media
Responsive komponenter
@container
Responsive komponenter
@container
Container queries kan ikke lade sig gøre
?
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>
"På små skærme"
"På store skærme"
Card component
"Når der er lidt plads"
"Når der er meget plads"
Card component
vs media queries
@media (width > 900px) {...}@container card (width > 400px) {...}@media
@media (width > 900px) {...}@container card (width > 400px) {...}@container
@container (width > 640px) {
.card {
flex-direction: column;
}
}.card-wrapper {
container-type: inline-size;
}
@container (width > 640px) {
.card {
flex-direction: column;
}
}Den ekstra div
Eksempel
Eksempel
Skift farve på baggrund af størrelse
Øvelse
Nesting
span {
@container (width > 75px) {
background: var(--color-2);
}
@container (width > 100px) {
background: var(--color-3);
}
...
}.card {
container-type: inline-size;
}
article {
@container (width > 400px) { ... }
@container (width > 600px) { ... }
}:has()
> 300px
< 300px
:has()
> 300px
< 300px
Øvelse
.card-wrapper {
container-type: inline-size;
container-name: main;
}
@container main (width > 640px) {
.card {
flex-direction: column;
}
}Navngivning
.card-wrapper {
/* container-type: inline-size;
container-name: main; */
container: main / inline-size;
}
@container main (width > 640px) {
.card {
flex-direction: column;
}
}Navngivning
> 600px
< 400px
main
.card-wrapper
Øvelse
.card-wrapper {
container: card / inline-size;
}
.card {
font-size: clamp(1.45rem, 6cqw, 1.75rem);
}6 % af bredden
cqw, cqh, cqi, cqb, cqmin, cqmax
h2 {
font-size: clamp(1.25rem, 5cqw, 2.5rem);
}Øvelse
Lav øvelsen, der ligger på git-branch'en "responsive-album" på GitHub
Øvelse
Selvstændig aktivitet
Lav øvelsen, der ligger på git-branch'en "bento-grid" på GitHub
Øvelse
Selvstændig aktivitet
Lav øvelsen, der ligger på git-branch'en "makrolayout" på GitHub
Øvelse