0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Tailwind Typographyが効かない!? react-markdownの見た目を自作CSSで完全再現する方法

Last updated at Posted at 2025-08-15

経緯

react-markdownは MarkdownをHTMLに変換してくれる便利なライブラリですが、
Tailwind CSS と一緒に使うと、ブラウザ標準のMarkdown用スタイルがリセットされ、
見出しやリストが「ただのテキスト」になってしまうことがあります。

この問題の定番対策は、@tailwindcss/typographyを導入してproseクラスを当てることです。
しかし、私の環境ではなぜかtypographyがまったく効かないという事態に遭遇…。

そこで発想を変え、Markdown表示用のCSSを自作して当てるというパワー系の方法で解決しました。

解決方法

  1. Markdown表示用CSSを作る

src/app/globals.css(Next.jsの場合)に以下を追加します。

.markdown-body {
  line-height: 1.6;
  color: inherit;
  word-break: break-word;
}

/* 見出し */
.markdown-body h1 {
  font-size: 2rem;
  font-weight: bold;
  margin: 1.5rem 0 1rem;
  border-bottom: 1px solid #ddd;
  padding-bottom: 0.3rem;
}
.markdown-body h2 {
  font-size: 1.5rem;
  font-weight: bold;
  margin: 1.25rem 0 0.75rem;
  border-bottom: 1px solid #eee;
  padding-bottom: 0.2rem;
}
.markdown-body h3 {
  font-size: 1.25rem;
  font-weight: bold;
  margin: 1rem 0 0.5rem;
}
.markdown-body h4 {
  font-size: 1.125rem;
  font-weight: bold;
  margin: 0.75rem 0 0.5rem;
}
.markdown-body h5 {
  font-size: 1rem;
  font-weight: bold;
  margin: 0.75rem 0 0.5rem;
}
.markdown-body h6 {
  font-size: 0.875rem;
  font-weight: bold;
  color: #666;
  margin: 0.75rem 0 0.5rem;
}

/* 段落 */
.markdown-body p {
  margin: 0.5rem 0;
}

/* リスト */
.markdown-body ul {
  list-style: disc;
  padding-left: 1.5rem;
  margin: 0.5rem 0;
}
.markdown-body ol {
  list-style: decimal;
  padding-left: 1.5rem;
  margin: 0.5rem 0;
}
.markdown-body li {
  margin: 0.25rem 0;
}

/* 引用 */
.markdown-body blockquote {
  border-left: 4px solid #ccc;
  padding-left: 1rem;
  margin: 0.5rem 0;
  color: #666;
  background: #f9f9f9;
}

/* コード */
.markdown-body pre {
  background: #f5f5f5;
  padding: 0.75rem;
  border-radius: 6px;
  overflow-x: auto;
}
.markdown-body code {
  background: #f5f5f5;
  padding: 0.2rem 0.4rem;
  border-radius: 4px;
  font-size: 0.9em;
}

/* リンク */
.markdown-body a {
  color: #3b82f6;
  text-decoration: underline;
}
.markdown-body a:hover {
  color: #2563eb;
}

/* 水平線 */
.markdown-body hr {
  border: none;
  border-top: 1px solid #ccc;
  margin: 1.5rem 0;
}

/* 画像 */
.markdown-body img {
  max-width: 100%;
  height: auto;
}

/* 表 */
.markdown-body table {
  border-collapse: collapse;
  margin: 1rem 0;
}
.markdown-body th,
.markdown-body td {
  border: 1px solid #ccc;
  padding: 0.25rem 0.5rem;
}
.markdown-body th {
  background: #f3f4f6;
  text-align: left;
}

2.ReactMarkdown にクラスを当てる

Markdownを表示するコンポーネントのラッパーにmarkdown-bodyクラスをつけます。

<div className="markdown-body">
  <ReactMarkdown remarkPlugins={[remarkGfm]}>
    {content}
  </ReactMarkdown>
</div>

メリット

  • Tailwind Typography など外部プラグインに依存しない
  • 表示スタイルを完全に自分好みにカスタマイズ可能
  • 環境依存の不具合を回避できる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?