<script context="module"> export async function preload() { const posts = await this.fetch(`blog.json`).then(r => r.json()); return { posts }; } </script> <script> export let posts; </script> <svelte:head> <title>Blog • Svelte</title> <link rel="alternate" type="application/rss+xml" title="Svelte blog" href="https://svelte.dev/blog/rss.xml"> <meta name="twitter:title" content="Svelte blog"> <meta name="twitter:description" content="Articles about Svelte and UI development"> <meta name="Description" content="Articles about Svelte and UI development"> </svelte:head> <h1 class="visually-hidden">Blog</h1> <div class='posts stretch'> {#each posts as post} <article class='post' data-pubdate={post.metadata.dateString}> <a class="no-underline" rel='prefetch' href='blog/{post.slug}' title='Read the article »'> <h2>{post.metadata.title}</h2> <p>{post.metadata.description}</p> </a> </article> {/each} </div> <style> .posts { grid-template-columns: 1fr 1fr; grid-gap: 1em; min-height: calc(100vh - var(--nav-h)); padding: var(--top-offset) var(--side-nav) 6rem var(--side-nav); max-width: var(--main-width); margin: 0 auto; } h2 { display: inline-block; margin: 3.2rem 0 0.4rem 0; color: var(--text); max-width: 18em; font-size: var(--h3); font-weight: 400; } .post:first-child { margin: 0 0 2rem 0; padding: 0 0 4rem 0; border-bottom: var(--border-w) solid #6767785b; /* based on --second */ } .post:first-child h2 { font-size: 4rem; font-weight: 400; color: var(--second); } .post:first-child::before, .post:nth-child(2)::before { content: 'Latest post • ' attr(data-pubdate); color: var(--flash); font-size: var(--h6); font-weight: 400; letter-spacing: .05em; text-transform: uppercase; } .post:nth-child(2)::before { content: 'Older posts'; } .post p { font-size: var(--h5); max-width: 30em; color: var(--second); } .post > a { display: block } .posts a:hover, .posts a:hover > h2 { color: var(--flash) } </style>