jpskill.com
🎨 デザイン コミュニティ

blog-article-design

ブログ記事や記事ページのレイアウトを、プロのタイポグラフィや視覚的な階層構造を用いて高品質にデザインし、ダーク/ライトテーマにも対応した、ブログや技術文書、事例紹介などの長文コンテンツを魅力的に構築するSkill。

📜 元の英語説明(参考)

Design and implement high-quality blog post and article page layouts with professional typography, spacing, and visual hierarchy. Use when building blog pages, article templates, technical documentation readers, use-case pages, or long-form content layouts. Covers dark and light themes.

🇯🇵 日本人クリエイター向け解説

一言でいうと

ブログ記事や記事ページのレイアウトを、プロのタイポグラフィや視覚的な階層構造を用いて高品質にデザインし、ダーク/ライトテーマにも対応した、ブログや技術文書、事例紹介などの長文コンテンツを魅力的に構築するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o blog-article-design.zip https://jpskill.com/download/14697.zip && unzip -o blog-article-design.zip && rm blog-article-design.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14697.zip -OutFile "$d\blog-article-design.zip"; Expand-Archive "$d\blog-article-design.zip" -DestinationPath $d -Force; ri "$d\blog-article-design.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して blog-article-design.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → blog-article-design フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

ブログと記事のデザイン

概要

ブログ記事、記事、および長文コンテンツページのためのプロフェッショナルなデザインシステムです。Stripe、Vercel、Tailwind、およびLinearのドキュメントのパターンに基づいています。ダークテーマとライトテーマの両方での読みやすさに最適化された、特定のタイポグラフィスケール、スペーシングルール、コードブロックのスタイル、および視覚的な階層のガイドラインを提供します。

手順

ブログ/記事ページをデザインまたは改善する際は、次の手順に従ってください。

ステップ 1: コンテンツコンテナを設定する

最も重要な決定は、コンテンツの幅です。最適な行の長さは、1行あたり60〜70文字です。

コンテナの幅: max-w-2xl (672px) は文章主体の記事向け
                 max-w-3xl (768px) はコンテンツに幅の広いコードブロックやテーブルが含まれる場合
中央揃え:       mx-auto
水平方向のパディング:  px-6 (両側に24px)
上部のパディング:     pt-24 (96px) は固定ヘッダーを避けるため
下部のパディング:  pb-16 (64px)

記事のテキストに max-w-4xl 以上の幅を使用しないでください。行が長すぎて快適に読めなくなります。

ステップ 2: タイポグラフィスケールを定義する

明確な階層を持つ制約されたタイプスケールを使用します。すべてのレベルが視覚的に区別できる必要があります。

ダークテーマ (zinc palette):

H1:     text-3xl md:text-4xl font-bold text-zinc-50          — ページタイトル、1ページに1つ
H2:     text-2xl font-semibold tracking-tight text-zinc-50   — 主要なセクション、mt-12 mb-4
H3:     text-xl font-semibold tracking-tight text-zinc-50    — サブセクション、mt-8 mb-3
H4:     text-lg font-semibold text-zinc-100                  — マイナーな見出し、mt-6 mb-2
Body:   text-base leading-7 text-zinc-300 mb-6               — 段落、16px/28px
Strong: text-zinc-50 font-semibold                           — 本文中の強調
Muted:  text-zinc-400                                        — キャプション、メタデータ
Link:   text-accent underline decoration-accent/40           — 可視でアクセス可能なリンク

ライトテーマ (gray palette):

H1:     text-3xl md:text-4xl font-bold text-gray-900
H2:     text-2xl font-semibold tracking-tight text-gray-900
H3:     text-xl font-semibold tracking-tight text-gray-900
Body:   text-base leading-7 text-gray-600 mb-6
Strong: text-gray-900 font-semibold
Muted:  text-gray-500

重要なルール:

  • 本文の行の高さは、快適な読みやすさのために leading-7 (1.75) である必要があります
  • 段落の間隔 mb-6 は、まばらな感じを与えずに明確な分離を作成します
  • 見出しは、洗練された密な感じのために tracking-tight を使用します
  • H2 は mt-12 を取得します — 寛大な上マージンは、新しい主要なセクションを示します

ステップ 3: リストとインライン要素をスタイルする

順不同: list-disc list-outside pl-6 space-y-2 text-zinc-300 my-6
順序付き:   list-decimal list-outside pl-6 space-y-2 text-zinc-300 my-6
リスト項目: text-base leading-7
インラインコード: bg-white/10 px-1.5 py-0.5 rounded-md text-[0.9em] font-mono text-zinc-200
引用: border-l-4 border-zinc-700 pl-4 my-6 text-zinc-400 italic
水平線: border-white/10 my-12

他の要素(コードブロック)によって中断された順序付きリストの場合、正しい番号付けを維持するために start 属性を保持します。

