SymbolFYI

Ellipsis (…) vs Three Dots (...): One Character or Three?

Press the period key three times: .... Now look up the Unicode ellipsis character: . On most screens, at most font sizes, these look identical. But they are fundamentally different — one is three characters occupying three code points, the other is a single character with its own Unicode identity, its own typographic spacing, and its own behavior in text processing systems.

Choosing between them matters more than you might expect, particularly in CSS, search indexing, copy-paste behavior, and screen reader accessibility.

The Characters Compared

Character Name Unicode Bytes (UTF-8) HTML Entity
Horizontal Ellipsis U+2026 3 bytes (E2 80 A6) … or …
... Three Period Characters U+002E × 3 3 bytes (2E 2E 2E) . . .
Midline Horizontal Ellipsis U+22EF 3 bytes ⋯
Presentation Form Vertical Ellipsis U+FE19 3 bytes

Both and ... happen to occupy 3 bytes in UTF-8 encoding, which makes the distinction easy to overlook in byte-level analysis. The difference shows up at the code-point level: one is a single code point (U+2026), the other is three (U+002E + U+002E + U+002E).

Visual and Typographic Differences

Spacing

The Unicode ellipsis character (U+2026) is designed by type foundries as a single glyph with specific inter-dot spacing baked into the character's metrics. This spacing is generally tighter than three consecutive period characters with full inter-character spacing.

In most professional typefaces:

  • — dots are close together, spacing is optical and consistent across all sizes
  • ... — spacing between dots depends on letter-spacing and font metrics, and may vary with text size, tracking adjustments, or custom CSS

For body text in a well-designed typeface, the visual difference is minimal. At display sizes (headings, pull quotes), it can be noticeable.

Line-Breaking Behavior

This is where the practical difference becomes significant:

  • Three periods ... can theoretically line-break between any two dots
  • The single ellipsis character is treated as one unit — it will not break across lines

In body text, this rarely matters. In constrained UI contexts (table cells, navigation labels, button text), the line-breaking behavior of three periods can produce ugly single-dot orphans.

CSS text-overflow: ellipsis

This is the most important practical distinction for web developers. The CSS property text-overflow: ellipsis inserts the Unicode ellipsis character (U+2026) programmatically when text overflows its container — it does not insert three periods.

