Style rendered Markdown with Tailwind Typography
Ta treść nie jest jeszcze dostępna w Twoim języku.
You can use Tailwind’s Typography plugin to style rendered Markdown from sources such as Astro’s content collections.
This recipe will teach you how to create a reusable Astro component to style your Markdown content using Tailwind’s utility classes.
Prerequisites
Section titled “Prerequisites”An Astro project that:
- has Tailwind’s Vite plugin installed.
- uses Astro’s content collections.
Setting Up @tailwindcss/typography
Section titled “Setting Up @tailwindcss/typography”First, install @tailwindcss/typography using your preferred package manager.
npm install -D @tailwindcss/typographypnpm add -D @tailwindcss/typographyyarn add --dev @tailwindcss/typographyThen, add the package as a plugin in your Tailwind configuration file.
@import 'tailwindcss';@plugin '@tailwindcss/typography';Recipe
Section titled “Recipe”-
Create a
<Prose />component to provide a wrapping<div>with a<slot />for your rendered Markdown. Add the style classprosealongside any desired Tailwind element modifiers in the parent element.src/components/Prose.astro ------<divclass="prose dark:prose-invertprose-h1:font-bold prose-h1:text-xlprose-a:text-blue-600 prose-p:text-justify prose-img:rounded-xlprose-headings:underline"><slot /></div>The
@tailwindcss/typographyplugin uses element modifiers to style child components of a container with theproseclass.These modifiers follow the following general syntax:
prose-[element]:class-to-applyFor example,
prose-h1:font-boldgives all<h1>tags thefont-boldTailwind class. -
Query your collection entry on the page you want to render your Markdown. Pass the
<Content />component fromawait render(entry)to<Prose />as a child to wrap your Markdown content in Tailwind styles.src/pages/index.astro ---import Prose from '../components/Prose.astro';import Layout from '../layouts/Layout.astro';import { getEntry, render } from 'astro:content';const entry = await getEntry('collection', 'entry');const { Content } = await render(entry);---<Layout><Prose><Content /></Prose></Layout>