The HTML em tag: stress emphasis, not just italics

The em tag marks the word you would stress if you read the sentence aloud. It shows in italics by default, but so do i and cite, and each of the three means something different.

Use <em> for stress emphasis: the word you would say differently if you read the sentence aloud. Where the <em> goes changes what the sentence means. Browsers show it in italics, but italics are only the default look. The tag carries the meaning.

Try it. Both panels hold the same seven words. Click a word to move the <em> onto it.

Live exampletry it here, then copy the code
Share it as a link
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Move the em, change the meaning</title>
<style>
  body { margin: 0; padding: 14px; font-family: system-ui, sans-serif; background: #f4f5f7; color: #1d2330; }
  .hint { margin: 0 0 10px; font-size: 13px; color: #5b6270; }
  .row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
  .panel { background: #fff; border-radius: 12px; padding: 14px; box-shadow: 0 4px 14px rgba(0, 0, 0, .08); }
  .sentence { font: 20px/1.5 Georgia, serif; margin: 0 0 10px; }
  .sentence button {
    font: inherit; color: inherit; background: none; border: 0; padding: 0 1px;
    cursor: pointer; border-radius: 4px;
  }
  .sentence button:hover { background: #eef1f5; }
  .meaning { margin: 0 0 8px; font-size: 14px; }
  code { display: block; font: 12px/1.4 ui-monospace, Consolas, monospace; background: #eef1f5; border-radius: 6px; padding: 6px 8px; overflow-wrap: anywhere; }
  @media (max-width: 520px) { .row { grid-template-columns: 1fr; } }
</style>
</head>
<body>
<p class="hint">Click any word to put the &lt;em&gt; on it. Same words, different meaning.</p>
<div class="row">
  <div class="panel" data-stress="I"><p class="sentence"></p><p class="meaning"></p><code></code></div>
  <div class="panel" data-stress="money"><p class="sentence"></p><p class="meaning"></p><code></code></div>
</div>

<script>
  const words = ['I', 'never', 'said', 'she', 'stole', 'my', 'money'];
  // What a listener hears when that word is stressed
  const meaning = {
    I: 'Someone else said it.',
    never: 'I did not say it, not once.',
    said: 'I may have hinted it, but I did not say it.',
    she: 'Someone else stole it.',
    stole: 'She got it some other way.',
    my: 'She stole someone else\'s money.',
    money: 'She stole something else of mine.'
  };

  function render(panel) {
    const stress = panel.dataset.stress;
    const sentence = panel.querySelector('.sentence');
    sentence.innerHTML = '';
    words.forEach((w, i) => {
      const b = document.createElement('button');
      // The stressed word goes inside a real <em> element
      if (w === stress) b.innerHTML = '<em>' + w + '</em>';
      else b.textContent = w;
      b.addEventListener('click', () => { panel.dataset.stress = w; render(panel); });
      sentence.append(b, i < words.length - 1 ? ' ' : '.');
    });
    panel.querySelector('.meaning').textContent = meaning[stress];
    panel.querySelector('code').textContent =
      words.map(w => w === stress ? '<em>' + w + '</em>' : w).join(' ') + '.';
  }
  document.querySelectorAll('.panel').forEach(render);
</script>
</body>
</html>
Two copies of one sentence. The em sits on a different word in each, and the meaning changes with it.

"I never said she stole my money" is seven different claims, depending on the stressed word. Italics alone would not tell a screen reader or a search engine which one you meant. The <em> element does.

What em means, and what it does not

The HTML standard defines <em> as stress emphasis of its contents. It is for the spoken kind of stress, the one that changes the point of a sentence. It is not for making a paragraph look different or for marking a warning.

<p>Please do <em>not</em> feed the cat after midnight.</p>

For content that is important, serious or urgent, use <strong> instead. The strong tag covers that element and how it differs from <b>.

Keep <em> short. Wrapping a whole paragraph in it stresses every word, which means none of them stands out. If a block should look different, give it a class and style it.

Nesting <em> inside <em> is allowed and raises the level of stress. The browser default does not show the extra level: the inner one is simply italic again. Add a rule such as em em { font-weight: 600; } if the difference should be visible.

em vs i vs cite

Three elements are italic by default, and each means something else. Pick by meaning, then change the look with CSS if needed.

Ask what kind of italic it is. The answer picks the tag.
Ask what kind of italic it is. The answer picks the tag.
Tag Means Example
<em> Stress that changes the meaning Do not feed the cat.
<i> A different voice or mood A foreign phrase, a term, a ship's name, a thought
<cite> The title of a work A book, film, song, painting or paper
<span lang> Only the language, no voice change A foreign place name set upright

<i> is not an old presentational tag to avoid. The standard gives it a meaning: text set off from the normal prose. For a phrase in another language, add lang so screen readers and spell checkers treat it correctly.

<p>The menu called it <i lang="fr">pain perdu</i>, which is French toast.</p>
<p>I reread <cite>Moby-Dick</cite> last winter.</p>

<cite> is for the title of a work, not for the person who wrote it. To quote a longer passage from that work, the blockquote tag shows how to pair the quote with its source.

The next example lists all four. Tick Remove default styles and every line goes upright. Tick Outline the elements and you can see the tags are all still there.

Live exampletry it here, then copy the code
Share it as a link
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>em vs i vs cite vs span</title>
<style>
  body { margin: 0; padding: 14px; font-family: system-ui, sans-serif; background: #f4f5f7; color: #1d2330; }
  .controls { display: flex; flex-wrap: wrap; gap: 8px 18px; margin-bottom: 10px; font-size: 14px; }
  ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
  li { display: grid; grid-template-columns: 118px 1fr; gap: 10px; align-items: baseline;
       background: #fff; border-radius: 10px; padding: 7px 12px; }
  .tag { font: 600 12px/1.3 ui-monospace, Consolas, monospace; color: #0f5132; }
  .tag small { display: block; font: 12px system-ui, sans-serif; color: #5b6270; }
  li p { margin: 0; font: 16px/1.4 Georgia, serif; }

  /* "Remove default styles": the tags keep their meaning, only the look goes */
  .plain em, .plain i, .plain cite { font-style: normal; }

  /* "Outline the elements": shows the tags are still there */
  .outline em, .outline i, .outline cite, .outline span[lang] {
    outline: 2px dashed #2563eb; outline-offset: 1px; border-radius: 2px;
  }
  @media (max-width: 460px) {
    body { padding: 10px; }
    li { grid-template-columns: 1fr; gap: 0; padding: 6px 10px; }
    .tag small { display: inline; margin-left: 6px; }
  }
</style>
</head>
<body>
<div class="controls">
  <label><input type="checkbox" id="plain"> Remove default styles</label>
  <label><input type="checkbox" id="outline"> Outline the elements</label>
</div>
<ul id="list">
  <li><span class="tag">&lt;em&gt;<small>stress</small></span>
      <p>Please do <em>not</em> feed the cat after midnight.</p></li>
  <li><span class="tag">&lt;i lang&gt;<small>foreign phrase</small></span>
      <p>The menu called it <i lang="fr">pain perdu</i>, which is French toast.</p></li>
  <li><span class="tag">&lt;i&gt;<small>technical term</small></span>
      <p>The space between two letters is adjusted by <i>kerning</i>.</p></li>
  <li><span class="tag">&lt;i&gt;<small>ship name</small></span>
      <p>Ishmael signs on to the whaler <i>Pequod</i>.</p></li>
  <li><span class="tag">&lt;i&gt;<small>thought</small></span>
      <p><i>Did I lock the door?</i> she wondered on the bus.</p></li>
  <li><span class="tag">&lt;cite&gt;<small>title of a work</small></span>
      <p>I reread <cite>Moby-Dick</cite> last winter.</p></li>
  <li><span class="tag">&lt;span lang&gt;<small>language only</small></span>
      <p>The team met in <span lang="de">München</span> in March.</p></li>
</ul>

<script>
  const list = document.getElementById('list');
  document.getElementById('plain').addEventListener('change', (e) => {
    list.classList.toggle('plain', e.target.checked);
  });
  document.getElementById('outline').addEventListener('change', (e) => {
    list.classList.toggle('outline', e.target.checked);
  });
</script>
</body>
</html>
Removing the italics does not remove the meaning. The outlines show every element is still in place.

In Chromium, the accessibility tree reports <em> with the role emphasis. <i> and <cite> are exposed as plain text containers. The choice of tag is data that software can read. The italic look is only a default.

Italic, oblique and fake italics

CSS has three values for font-style: normal, italic and oblique. The difference shows when the font has its own italic face.

A true italic is a separate design. A synthesized slant tilts the upright letters.
A true italic is a separate design. A synthesized slant tilts the upright letters.
  • italic asks for the font's italic face, with letter shapes drawn for it.
  • oblique asks for a slanted face. You can give an angle, such as oblique 10deg.
  • If the font has neither face, the browser may synthesize a slant by tilting the upright letters.

A synthesized slant often looks wrong next to real italics: the letters keep their upright shapes and only lean. The fix is to load the italic file of the font as well, with its own @font-face rule and font-style: italic.

@font-face {
  font-family: "Body";
  src: url("body-italic.woff2") format("woff2");
  font-style: italic;
}

To stop the browser from faking it, set font-synthesis: none. Text with no italic face then stays upright, so you would style emphasis another way. Fonts not loading in HTML helps when the italic file itself does not arrive.

Styling emphasis without italics

Italics are hard to read in some fonts and at small sizes, and some scripts do not use them at all. You can change how <em> looks and keep its meaning.

/* A marker-style highlight */
.review em {
  font-style: normal;
  background: linear-gradient(transparent 50%, #ffd84d 50%);
}

/* Or a colour and weight */
.notes em { font-style: normal; font-weight: 600; color: #b42318; }

Scope the rule with a class, as above, so titles and foreign phrases elsewhere keep their italics. Colour alone is a weak signal for readers who cannot tell the colours apart, so pair it with weight or a background.

Icon fonts and the i tag

Many icon font libraries use an empty <i> as the icon holder, with a class that draws the glyph through CSS. It is a convention, not what <i> means in the standard.

Hide the icon from assistive technology and give the button its own name.
Hide the icon from assistive technology and give the button its own name.

If the icon is inside a button or link, hide the icon and name the control:

<button aria-label="Delete">
  <i class="icon-trash" aria-hidden="true"></i>
</button>

Visible text next to the icon works as well, and then aria-label is not needed. aria-label explains when a label is the right tool.

A finished example: a book review

A short review uses all three elements: <cite> for the book, <i> for the ship's name and a French phrase, and <em> for the two stressed words. The buttons swap the look of <em> only.

Live exampletry it here, then copy the code
Share it as a link
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Book review with em, i and cite</title>
<style>
  body { margin: 0; padding: 14px; font-family: system-ui, sans-serif; background: #f4f5f7; color: #1d2330; }
  .controls { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-bottom: 12px; font-size: 14px; }
  .controls button { font: inherit; padding: 5px 10px; border: 1px solid #c9cdd4; border-radius: 99px; background: #fff; cursor: pointer; }
  .controls button[aria-pressed="true"] { background: #1d2330; color: #fff; border-color: #1d2330; }
  .review { background: #fff; border-radius: 12px; padding: 16px 18px; box-shadow: 0 4px 14px rgba(0, 0, 0, .08); max-width: 560px; }
  .review h2 { margin: 0 0 2px; font: 700 20px/1.3 Georgia, serif; }
  .review .by { margin: 0 0 10px; font-size: 13px; color: #5b6270; }
  .review p { font: 16px/1.6 Georgia, serif; margin: 0 0 10px; }

  /* Titles and foreign words stay italic (the browser default) */

  /* Emphasis styles, chosen by the buttons */
  .review.highlight em {
    font-style: normal;
    background: linear-gradient(transparent 50%, #ffd84d 50%);
  }
  .review.colour em { font-style: normal; font-weight: 600; color: #b42318; }
</style>
</head>
<body>
<div class="controls" id="controls">
  Stress style:
  <button type="button" data-style="" aria-pressed="true">Italic (default)</button>
  <button type="button" data-style="highlight" aria-pressed="false">Highlight</button>
  <button type="button" data-style="colour" aria-pressed="false">Colour</button>
</div>

<article class="review" id="review">
  <h2><cite>Moby-Dick</cite>, again</h2>
  <p class="by">Herman Melville, 1851</p>
  <p>
    The opening line is famous. Less famous: the <i>Pequod</i>
    does not sail until chapter 22. This is a book about a whale,
    but it is <em>also</em> a book about everything a whale touches.
  </p>
  <p>
    The chapters on rope, oil and anatomy read like a
    <i lang="fr">catalogue raisonné</i> of the whaling trade. Do <em>not</em> skip
    them. They are what makes the last hundred pages land.
  </p>
</article>

<script>
  const review = document.getElementById('review');
  const buttons = document.querySelectorAll('#controls button');
  buttons.forEach((btn) => {
    btn.addEventListener('click', () => {
      // Only the look of <em> changes; the markup stays the same
      review.className = 'review ' + btn.dataset.style;
      buttons.forEach((b) => b.setAttribute('aria-pressed', b === btn));
    });
  });
</script>
</body>
</html>
Titles and foreign words stay italic. Only the stress style changes, and the markup stays the same.
  • Titles: <cite>Moby-Dick</cite>, even inside a heading.
  • Different voice: <i>Pequod</i> for the ship, <i lang="fr"> for the French phrase.
  • Stress: <em>also</em> and <em>not</em>, restyled with one class on the article.

When it does not work

What you see Cause Fix
em text is not italic A reset or theme sets font: inherit or font-style: normal on it Add em { font-style: italic; } after the reset
The italic looks like tilted upright letters The font has no italic face, so the browser synthesized one Load the italic file with font-style: italic in @font-face
Italics disappeared after adding a web font Only the regular file of the font is loaded, and synthesis is off Load the italic file, or remove font-synthesis: none
A screen reader reads a stray character on a button An icon font <i> is exposed aria-hidden="true" on the icon, a name on the button
A whole paragraph is italic and nothing stands out <em> wraps the paragraph Use a class for the block, <em> for the stressed words
Nested em looks the same as the outer em The default style is italic at every level Add em em { font-weight: 600; } or similar

A change in stress is easier to show than to describe. A screenshot shows one version of the sentence, and the person you send it to cannot move the <em> or switch the styles.

To send the working version, paste the page into a NOS document and choose Create share link. HTML to link walks through it.

The page renders as written and its scripts run, so people can click the words and toggles themselves. If you change the code later, the same link shows the new version.

Questions people ask

What does the em tag do in HTML?

It marks stress emphasis: the word or phrase you would stress when speaking. Moving the em to a different word changes what the sentence means. Browsers show em in italics by default, and you can change that look with CSS.

What is the difference between em and i?

em means stress. i means text in a different voice or mood, such as a foreign phrase, a technical term, a ship's name or a character's thought. Both are italic by default, so the difference is in the meaning, not the look.

Should I use em or cite for a book title?

cite. The cite element represents the title of a work, such as a book, film, song or paper. It is italic by default too. Do not use cite for the name of a person.

What happens if I nest em inside em?

The HTML standard says nesting em raises the level of emphasis. The browser default style does not show it: the inner em stays italic, the same as the outer one. If you want deeper stress to look different, add a rule such as em em { font-weight: 600; }.

Is it wrong to use the i tag for icons?

It is a common convention in icon font libraries, but it gives the i element a job the standard does not describe. If you use it, add aria-hidden="true" to the icon and give the button or link a name with visible text or aria-label.

Keep reading