ステップ 4: コードブロックをデザインする

2つの異なるコードブロックタイプ:

言語タグ付きブロック (構文が強調表示されたコード):

コンテナ: my-6 rounded-xl border border-white/10 bg-zinc-900 overflow-hidden
ヘッダー:    flex items-center gap-2 px-4 py-2.5 border-b border-white/5 bg-zinc-900/80
言語ラベル: text-xs font-mono text-zinc-500
コード領域: px-5 py-4 overflow-x-auto
Pre:       text-sm leading-relaxed whitespace-pre-wrap break-words

テキスト/出力ブロック (タグなしまたは text 言語):

コンテナ: my-6 rounded-xl border border-white/10 bg-zinc-900 overflow-x-auto
Pre:       px-5 py-4 text-sm leading-relaxed whitespace-pre-wrap break-words font-mono

出力ブロックの場合、行ごとの視覚的な階層を適用します。

  • 最初の空でない行 → text-zinc-50 font-semibold (タイトル)
  • すべて大文字の行 → text-zinc-100 font-medium (セクションヘッダー)
  • : で終わる行 (60文字未満) → セクションヘッダーのスタイル
  • 番号付きの項目 (1. ...) → text-zinc-200
  • 区切り線 (---, ===) → text-zinc-700
  • ドル金額、パーセンテージ → text-emerald-400 ハイライト
  • その他すべて → text-zinc-400 (本文)
  • 空白行 → h-3 スペーサー

ステップ 5: テーブルをデザインする

ラッパー:  overflow-x-auto my-6 rounded-xl border border-white/10
テーブル:    w-full text-sm border-collapse
Thead:    bg-zinc-900/50
Th:       text-left py-3 px-4 text-zinc-200 font-semibold text-xs uppercase tracking-wider
Tr:       border-b border-white/5
Td:       py-3 px-4 text-zinc-300

ステップ 6: ページレベルの構造を追加する

適切に構造化された記事ページには、次のセクションが順番に含まれています。

1. パンくずリスト — text-sm text-muted、hover:text-white のリンク
2. タイトル — H1、1行が望ましい、太字
3. メタデータバー — カテゴリバッジ、タグ、作成者、日付 (flex-wrap gap-3)
4. 関連リソース — リンクされたカード (該当する場合)
5. 記事本文 — markdown でレンダリングされたコンテンツ
6. フッター — 関連する記事、共有ボタン (オプション)

カテゴリバッジのスタイル: text-xs bg-accent/20 text-accent px-2 py-1 rounded capitalize タグ: text-xs text-muted# プレフィックス

ステップ 7: レスポンシブな動作

モバイル (<640px):  px-6、text-3xl タイトル、フル幅のコードブロック
タブレット (640px+):  モバイルと同じですが、行の長さが長くなります
デスクトップ (768px+): text-4xl タイトル、中央揃えのコンテナ

コードブロックは、モバイルでは overflow-x-auto を使用し、可能な場合は水平スクロールを避けるために whitespace-pre-wrap break-words を使用する必要があります。

例 1: ダークテーマの記事のための React markdown コンポーネントのオーバーライド

ユーザーリクエスト: 「ダークテーマのブログ記事ページ用にカスタム markdown コンポーネントを作成してください」

実装:


import React from 'react'

