.card:has(img) {
display: grid;
grid-template-columns: 2fr 3fr;
}
:is(h1, h2, h3) {
color: red;
text-wrap: balance;
&:hover {
color: blue;
}
}
Forstå (og mestre) CSS Selectors
Anvende Reset.css for at sikre en ensartethed
Forstå, hvordan Nesting hjælper med organisering
Vide, hvordan vi håndterer kompatibilitetsudfordringer
Forstå og anvende principperne bag Cascade Layers
Mestre Grid & Flexbox for at skabe designstrukturer
Øvelser, øvelser og flere øvelser for at opbygge praktisk erfaring
Forstår (og mestrer) du CSS Selectors?
Ser du værdien i et Reset.css?
Har du godt greb om Nesting?
Ved du, hvordan du håndterer kompatibilitetsudfordringer?
Ser du værdien i Cascade Layers?
Har du nogenlunde styr på Grid & Flexbox?
Føler du, du har lært noget?
@layer theme {
html {
--color: oklch(80% 2 220);
}
* {
text-box-trim: both;
text-box-edge: cap alphabetic;
}
}
@layer component {
div {
margin-trim: block;
padding: 2rlh;
:is(article):has(&) {
--rainbow-gradient: in oklch longer hue, red 0 0;
padding-inline: max(1rem, (100% - 800px) / 2);
background: linear-gradient(45deg var(--rainbow-gradient));
container: div / inline-size;
}
:is(article) & {
border: 2px solid color(display-p3 1 none 1);
background: oklch(80% .37 220 / 25%);
@container div (inline-size > 35rem) {
font-size: calc(1rem * pow(1.25, 1));
}
}
:is(aside) {
container: aside / sticky;
position: sticky;
inset-block-start: 0;
@container aside state(stuck) {
& h2 {
background: red;
}
}
}
:is(h2, h3) {
inline-size: 17ch;
text-wrap: balance;
}
> h2 {
background: hsl(from var(--color) h s calc(l + 10%));
}
:not(article) & :nth-child(2 of .paragraph) {
&:first-letter {
initial-letter: 3;
margin-inline-end: 1ch;
}
}
& section {
max-inline-size: 400px;
> p {
text-wrap: pretty;
}
}
}
}
Mål: Mestre for at skabe designstrukturer
Grid-øvelser: https://exercssises.vinther.codes/grid/
Flex-øvelser: https://exercssises.vinther.codes/flex/
.container {
display: grid;
place-content: center;
width: 300px;
height: 300px;
}
.container {
display: grid;
place-content: center start;
width: 300px;
height: 300px;
}
.container {
display: grid;
place-content: end center;
width: 300px;
height: 300px;
}
.container {
display: grid;
place-items: center;
> * {
grid-area: 1 / 1;
}
}
<div class="container">
<img src="...">
<h3>...</h3>
</div>
.container {
display: flex;
flex-flow: wrap;
}
.container {
display: flex;
flex-flow: wrap;
justify-content: center;
}
.container {
display: flex;
flex-flow: wrap;
}
.child {
flex: 1;
}
.container {
display: grid;
grid-template-columns:
repeat(auto-fit, minmax(200px, 1fr));
}
Elementerne skal
.container {
display: grid;
grid-template-columns:
repeat(auto-fit, minmax(200px, 1fr));
}
.container {
display: grid;
grid-template-columns:
repeat(auto-fit, minmax(200px, 1fr));
}
1fr = minmax(auto, 1fr)
grid images = align-self: start;
flex images = align-self: stretch;
Frontend, 3. semester
Forstå, hvordan Subgrid hjælper med komplekse layouts
Anvende Container Queries for at lave responsive komponenter
Forstå og anvende principperne bag Cascade Layers
Øvelser, øvelser og flere øvelser for at opbygge praktisk erfaring
Forstå, hvordan Subgrid hjælper med komplekse layouts
Anvende Container Queries for at lave responsive komponenter
Forstå og anvende principperne bag Cascade Layers
Øvelser, øvelser og flere øvelser for at opbygge praktisk erfaring
Mål: Forstå, hvordan det hjælper med komplekse layouts
.grid {
align-items: last baseline;
grid-template-columns: subgrid;
}
Loading...
Loading...
.subgrid {
display: grid;
grid-template-rows:
[system-status] 3.5rem
[primary-nav] 3rem
[primary-header] 4rem
[main] auto
[footer] 4rem
[system-gestures] 2rem;
grid-template-columns:
[fullbleed-start] 1rem
[main-start] auto
[main-end] 1rem
[fullbleed-end];
}
nav {
grid-area: primary-nav / fullbleed;
display: grid;
grid-template-columns: subgrid;
}
nav > .content {
grid-area: main;
}
.container {
display: grid;
grid-template-columns:
1fr minmax(0, 1200px) 1fr;
column-gap: 1rem;
> * {
grid-column: 2;
}
.full-bleed {
grid-column: 1 / -1;
}
}
1fr minmax(0, 1200px) 1fr
.container {
display: grid;
grid-template-columns:
[full-start] 1fr [main] minmax(0, 1200px) 1fr [full-end];
column-gap: 1rem;
> * {
grid-column: main;
}
.full-bleed {
grid-column: full;
}
}
full-start main full-end
.container {
display: grid;
grid-template-columns:
[full-start] 1fr [main] minmax(0, 1200px) 1fr [full-end];
column-gap: 1rem;
> * {
grid-column: main;
}
.full-bleed {
grid-column: full;
}
}
full-start main full-end
.cards {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 1rem;
}
Mål: Lave responsive componenter
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>
@container (width > 640px) {
.card {
flex-direction: column;
}
}
@media (width > 640px) {
...
}
.card-wrapper {
container-type: inline-size;
}
@container (width > 640px) {
.card {
flex-direction: column;
}
}
Den ekstra div
> 600px
< 600px
> 600px
< 600px
.card-wrapper {
container-type: inline-size;
container-name: main;
}
@container main (width > 640px) {
.card {
flex-direction: column;
}
}
.card-wrapper {
container: main / inline-size;
}
@container main (width > 640px) {
.card {
flex-direction: column;
}
}
> 600px
< 400px
main
.card-wrapper
.card-wrapper {
container: card / inline-size;
}
.card-wrapper {
container: card / inline-size;
}
.card {
font-size: clamp(1.45rem, 6cqw, 1.75rem);
}
6 % af bredden
h2 {
font-size: clamp(1.25rem, 5cqw, 2.5rem);
}
Forstå, hvordan Subgrid hjælper med komplekse layouts
Anvende Container Queries for at lave responsive komponenter
Forstå og anvende principperne bag Cascade Layers
Øvelser, øvelser og flere øvelser for at opbygge praktisk erfaring