Estilizar Markdown renderizado con Tailwind Typography
Puedes usar el plugin Typography de Tailwind para estilizar el Markdown renderizado de fuentes como las content collections de Astro.
Esta receta te enseñará cómo crear un componente reutilizable de Astro para estilizar tu contenido Markdown usando las utility classes de Tailwind.
Requisitos previos
Sección titulada “Requisitos previos”Un proyecto de Astro que:
- tiene el Vite plugin de Tailwind instalado.
- usa las content collections de Astro.
Configurando @tailwindcss/typography
Sección titulada “Configurar @tailwindcss/typography”Primero, instala @tailwindcss/typography usando tu gestor de paquetes preferido.
npm install -D @tailwindcss/typographypnpm add -D @tailwindcss/typographyyarn add --dev @tailwindcss/typographyLuego, añade el paquete como un plugin en tu archivo de configuración de Tailwind.
@import 'tailwindcss';@plugin '@tailwindcss/typography';-
Crea un componente
<Prose />para proporcionar un<div>envolvente con un<slot />para tu Markdown renderizado. Añade la clase de estiloprosejunto con cualquier modificador de elementos de Tailwind deseado en el elemento padre.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>El plugin
@tailwindcss/typographyusa modificadores de elementos para estilizar componentes hijos de un contenedor con la claseprose.Estos modificadores siguen la siguiente sintaxis general:
prose-[element]:class-to-applyPor ejemplo,
prose-h1:font-boldda a todas las etiquetas<h1>la clasefont-boldde Tailwind. -
Consulta la entrada de tu colección en la página donde quieres renderizar tu Markdown. Pasa el componente
<Content />deawait render(entry)a<Prose />como hijo para envolver tu contenido Markdown en estilos de Tailwind.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>