export const markdownComponents = {
  h1: () => null, // 記事の上に別途レンダリングされるタイトル
  h2: ({ children }: any) => (
    <h2 className="text-2xl font-semibold tracking-tight text-zinc-50 mt-12 mb-4">{children}</h2>
  ),
  h3: ({ children }: any) => (
    <h3 className="text-xl font-semibold tracking-tight text-zinc-50 mt-8 mb-3">{children}</h3>
  ),


(原文はここで切り詰められています)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Blog & Article Design

Overview

Professional design system for blog posts, articles, and long-form content pages. Based on patterns from Stripe, Vercel, Tailwind, and Linear documentation. Provides specific typography scales, spacing rules, code block styling, and visual hierarchy guidelines optimized for readability on both dark and light themes.

Instructions

When designing or improving a blog/article page, follow these steps in order.

Step 1: Set the content container

The single most important decision is content width. Optimal reading length is 60-70 characters per line.

Container width: max-w-2xl (672px) for prose-heavy articles
                 max-w-3xl (768px) if content includes wide code blocks or tables
Centering:       mx-auto
Horizontal pad:  px-6 (24px on each side)
Top padding:     pt-24 (96px) to clear fixed headers
Bottom padding:  pb-16 (64px)

Never use max-w-4xl or wider for article text — lines become too long to read comfortably.

Step 2: Define the typography scale

Use a constrained type scale with clear hierarchy. Every level must be visually distinct.

Dark theme (zinc palette):

H1:     text-3xl md:text-4xl font-bold text-zinc-50          — Page title, one per page
H2:     text-2xl font-semibold tracking-tight text-zinc-50   — Major sections, mt-12 mb-4
H3:     text-xl font-semibold tracking-tight text-zinc-50    — Subsections, mt-8 mb-3
H4:     text-lg font-semibold text-zinc-100                  — Minor headings, mt-6 mb-2
Body:   text-base leading-7 text-zinc-300 mb-6               — Paragraphs, 16px/28px
Strong: text-zinc-50 font-semibold                           — Emphasis within body
Muted:  text-zinc-400                                        — Captions, metadata
Link:   text-accent underline decoration-accent/40           — Visible, accessible links

Light theme (gray palette):

H1:     text-3xl md:text-4xl font-bold text-gray-900
H2:     text-2xl font-semibold tracking-tight text-gray-900
H3:     text-xl font-semibold tracking-tight text-gray-900
Body:   text-base leading-7 text-gray-600 mb-6
Strong: text-gray-900 font-semibold
Muted:  text-gray-500

Key rules:

  • Body line-height must be leading-7 (1.75) for comfortable reading
  • Paragraph spacing mb-6 creates clear separation without feeling sparse
  • Headings use tracking-tight for a polished, dense feel
  • H2 gets mt-12 — generous top margin signals a new major section

Step 3: Style lists and inline elements

Unordered: list-disc list-outside pl-6 space-y-2 text-zinc-300 my-6
Ordered:   list-decimal list-outside pl-6 space-y-2 text-zinc-300 my-6
List item: text-base leading-7
Inline code: bg-white/10 px-1.5 py-0.5 rounded-md text-[0.9em] font-mono text-zinc-200
Blockquote: border-l-4 border-zinc-700 pl-4 my-6 text-zinc-400 italic
Horizontal rule: border-white/10 my-12

For ordered lists interrupted by other elements (code blocks), preserve the start attribute to maintain correct numbering.

Step 4: Design code blocks

Two distinct code block types:

Language-tagged blocks (syntax-highlighted code):

Container: my-6 rounded-xl border border-white/10 bg-zinc-900 overflow-hidden
Header:    flex items-center gap-2 px-4 py-2.5 border-b border-white/5 bg-zinc-900/80
Lang label: text-xs font-mono text-zinc-500
Code area: px-5 py-4 overflow-x-auto
Pre:       text-sm leading-relaxed whitespace-pre-wrap break-words

Text/output blocks (untagged or text language):

Container: my-6 rounded-xl border border-white/10 bg-zinc-900 overflow-x-auto
Pre:       px-5 py-4 text-sm leading-relaxed whitespace-pre-wrap break-words font-mono

For output blocks, apply line-by-line visual hierarchy:

  • First non-empty line → text-zinc-50 font-semibold (title)
  • ALL CAPS lines → text-zinc-100 font-medium (section header)
  • Lines ending with : (under 60 chars) → section header style
  • Numbered items (1. ...) → text-zinc-200
  • Divider lines (---, ===) → text-zinc-700
  • Dollar amounts, percentages → text-emerald-400 highlight
  • Everything else → text-zinc-400 (body)
  • Blank lines → h-3 spacer

Step 5: Design tables

Wrapper:  overflow-x-auto my-6 rounded-xl border border-white/10
Table:    w-full text-sm border-collapse
Thead:    bg-zinc-900/50
Th:       text-left py-3 px-4 text-zinc-200 font-semibold text-xs uppercase tracking-wider
Tr:       border-b border-white/5
Td:       py-3 px-4 text-zinc-300

Step 6: Add page-level structure

A well-structured article page has these sections in order:

1. Breadcrumb — text-sm text-muted, links with hover:text-white
2. Title — H1, single line preferred, bold
3. Metadata bar — category badge, tags, author, date (flex-wrap gap-3)
4. Related resources — linked cards (if applicable)
5. Article body — markdown-rendered content
6. Footer — related articles, share buttons (optional)

Category badge style: text-xs bg-accent/20 text-accent px-2 py-1 rounded capitalize Tags: text-xs text-muted with # prefix

Step 7: Responsive behavior

Mobile (<640px):  px-6, text-3xl title, full-width code blocks
Tablet (640px+):  Same as mobile but wider line length
Desktop (768px+): text-4xl title, centered container

Code blocks should use overflow-x-auto on mobile and whitespace-pre-wrap break-words to avoid horizontal scroll when possible.

Examples

Example 1: React markdown component overrides for a dark-theme article

User request: "Create custom markdown components for my blog's article pages with a dark theme"

Implementation:

import React from 'react'

export const markdownComponents = {
  h1: () => null, // Title rendered separately above the article
  h2: ({ children }: any) => (
    <h2 className="text-2xl font-semibold tracking-tight text-zinc-50 mt-12 mb-4">{children}</h2>
  ),
  h3: ({ children }: any) => (
    <h3 className="text-xl font-semibold tracking-tight text-zinc-50 mt-8 mb-3">{children}</h3>
  ),
  p: ({ children }: any) => (
    <p className="text-base leading-7 text-zinc-300 mb-6">{children}</p>
  ),
  strong: ({ children }: any) => (
    <strong className="text-zinc-50 font-semibold">{children}</strong>
  ),
  a: ({ href, children }: any) => (
    <a href={href} className="text-emerald-400 underline decoration-emerald-400/40 underline-offset-2 hover:decoration-emerald-400 transition-colors" target="_blank" rel="noopener noreferrer">{children}</a>
  ),
  ul: ({ children }: any) => (
    <ul className="list-disc list-outside pl-6 space-y-2 text-zinc-300 my-6">{children}</ul>
  ),
  ol: ({ children, start }: any) => (
    <ol start={start} className="list-decimal list-outside pl-6 space-y-2 text-zinc-300 my-6">{children}</ol>
  ),
  li: ({ children }: any) => (
    <li className="text-base leading-7 [&>p]:mb-0">{children}</li>
  ),
  code: ({ className, children }: any) => {
    if (className?.includes('language-')) return <code className={className}>{children}</code>
    return <code className="bg-white/10 px-1.5 py-0.5 rounded-md text-[0.9em] font-mono text-zinc-200">{children}</code>
  },
  pre: ({ children }: any) => (
    <div className="my-6 rounded-xl border border-white/10 bg-zinc-900 overflow-x-auto">
      <pre className="px-5 py-4 text-sm leading-relaxed whitespace-pre-wrap break-words">{children}</pre>
    </div>
  ),
  table: ({ children }: any) => (
    <div className="overflow-x-auto my-6 rounded-xl border border-white/10">
      <table className="w-full text-sm border-collapse">{children}</table>
    </div>
  ),
  blockquote: ({ children }: any) => (
    <blockquote className="border-l-4 border-zinc-700 pl-4 my-6 text-zinc-400 italic [&>p]:mb-0">{children}</blockquote>
  ),
}

Example 2: Article page layout with breadcrumbs and metadata

User request: "Build a use-case article page with a breadcrumb, title, category badge, and markdown body"

Implementation:

export default function ArticlePage({ article }) {
  return (
    <main className="pt-24 pb-16">
      <div className="max-w-2xl mx-auto px-6">
        {/* Breadcrumb */}
        <div className="flex items-center gap-2 text-sm text-zinc-500 mb-8">
          <a href="/articles" className="hover:text-white transition-colors">Articles</a>
          <span>/</span>
          <span className="text-white">{article.title}</span>
        </div>

        {/* Title */}
        <h1 className="text-3xl md:text-4xl font-bold text-zinc-50 mb-4">
          {article.title}
        </h1>

        {/* Metadata */}
        <div className="flex flex-wrap items-center gap-3 mb-8">
          <span className="text-xs bg-emerald-500/20 text-emerald-400 px-2 py-1 rounded capitalize">
            {article.category}
          </span>
          {article.tags.map(tag => (
            <span key={tag} className="text-xs text-zinc-500">#{tag}</span>
          ))}
        </div>

        {/* Article body */}
        <article>
          <ReactMarkdown components={markdownComponents}>
            {article.body}
          </ReactMarkdown>
        </article>
      </div>
    </main>
  )
}

Guidelines

  • 65-70 characters per line is the optimal reading width. max-w-2xl achieves this at 16px body text. Never go wider for prose.
  • Vertical rhythm matters. Consistent mb-6 on paragraphs and my-6 on blocks creates a predictable reading pace. Headings break the rhythm intentionally with larger top margins.
  • Code blocks are visual anchors. They should stand out from prose with distinct borders and background. The rounded-xl border border-white/10 bg-zinc-900 pattern creates a clean, contained look.
  • Do not over-style output blocks. Simple monospace with subtle hierarchy (title bold, sections medium, body regular) is more readable than heavy formatting.
  • Tables need horizontal overflow. Always wrap in overflow-x-auto to handle narrow viewports.
  • Links must be visually distinct. Use both color and underline — color alone fails for colorblind users. The underline-offset-2 with partial-opacity decoration is clean.
  • Suppress the H1 in markdown rendering when the page title is already displayed above the article body. Duplicate titles look broken.
  • Test with real content. Placeholder text hides spacing issues that only appear with actual paragraphs, lists, and code blocks.
  • Dark theme contrast: body text at zinc-300 (#d4d4d8) on #09090b background gives ~11:1 contrast ratio. Headings at zinc-50 (#fafafa) give ~18:1. Both well above WCAG AA.