Opsamling fra i går
Hvor er vi?
npm create astro@latest .npm create astro@latest .npm run dev"Live server"
ctrl + cStop server
Luk den, når du er færdig for dagen, eller inden du evt. opstarter et nyt projekt
/Projektnavn
├── .vscode/
├── node_modules/
├── public/
├── src/
├── .gitignore
├── astro.config.mjs
├── package.json
├── package-lock.json
├── tsconfig.json
└── README.md/
├── public/
└── src/
├── components/
│ ├── Header.astro
│ └── Card.astro
└── pages/
├── index.astro
└── about.astro/
├── public/
└── src/
├── components/
│ ├── Header.astro
│ └── Card.astro
├── pages/
│ ├── index.astro
│ └── about.astro
└── styles/
└── global.cssFærdigheder
lave varianter i komponenter
lave og anvende en layout-komponent
lave en ny underside
vise/skjule indhold med simple betingelser
Færdigheder
lave varianter i komponenter
lave og anvende en layout-komponent
lave en ny underside
vise/skjule indhold med simple betingelser
speciel mappe
/pages-mappen findes diverse (under)sider.astro (eller endda .html)/pages begynder altid med små bogstaver, selvom de har endelsen .astro (til forskel fra components)<nav>
<a href="/">Home</a> <!-- index.astro -->
<a href="/search">Search</a> <!-- search.astro -->
</nav>Genbrugelige sideskabeloner
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>Search</title>
</head>
<body>
<h1>Search</h1>
</body>
</html>point of interest
---
import MainLayout from '../layouts/MainLayout.astro';
---
<MainLayout title="Search">
<h1>Search</h1>
</MainLayout>point of interest
skabelon med prop
Genbrugelige sideskabeloner
---
const { title } = Astro.props;
---
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>{title}</title>
</head>
<body>
<slot />
</body>
</html>prop
---
import MainLayout from '../layouts/MainLayout.astro';
---
<MainLayout title="Search">
<h1>Search</h1>
</MainLayout>Genbrugelige sideskabeloner
---
const { title } = Astro.props;
---
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>{title}</title>
</head>
<body>
<slot />
</body>
</html>---
import MainLayout from '../layouts/MainLayout.astro';
---
<MainLayout title="Search">
<h1>Search</h1>
</MainLayout>sideindhold her
Genbrugelige sideskabeloner
---
const { title } = Astro.props;
---
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>{title}</title>
</head>
<body>
<Header />
<Sidebar />
<main>
<slot />
</main>
<Footer />
</body>
</html>---
const { title } = Astro.props;
---
<section>
<h3>{title}</h3>
<div>
<slot /> <!-- indhold -->
</div>
</section>
<style>
div {
display: flex;
/*....*/
}
</style>billede
billede
title
title
subtitle
subtitle
billede
billede
title
title
subtitle
subtitle
E-badge
form på billedet
form på billedet
E-badge
variant
conditional rendering
Hvad adskiller dem?
Samme knap, forskelligt udseende
"primary"
"accent"
"secondary"
"ghost"
Samme knap, forskelligt udseende
<Button variant="primary">Get Started</Button>
<Button variant="accent">Get Started</Button>
<Button variant="secondary">Get Started</Button>
<Button variant="ghost">Get Started</Button><Button variant="primary" label="Get Started" />---
const { variant } = Astro.props;
---
<button class={variant}>
<slot />
</button>
<style>
.primary {}
.secondary {}
.accent {}
.ghost {}
</style><button>
<slot />
</button><Button variant="secondary">Get started</Button><button>
<slot />
</button>Get started<Button variant="secondary">Get started</Button><button>
<slot />
</button>Get started<Button
variant="primary">
Log in
</Button><Button
variant="primary"
size="medium">
Log in
</Button>---
const { variant } = Astro.props;
---
<button class={variant}>
<slot />
</button>
<style>
.primary { ... }
</style>---
const { variant, size } = Astro.props;
---
<button class={`${variant} ${size}`}>
<slot />
</button>
<style>
.primary { ... }
.medium { ... }
</style>Vis eller skjul indhold baseret på bestemte betingelser
<article>
<h2>...</h2>
<img />
</article><p class="badge">New</p>---
const visible = true;
---
<article>
<h2>...</h2>
<img />
</article>{}&&visible<p class="badge">New</p>---
const visible = true;
---
<article>
<h2>...</h2>
<img />
</article><p class="badge">New</p>{}&&visible---
const visible = true;
---
<article>
<h2>...</h2>
<img />
</article><p class="badge">New</p>{}&&visiblehvis visible er sand
---
const visible = true;
---
<article>
<h2>...</h2>
<img />
</article>vis HTML
<p class="badge">New</p>{}&&visible---
const { newBadge } = Astro.props;
---
<article>
<h2>...</h2>
{newBadge && <p class="badge">New</p>}
<img />
</article><CategoryCard
newBadge={true}
...
/>---
const { newBadge } = Astro.props;
---
<article>
<h2>...</h2>
{newBadge && <p class="badge">New</p>}
<img />
</article><CategoryCard
newBadge={true}
...
/>
<CategoryCard
...
/>---
const { title } = Astro.props;
---
<article>
{title && <h2>{title}</h2>}
<img />
</article><Card
title="Card Heading"
description="Lorem..."
/>
<Card
description="Lorem..."
/>---
const { soldout } = Astro.props;
---
<article>
{soldout && <p>Udsolgt</p>}
<img />
</article><Card
soldout={true}
/>
<Card
...
/>Hvis jeg vil vise noget andet som fallback
---
const { soldout } = Astro.props;
---
<article>
{soldout ? <p>Udsolgt</p> : <Button />}
<img />
</article><Card
soldout={true}
/>
<Card
...
/>Hvis jeg vil vise noget andet som fallback
<Component
isActive={true}
...
/>---
const { isActive } = Astro.props;
---
<div class={isActive && "active"}>
...
</div>hvis isActive er sand -> "active"
active