W3docs

HTML <s> Tag

The HTML <s> tag marks text that is no longer accurate or relevant (e.g. an old price). See how it differs from <del> and <strike>, with examples.

The HTML <s> tag marks text that is no longer accurate or relevant — but was not literally deleted from the document. It is an inline element, and browsers render its content with a strikethrough (a horizontal line through the text) by default.

A classic use is showing a discounted price: the old price stays visible but struck through, next to the current sale price. This tells the reader "this used to be true; here is what's true now."

Note

<s> is a valid HTML5 element — it is not deprecated. The deprecated tag is <strike>, which you should never use in new pages. Reach for <s> (semantics) or CSS text-decoration: line-through (pure styling) instead.

Syntax

The <s> tag comes in pairs. The content goes between the opening (<s>) and closing (</s>) tags.

Example — the price-strikethrough use case

This is the most common, idiomatic use of <s>: the original price is no longer relevant, so it is struck through, while the sale price is shown as current.

HTML <s> Tag

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <p>
      Hurry, sale ends soon!
      <s>Was $50.00</s>
      <strong>Now $29.99</strong>
    </p>
  </body>
</html>

Result

s tag example

<s> vs <del> vs <strike>

These three tags all produce a line through text, but they mean very different things. Choosing the right one is what makes your HTML semantic rather than just visually decorated.

TagMeaningUse it when…Status
<s>Content is no longer accurate or relevantAn old price, an outdated detail, a recommendation that has changed — the original text was never "removed", it is just superseded.Valid HTML5
<del>Content was deleted / removed as an editorial changeTracking edits to a document. Pairs naturally with <ins> for inserted text. Supports cite and datetime to record why and when.Valid HTML5
<strike>Strikethrough (presentation only)Never — use <s> or <del> instead.Deprecated

In short: use <s> when the meaning is "this is no longer the case," and use <del> when the meaning is "this was edited out." If you only need the visual line and there is no special meaning, use CSS text-decoration: line-through on a plain element.

Accessibility

By default, screen readers do not announce the strikethrough — assistive technology reads <s> content the same as any other text. So a sighted user sees "Was $50.00" crossed out, but a screen-reader user may just hear "Was $50.00" with no hint that it is outdated.

For cases where the struck-through state carries important meaning, add visually-hidden text that spells it out:

<p>
  <s><span class="visually-hidden">Old price: </span>Was $50.00</s>
  <strong>Now $29.99</strong>
</p>
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  border: 0;
}

Attributes

The <s> tag supports the Global attributes and the Event Attributes. It has no attributes of its own.

Styling

Browsers already apply text-decoration: line-through to <s>, so you do not need CSS just to get the line. Styling is an optional override — for example, to colour the struck-through text without re-declaring the line:

s {
  color: gray;
}

Practice

Practice
What does the <s> tag represent in HTML?
What does the <s> tag represent in HTML?
Was this page helpful?