SymbolFYI

Minus vs Hyphen vs Dash: Five Characters That Look Like a Line

Take a close look at these five characters:

-  ‐  –  —  −

From left to right: the hyphen-minus, the true hyphen, the en dash, the em dash, and the minus sign. In most fonts, they look like progressively longer horizontal lines. In most coding contexts, the first one does the work of all five. But when typographic precision matters — and in web development, it often does — knowing which character to use and when makes the difference between professional output and sloppy markup.

This is the most complex comparison in the Symbol Showdown series, because the five characters exist at the intersection of typographic tradition, mathematical notation, and the compromises that ASCII forced on digital text.

All Five Characters at a Glance

Character Name Unicode HTML Entity Approx. Width Primary Use
- Hyphen-Minus U+002D - Shortest Everything (ASCII catch-all)
Hyphen U+2010 ‐ Same as U+002D Word-breaking hyphen
En Dash U+2013 – Medium Ranges, compounds
Em Dash U+2014 — Longest Parenthetical, break
Minus Sign U+2212 − Between hyphen and en Mathematics

There are also several additional horizontal-line characters worth knowing:

Character Name Unicode Use
Horizontal Bar U+2015 Block quotes, dialogue attribution
Figure Dash U+2012 Telephone numbers (same width as a digit)
Small Hyphen-Minus U+FE63 Compatibility character (avoid)
Fullwidth Hyphen-Minus U+FF0D CJK compatibility (avoid in English)
Superscript Minus U+207B Exponents: 10⁻³

The Hyphen-Minus: The Character That Does Everything (Badly)

The hyphen-minus (-, U+002D) is the workhorse of ASCII-era computing. Before Unicode, there was one key for "a horizontal line character" on keyboards and typewriters, and it was pressed whenever any of the following was needed:

  • A hyphen in a compound word
  • A minus sign in arithmetic
  • A dash in punctuation
  • A negative number indicator
  • A command-line option flag (--help, -v)
  • A separator in identifiers (my-component, kebab-case)
  • A bullet point in plain text

The hyphen-minus is technically correct only in the compound-word sense (and even then, U+2010 is typographically preferable). In every other context, a more specific character exists and should be used in polished text.

That said, the hyphen-minus remains the right choice in all code contexts: programming languages, URLs, filenames, CSS class names, and command-line arguments. In these contexts, the semantics come from position and syntax, not from the specific Unicode code point.

The True Hyphen (U+2010)

The true hyphen (, U+2010) looks identical to the hyphen-minus in most fonts. Its dedicated purpose is word-breaking and hyphenated compound words:

<!-- Ambiguous: hyphen-minus used as hyphen -->
<p>He had a well-known reputation.</p>

<!-- Typographically correct: true hyphen -->
<p>He had a well&#8208;known reputation.</p>

In practice, virtually no one uses U+2010 explicitly — CSS hyphens: auto and the soft hyphen (&shy;, U+00AD) handle automatic hyphenation. The true hyphen exists primarily for completeness in typographic systems and Unicode compliance.

The key distinction from hyphen-minus: the true hyphen U+2010 should never line-break, whereas the hyphen-minus may allow breaks in some rendering engines. For precise control over line-breaking, use CSS and soft hyphens rather than different hyphen characters.

The En Dash (U+2013)

The en dash is covered in depth in the first article of this series, but here's a focused summary of its visual and functional position among horizontal-line characters:

Width: Approximately the width of the capital letter N — about twice the width of a hyphen, half the width of an em dash.

Visual appearance: In most fonts, the en dash sits higher on the baseline than the hyphen-minus, vertically centered in the line height.

Primary uses: - Numeric and date ranges: 1939–1945, Pages 10–25 - Scores: 3–1 - Compound adjectives involving multi-word elements: New York–based

<!-- Range -->
<p>The conference runs June 14&ndash;16.</p>

<!-- Score -->
<p>Final score: Arsenal 2&ndash;1 Chelsea</p>

<!-- Compound with multi-word part -->
<p>A post&ndash;World War II economic boom</p>

The Em Dash (U+2014)

The em dash is the long, dramatic dash. It draws attention, creates emphasis, and replaces parentheses or colons in certain constructions:

<!-- Parenthetical aside -->
<p>The project&mdash;already three months late&mdash;finally launched.</p>

<!-- Summary after list -->
<p>JavaScript, Python, Rust&mdash;all are valid choices.</p>

<!-- Attribution -->
<blockquote>
  <p>To be or not to be.</p>
  <footer>&mdash;Shakespeare</footer>
</blockquote>

Spacing: American style uses no spaces (word—word); British and some international styles use spaces (word — word). CSS cannot automatically manage this — it must be encoded in the markup or text.

The Minus Sign (U+2212)

The minus sign (, U+2212) is the mathematically correct character for subtraction. Its purpose is exclusively mathematical:

Expression Use Correct Character
-5 Negative number U+2212 (−) or U+002D (-)
a - b Subtraction U+2212 (−)
Ctrl-C Key combination U+002D (-)
-v flag CLI option U+002D (-)

The minus sign is specifically designed to be visually aligned with the plus sign (+) — same height, same stroke width — so that mathematical expressions look balanced and consistent:

