Estilize o Markdown renderizado com Tailwind Typography
Você pode usar o plugin de tipografia do Tailwind para estilizar o Markdown renderizado de fontes como as coleções de conteúdo do Astro.
Este guia irá te ensinar a criar um componente Astro reutilizável para estilizar seu conteúdo Markdown usando as classes utilitárias do Tailwind.
Pré-requisitos
Seção intitulada Pré-requisitosUm projeto Astro que:
- tenha a integração do Tailwind do Astro instalada.
- use as coleções de conteúdo do Astro.
Configurando @tailwindcss/typography
Seção intitulada Configurando @tailwindcss/typographyPara começar, instale o @tailwindcss/typography
usando o seu gerenciador de pacotes preferido.
npm install -D @tailwindcss/typography
pnpm add -D @tailwindcss/typography
yarn add --dev @tailwindcss/typography
Em seguida, adicione o pacote como um plugin no seu arquivo de configuração do Tailwind.
/** @type {import('tailwindcss').Config} */export default { theme: { // ... }, plugins: [ require('@tailwindcss/typography'), // ... ],}
-
Crie um componente
<Prose />
para fornecer uma<div>
com um<slot />
que envolva seu Markdown renderizado. Adicione a classe de estiloprose
juntamente com quaisquer modificadores de elementos do Tailwind desejados no elemento pai.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>O plugin
@tailwindcss/typography
usa modificadores de elementos para estilizar componentes filhos de um contêiner com a classeprose
.Esses modificadores seguem a seguinte sintaxe geral:
prose-[element]:classe-a-ser-aplicadaPor exemplo,
prose-h1:font-bold
dá a todas as tags<h1>
a classe Tailwindfont-bold
. -
Consulte sua entrada de coleção na página em que deseja renderizar seu Markdown. Passe o componente
<Content />
deawait entry.render()
para<Prose />
como um componente filho para envolver seu conteúdo Markdown em estilos do Tailwind.src/pages/index.astro ---import Prose from '../components/Prose.astro';import Layout from '../layouts/Layout.astro';import { getEntry } from 'astro:content';const entry = await getEntry('collection', 'entry');const { Content } = await entry.render();---<Layout><Prose><Content /></Prose></Layout>