The Complete Markdown Showcase: Every Element, Every Variant
A comprehensive reference post exercising every Markdown element supported by isHistory — CommonMark, GFM, Obsidian Flavored Markdown, KaTeX math, callouts, code blocks, tables, blockquotes, and every extended HTML element. Use this as a living style guide.
This post is a living style guide for the isHistory markdown pipeline. Every element that the pipeline can render is exercised below, with multiple variants where applicable. If you’re authoring a new post and want to see how a particular syntax will look, find it here.
External links automatically get target="_blank" and rel="noopener noreferrer" via rehype-external-links. Example: GitHub.
Emphasis and Semantic Inline Elements
HTML abbreviations get a dotted underline and a tooltip on hover. Ctrl + K opens search. Esc closes modals.
Use mark to highlight text. Use cite for citation titles. Use inline quotes for short quotations (auto-wrapped in curly quotes). Use sample output for computer output.
Task list items get custom checkboxes — checked items have a strikethrough on their text.
Definition List
Astro
A modern static site generator that ships zero JavaScript by default.
Tailwind CSS
A utility-first CSS framework for rapid UI development.
KaTeX
A fast, easy-to-use JavaScript library for TeX math rendering on the web.
Blockquotes — Every Variant
Simple Blockquote
This is a simple blockquote. It has one paragraph and no nesting.
Multi-Paragraph Blockquote
First paragraph of the blockquote.
Second paragraph, separated by a blank line inside the blockquote.
Nested Blockquote
Outer blockquote, level 1.
Inner blockquote, level 2.
Still inside the inner blockquote.
Blockquote with Attribution
The best way to predict the future is to invent it.
— Alan Kay
Blockquote with Rich Content
Bold, italic, strikethrough, inline code, and a link — all work inside blockquotes.
Even a nested list:
Item one
Item two
And a code block:
JavaScript
const x = 42;
Pull Quote (auto-styled)
Design is not just what it looks like and feels like. Design is how it works.
— Steve Jobs
All blockquotes get the editorial pull-quote treatment: large italic text, decorative opening quotation mark, gradient background, indigo left border, and subtle shadow.
Tables with 4+ rows get automatic zebra striping on alternating rows. Hover highlights the row with a subtle indigo tint.
#
Era
Year
Notable Event
1
Pre-history
1843
Ada Lovelace’s first algorithm
2
Pre-history
1936
Turing machine paper
3
Birth of AI
1956
Dartmouth Conference
4
First winter
1974
Lighthill Report
5
Expert systems
1980
Rise of MYCIN, XCON
6
Second winter
1987
LISP machine market collapse
7
Deep learning
2012
AlexNet wins ImageNet
8
Transformer
2017
”Attention Is All You Need”
9
Generative AI
2022
ChatGPT launches
Wide Table (Horizontal Scroll)
Wide tables overflow horizontally on small screens. On desktop, they fit within the prose column.
Column A
Column B
Column C
Column D
Column E
Column F
Column G
Column H
Column I
Column J
1
2
3
4
5
6
7
8
9
10
alpha
beta
gamma
delta
epsilon
zeta
eta
theta
iota
kappa
Callouts — Every Type
The rehype-callouts plugin (GitHub theme) supports five callout types. Each renders as a colored block with an SVG indicator and a title.
Callouts with Custom Titles
Callouts with Rich Content
Collapsible Callouts
Collapsed by default (click to expand)
The- after [!note] makes the callout collapsed by default. Users click the title to expand it. Useful for long asides that aren’t essential to the main flow.
Expanded by default (click to collapse)
The+ after [!note] makes the callout expanded by default but collapsible. Useful for content that should be visible initially but can be hidden.
Code Blocks — Every Variant
Plain Code Block (no language)
This is a plain code block with no language specified.No syntax highlighting is applied.
JavaScript
// A JavaScript code block with syntax highlightingconst greet = (name) => { console.log(`Hello, ${name}!`); return `Greetings, ${name}`;};greet('world');
TypeScript
// TypeScript with type annotationsinterface User { id: number; name: string; email?: string;}function getUser(id: number): Promise<User> { return fetch(`/api/users/${id}`).then((res) => res.json());}
Python
# Python with type hintsfrom typing import List, Optionaldef fibonacci(n: int) -> List[int]: """Generate the first n Fibonacci numbers.""" if n <= 0: return [] if n == 1: return [0] fibs = [0, 1] for _ in range(2, n): fibs.append(fibs[-1] + fibs[-2]) return fibsprint(fibonacci(10))
export function factorial(n: number): number { if (n < 0) throw new Error('Negative input'); let result = 1; for (let i = 2; i <= n; i++) { result *= i; } return result;}export function binomial(n: number, k: number): number { return factorial(n) / (factorial(k) * factorial(n - k));}
Inline Code
Inline code uses single backticks: const x = 42. Code inside a sentence: Array.prototype.map(). With special characters: <div className="foo" />. With backticks inside: `single backtick`.
Math — KaTeX
The pipeline supports inline math with $...$ and display math with $$...$$. Math is rendered by KaTeX.
Inline Math
The Pythagorean theorem: a2+b2=c2. The area of a circle: A=πr2. Euler’s identity: eiπ+1=0. A quadratic equation: x=2a−b±b2−4ac.
Inline math inherits the surrounding text color and respects line-height.
A horizontal rule creates an editorial section break — a gradient line with a centered indigo dot. Three variants of syntax all produce the same result:
Above is a horizontal rule using three hyphens.
Above is a horizontal rule using three asterisks.
Above is a horizontal rule using three underscores.
Images
Astro logo (placeholder):
Images get a rounded border and subtle box-shadow. Long alt text appears in the figcaption styling if wrapped in a figure (using HTML).
Figures with figcaptions get centered, smaller, muted text below the image. Use this for editorial figures that need attribution or explanation.
Details and Summary (Disclosure Widget)
Click to expand — basic details element
The `` element creates a collapsible disclosure widget. The `` is the clickable header. Content below the summary is hidden until expanded.
Markdown works inside:
Lists
Bold and italic
Inline code
Multiple paragraphs inside details
First paragraph. Note the blank line above — it ensures proper paragraph spacing.
Second paragraph. Without the blank line, paragraphs would be squished together.
Even code blocks work:
console.log('inside a details element');
Expanded by default
Add the `open` attribute to `` to start expanded. Users can collapse it by clicking the summary.
“Code is like humor. When you have to explain it, it’s bad.” — Cory House
JavaScript
// Even bad code can be improvedfunction bad() { return [1, 2, 3].map((x) => x * 2).filter((x) => x > 2).reduce((a, b) => a + b, 0);}
Edge Cases
Empty Elements
A horizontal rule with no content around it:
A paragraph immediately after a horizontal rule.
Special Characters
The pipe character | in tables needs escaping: | escaped pipe | in a table cell.
Less-than < and greater-than > should be escaped in code: <div> becomes <div> in raw HTML, but inside backticks <div> is fine.
Ampersands: AT&T, Tom & Jerry, P&G. In code: if (a && b). In URLs: ?a=1&b=2.
Emojis
Standard emojis work in markdown: 🚀 rocket, ✅ check, ❌ cross, ⚠️ warning, 💡 idea, 📌 pin, 🎯 target, 📝 memo. They render with the system emoji font.
Very Long Line
This is a single paragraph that contains a very long line of text without any line breaks in the source markdown. Markdown will wrap this to fit the available width automatically based on the prose container’s max-width. The 65ch optimal line length means the text wraps at approximately 65 characters per line, which is the recommended maximum for reading comfort per Baymard Institute research. Longer lines cause readers to lose their place when jumping from the end of one line to the start of the next; shorter lines force the eye to return too often, breaking rhythm. The 65ch value strikes the right balance for most body text.
Unicode and Internationalization
Latin: café, naïve, résumé, façade. Greek: α β γ δ ε ζ η θ ι κ λ μ. Cyrillic: А Б В Г Д Е Ж. Chinese: 你好世界. Japanese: こんにちは世界. Korean: 안녕하세요 세계. Arabic: مرحبا بالعالم. Hebrew: שלום עולם. Hindi: नमस्ते दुनिया. Thai: สวัสดีชาวโลก.
Right-to-left text: مرحبا بالعالم — wraps in a span with dir="rtl".
Summary
This post exercised:
6 heading levels (h1 implicit, h2–h6 in body)
Paragraphs with inline formatting (bold, italic, strikethrough, code, mark, kbd, abbr, sub, sup, del, ins, cite, q, samp, small, big, tt, u)