5 + 3 = 8    (plus at x-height)
5  3 = 2    (minus sign at x-height  matches plus visually)
5 - 3 = 2    (hyphen-minus  slightly lower, slightly thinner)

The visual difference is small in body text but meaningful in displayed mathematics.

<!-- Mathematical expression with proper minus sign -->
<p>The discriminant: b&sup2; &minus; 4ac</p>

<!-- Temperature with minus sign -->
<p>Temperature: &minus;15°C</p>

<!-- In MathML (prefer this for formal math) -->
<math>
  <mrow>
    <mi>x</mi>
    <mo>&minus;</mo>
    <mn>5</mn>
    <mo>=</mo>
    <mn>0</mn>
  </mrow>
</math>

The Figure Dash (U+2012)

The figure dash () has a very specific typographic purpose: it is exactly the same width as a digit (a "figure" in typographic terminology). This makes it ideal for phone numbers and other numeric sequences where you want dashes to align with the digits:

<!-- Phone number with figure dash (digits remain aligned) -->
<p>Phone: 212&#8210;555&#8210;0100</p>

In practice, the figure dash is rarely used explicitly. Most designers rely on font features or consistent numeric character widths rather than selecting this specific character.

The Horizontal Bar (U+2015)

The horizontal bar (, U+2015) is longer than an em dash and is used in specific typographic contexts:

  • Block quotation attribution (particularly in Greek and some European typography)
  • Dialogue in certain literary traditions (Irish and South American authors, including James Joyce and Gabriel García Márquez, used it instead of quotation marks for dialogue)
 I don't know what you mean, she said.
― Yes you do, he replied.

This character is uncommon in standard English typography. In English, em dash handles both dialogue interruption and attribution.

How to Type Each Character

Mac

Character Shortcut
Hyphen-minus (-) - key
En dash (–) ⌥- (Option + Hyphen)
Em dash (—) ⌥⇧- (Option + Shift + Hyphen)
Minus sign (−) No default; use Character Viewer
True hyphen (‐) No default; use HTML entity

Windows

Character Alt Code
Hyphen-minus (-) - key
En dash (–) Alt + 0150
Em dash (—) Alt + 0151
Minus sign (−) Alt + 8722

Linux

All characters via: Ctrl + Shift + U → code point (in hex) → Enter

Character Hex Code
Hyphen-minus 002D
True hyphen 2010
En dash 2013
Em dash 2014
Minus sign 2212
Figure dash 2012
Horizontal bar 2015

HTML Entities

-          <!-- Hyphen-minus (literal) -->
&#8208;    <!-- True Hyphen (U+2010) -->
&ndash;    <!-- En Dash (U+2013) -->
&mdash;    <!-- Em Dash (U+2014) -->
&minus;    <!-- Minus Sign (U+2212) -->
&#8210;    <!-- Figure Dash (U+2012) -->
&#8213;    <!-- Horizontal Bar (U+2015) -->

CSS Handling

When you need to control which dash character appears in generated content or need to handle line-breaking around dashes:

/* Prevent line breaks within date/number ranges */
.range {
  white-space: nowrap;
}

/* Em dash parenthetical — prevent break immediately after opening dash */
.em-dash-open::after {
  content: "\2014";
  /* Prevent line break after opening em dash: use word-joiner */
}

/* Generate minus sign in CSS (for negative value indicators) */
.negative::before {
  content: "\2212";  /* minus sign, not hyphen-minus */
  color: var(--color-negative);
}

Programmatic Detection

Use our Character Analyzer to identify which horizontal-line character is present in any text. In code:

import unicodedata

HORIZONTAL_LINE_CHARS = {
    '\u002D': 'Hyphen-Minus',
    '\u2010': 'Hyphen',
    '\u2011': 'Non-Breaking Hyphen',
    '\u2012': 'Figure Dash',
    '\u2013': 'En Dash',
    '\u2014': 'Em Dash',
    '\u2015': 'Horizontal Bar',
    '\u2212': 'Minus Sign',
    '\uFE58': 'Small Em Dash',
    '\uFE63': 'Small Hyphen-Minus',
    '\uFF0D': 'Fullwidth Hyphen-Minus',
}

def identify_dash(char: str) -> str:
    return HORIZONTAL_LINE_CHARS.get(char, unicodedata.name(char, 'Unknown'))

# Example
for ch in '- ‐ – — −':
    if ch.strip():
        print(f"'{ch}' → {identify_dash(ch)}")

The Decision Tree

Is it in code (programming, CLI, filenames, CSS class names)?
   Use hyphen-minus (-)

Is it a mathematical operation (subtraction, negative number)?
   Use minus sign (−, U+2212)

Is it a range or score (numbers, dates)?
   Use en dash (–, U+2013)

Is it parenthetical, a break, or attribution?
   Use em dash (—, U+2014)

Is it a phone/reference number that should align with digits?
   Use figure dash (‒, U+2012)

Is it a word-breaking hyphen in compound words?
   Use hyphen-minus (-) or true hyphen (‐, U+2010)

Next in Series: Zero vs letter O vs Cyrillic О — characters that look identical but come from entirely different scripts, with real security implications. See Zero vs Letter O: Unicode Confusables.

Simbol Terkait

Glosarium Terkait

Alat Terkait

Panduan Lainnya