diff --git a/README.md b/README.md
index 2303283..4824a89 100644
--- a/README.md
+++ b/README.md
@@ -63,15 +63,15 @@ uten at visningene må skrives om.
## Sider og ruter
-Rutene er definert i `src/App.tsx` med React Router. Alle sidene er
-foreløpig plassholdere som fylles ut i egne oppgaver.
-
-| Rute | Side | Innhold nå |
-| ---------------------- | ------------------- | ------------------------------------------ |
-| `/` | `CatalogPage` | Plassholder og lenker til eksempelannonser |
-| `/annonser/:listingId` | `ListingDetailPage` | Tittel, område og pris for annonsen |
-| `/lei-ut` | `RentOutPage` | Plassholder for utleieskjema |
-| Alle andre | `NotFoundPage` | «Fant ikke siden» |
+Rutene er definert i `src/App.tsx` med React Router. Sidene som ikke er
+ferdige, er plassholdere som fylles ut i egne oppgaver.
+
+| Rute | Side | Innhold nå |
+| ---------------------- | ------------------- | ------------------------------------- |
+| `/` | `CatalogPage` | Alle eksempelannonser som annonsekort |
+| `/annonser/:listingId` | `ListingDetailPage` | Tittel, område og pris for annonsen |
+| `/lei-ut` | `RentOutPage` | Plassholder for utleieskjema |
+| Alle andre | `NotFoundPage` | «Fant ikke siden» |
Ny side: lag en mappe i `src/pages/`, legg til en `Route` i `App.tsx` og kall
`usePageTitle` i siden. Sidemalen (`Layout`) gir header, navigasjon og
diff --git a/docs/design.md b/docs/design.md
index 53fc73f..96938cd 100644
--- a/docs/design.md
+++ b/docs/design.md
@@ -103,16 +103,36 @@ bakgrunn, men teksten alene er nok til å skille dem.
### ListingCard
-Visuell referanse for et annonsekort med bilde, tittel, kategori, område og
-pris. Når `imageUrl` er `null`, vises en plassholder med teksten «Ingen bilde».
-Bildet har tom alt-tekst fordi tittelen rett under beskriver det samme.
+Annonsekort med bilde, tittel, kategori, område og pris. Når `imageUrl` er
+`null`, vises en plassholder med teksten «Ingen bilde». Bildet har tom
+alt-tekst fordi tittelen rett under beskriver det samme.
```tsx
{categoryLabels[listing.category]} · {listing.area}
diff --git a/src/components/ListingGrid/ListingGrid.module.css b/src/components/ListingGrid/ListingGrid.module.css new file mode 100644 index 0000000..b64e1c4 --- /dev/null +++ b/src/components/ListingGrid/ListingGrid.module.css @@ -0,0 +1,19 @@ +.grid { + display: grid; + /* min() hindrer at kolonnene blir bredere enn skjermen på smale mobiler. */ + grid-template-columns: repeat(auto-fill, minmax(min(16rem, 100%), 1fr)); + gap: var(--space-6); + margin: 0; + padding: 0; + list-style: none; +} + +/* Lar kortet fylle hele raden, slik at kortene i samme rad blir like høye. */ +.item { + display: flex; + flex-direction: column; +} + +.item > * { + flex: 1; +} diff --git a/src/components/ListingGrid/ListingGrid.tsx b/src/components/ListingGrid/ListingGrid.tsx new file mode 100644 index 0000000..96ab233 --- /dev/null +++ b/src/components/ListingGrid/ListingGrid.tsx @@ -0,0 +1,26 @@ +import type { Listing } from '../../types/listing.ts'; +import ListingCard from '../ListingCard/ListingCard.tsx'; +import styles from './ListingGrid.module.css'; + +interface ListingGridProps { + /** Annonsene som skal vises, i den rekkefølgen de skal stå. */ + listings: Listing[]; +} + +/** + * Responsivt rutenett med annonsekort. Rutenettet er en liste, slik at + * skjermlesere kan fortelle hvor mange annonser som vises. + */ +function ListingGrid({ listings }: ListingGridProps) { + return ( +Lei eller lån verktøy av andre studenter og privatpersoner i Trondheim. - Her kommer katalogen med søk, filtre og sortering.
-Midlertidig liste til katalogen er på plass.
-