.truncate {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

What the browser renders when text overflows: Long text that doesn't fit…

The CSS specification explicitly uses U+2026 for this truncation. This means if you've manually inserted ... in content expecting it to match the browser's text-overflow truncation visually, there may be a subtle spacing inconsistency depending on the font.

Copy-Paste Behavior

When a user selects and copies text containing (U+2026), they get a single character. When they copy ..., they get three characters. This affects:

  • Search: Pasting into a search box containing ... may or may not match content stored as
  • Text analysis: Character counts and string matching are affected
  • Serialization: JSON, XML, and database storage may treat them differently

Use our Character Analyzer to paste any text and instantly see whether you're dealing with one character or three.

When to Use the Unicode Ellipsis (…)

Body Text and Typography

For polished prose — articles, books, marketing copy, editorial content — the Unicode ellipsis character is the typographically correct choice. Publishers, style guides, and typesetting systems universally prefer it.

<p>She paused for a long moment&#8230; then finally spoke.</p>

Or using the actual character in UTF-8 HTML:

<p>She paused for a long moment… then finally spoke.</p>

UI Strings and Truncated Labels

In UI contexts where you're manually truncating a label and want to signal continuation, use the single character:

<span class="label">Loading&#8230;</span>
<button>Save as&#8230;</button>  <!-- Dialog will follow -->

The "Save as…" convention in Mac and Windows menus uses the single ellipsis character to signal "this action opens a dialog."

JavaScript Strings and Template Literals

When embedding ellipsis in JavaScript strings, use the Unicode escape to be explicit:

const loading = 'Loading\u2026';
const moreItems = `${count} more item${count !== 1 ? 's' : ''}\u2026`;

Database Storage and Search Normalization

If you're building a search system and need to normalize input, collapsing ... to (or vice versa) at ingestion time prevents query mismatches:

import unicodedata

def normalize_ellipsis(text: str) -> str:
    """Normalize three dots to Unicode ellipsis."""
    return text.replace('...', '\u2026')

def expand_ellipsis(text: str) -> str:
    """Expand Unicode ellipsis to three dots (for plain-text export)."""
    return text.replace('\u2026', '...')

When to Use Three Periods (...)

All Code and Regular Expressions

In programming contexts, ... and are entirely different. Three periods have specific meanings:

// Rest parameters
function sum(...numbers) {
  return numbers.reduce((a, b) => a + b, 0);
}

// Spread operator
const merged = { ...objA, ...objB };

// Array spread
const combined = [...arr1, ...arr2];

In regular expressions, . matches any character and ... matches any three characters. The Unicode ellipsis would match literally only if the string contains that specific code point.

import re

# Matches any 3 characters
pattern = re.compile(r'...')

# Matches the literal ellipsis character
ellipsis_pattern = re.compile(r'\u2026')

Markdown Source Files

In raw Markdown, the visual convention ... is widely understood and most Markdown processors render it acceptably. However, many static site generators (Hugo, Jekyll, Pandoc) will automatically convert ... to during processing. Check your toolchain's behavior.

Plain-Text Files and Terminal Output

In terminal output, README files, plain-text configuration files, and ASCII-art contexts, three periods are preferred — they're simpler and guaranteed to render correctly in any character encoding, including ASCII-only environments.

echo "Processing..."
# Not: echo "Processing…"  (may break in some terminals)

CSV and Data Files

In structured data files where field values might be processed by tools of unknown encoding support, three periods are safer. The ellipsis character, while valid UTF-8, can cause issues in legacy toolchains that expect ASCII-only text.

The Typing Methods

Mac

Character Shortcut
Ellipsis (…) Option + Semicolon (⌥;)

Windows

Method Shortcut
Alt code Alt + 0133 (numpad)
Character Map Search "Horizontal Ellipsis"
Word AutoCorrect Type ... — Word auto-converts (prose contexts)

Linux

Ctrl + Shift + U → 2026 → Enter

Or with a Compose key: Compose . . .

HTML

&hellip;        <!-- Named entity -->
&#8230;         <!-- Decimal -->
&#x2026;        <!-- Hexadecimal --><!-- Literal character (UTF-8 HTML) -->

Accessibility Considerations

Screen readers handle the two forms differently — and inconsistently across platforms:

  • Unicode ellipsis (…): NVDA on Windows reads it as "dot dot dot." VoiceOver on Mac reads it as "ellipsis." JAWS may skip it entirely.
  • Three periods (...): Most screen readers read each period individually, producing "dot dot dot" with distinct pauses.

For screen reader consistency, consider using ARIA or visually hidden text to provide context when ellipsis signals meaningful content (such as "loading" or "more content follows"):

<span aria-label="Loading"></span>
<button>More<span class="visually-hidden"> items</span></button>

Vertical Ellipsis and the Overflow Menu

The three-dot vertical menu icon common in Android and many web UIs is typically implemented in one of three ways:

<!-- Three bullet characters (semantic HTML, often cleaner) -->
<button aria-label="More options">&#8942;</button>  <!-- ⋮ U+22EE -->

<!-- SVG icon (most accessible, most control) -->
<button aria-label="More options">
  <svg><!-- three-dot SVG path --></svg>
</button>

<!-- Text hack (avoid in production) -->
<button aria-label="More options">···</button>  <!-- U+00B7 middle dots -->

The vertical ellipsis character U+22EE (⋮) is a dedicated Unicode character for this purpose, distinct from the horizontal ellipsis U+2026.

Quick Decision Chart

Context Use Reason
Body text / prose … (U+2026) Typographic correctness
Code / programming ... Syntactic meaning
CSS content property \2026 Single unit, reliable spacing
JavaScript / Python strings \u2026 Explicit, unambiguous
Terminal output / plain text ... ASCII compatibility
UI labels ("Save as…") … (U+2026) OS/UI convention
Markdown source Either Check your processor
Regex patterns ... Has literal meaning
HTML entities &hellip; Readable, correct

Next in Series: The multiplication sign vs the letter X — visually near-identical, but one belongs in math and the other in text. See Multiplication Sign vs Letter X.

Symboles associés

Glossaire associé

Outils associés

Plus de guides