What Deprecation Actually Means for Web Developers
In everyday language, to deprecate something is to express disapproval of it. In a technical context, deprecation is the formal discouragement of an older feature's use. The old feature typically remains functional for backward compatibility, so legacy projects don't break. You can still technically do things the legacy way — it will likely work — but the message is clear that you should adopt the newer approach.
Deprecation often serves as a precursor to eventual removal, sometimes called "sunsetting" a feature. This gives developers time to transition before the old system disappears entirely. WordPress recently went through this with its Gutenberg editor, shipping the new system while keeping the "classic" editor available as an option. Eventually, that classic editor will likely be removed entirely, leaving Gutenberg as the only path forward.
Why HTML Elements Fall Out of Favor
The web's evolution has fundamentally changed how we think about markup. Originally, HTML was an all-purpose language for displaying and styling content online. As external stylesheets gained traction, it became more sensible to separate concerns: HTML defines the content of a page, while CSS handles the presentation.
This separation brings several concrete benefits:
- Avoiding duplication: Repeating code for every instance of red-colored text is unwieldy when a single CSS class handles it all.
- Ease of management: Presentation controlled from a central stylesheet makes site-wide changes simple.
- Readability: Source code is far easier to understand when content and style are neatly abstracted into separate files.
- Caching: Since most sites maintain consistent styling across pages, a dedicated stylesheet saves bandwidth by avoiding repeated downloads of the same style definitions.
- Developer specialization: Large projects benefit when CSS specialists can work in their own files without stepping on content markup.
- User options: Separated styling makes it easier to offer display preferences like "night mode" or alternative accessibility presentation modes.
- Responsiveness: Independent content and presentation code simplifies building layouts that work across dramatically different screen sizes.
Yet early HTML was full of presentation-oriented markup living right alongside content. You might see code like this:
<center><font face="verdana" color="#2400D3">Hello world!</font></center>
That approach is now deprecated due to the separation of concerns described above.
The Modern Deprecated Elements List
With HTML5, the following elements are officially discouraged:
<acronym>(use<abbr>instead)<applet>(use<object>)<basefont>(use CSS font properties likefont-sizeandfont-family)<big>(use CSSfont-size)<center>(use CSStext-align)<dir>(use<ul>)<font>(use CSS font properties)<frame>(use<iframe>)<frameset>(not needed any more)<isindex>(not needed any more)<noframes>(not needed any more)<s>(usetext-decoration: line-throughin CSS)<strike>(usetext-decoration: line-throughin CSS)<tt>(use<code>)
There's also a lengthy list of deprecated attributes attached to elements that remain otherwise valid — the align attribute used across many elements being a prime example. The W3C maintains the full list of deprecated attributes.
The Table Layout Problem
Before CSS became widespread, web developers routinely constructed entire page layouts with the <table> element. While <table> itself is not deprecated, using it for layout is strongly discouraged. Almost all table attributes once used for layout — cellpadding, bgcolor, width — have been deprecated.
At the time, tables seemed like a reasonable solution. Rows and columns could be sized arbitrarily, so headers, navigation, and footers could all be crammed inside. That led to markup like this:
<table border="0" cellpadding="0" cellspacing="0" width="720">
<tr>
<td colspan="10"><img name="logobar" src="logobar.jpg" width="720" height="69" border="0" alt="Logo"></td>
</tr>
<tr>
<td rowspan="2" colspan="5"><img name="something" src="something.jpg" width="495" height="19" border="0" alt="A picture of something"></td>
<td>Blah blah blah!</td>
<td colspan="3">
<tr>
<!-- and so on -->
</table>
The problems with this approach quickly become apparent:
- Complex layouts often required tables nested inside other tables, creating an unmanageable mess of code.
- Accessibility suffered, as screen readers struggle with excessive table nesting.
- Tables render slowly — the browser waits for the entire table to download before displaying anything.
- Responsive, mobile-friendly layouts are nearly impossible to build on a table foundation.
CSS provides a far more efficient way to create visual layouts without cluttering the HTML document. That said, <table> remains the correct choice for its intended purpose: presenting actual tabular data like baseball scores, statistics, or any similar data sets.
Why <b> and <i> Survived
It's a fair question: bold and italic are visual styling — why aren't those deprecated like <center> and <s>? The short answer is that <b> and <i> are so widespread and useful that deprecating them would have been impractical. CSS alternatives are comparatively unwieldy:
<style>
.emphasis { font-weight:bold }
</style>
This is a <span class="emphasis">bold</span> word!
This is a <span style="font-weight:bold">bold</span> word!
This is a <b>bold</b> word!
The longer answer is that both tags have been assigned semantic meaning in HTML5, giving them value beyond pure visual presentation. That semantic role helps screen readers and search crawlers understand the purpose of the content inside these tags.
Consider the different reasons you might italicize a word: emphasis, a creative work's title, a scientific name. How should a screen reader know whether to change inflection? The semantic tags clarify intent:
<b>draws attention without adding importance — no inflection change for screen readers, no extra weight for search engines.<strong>signals importance, like changing your vocal inflection to emphasize a word.<i>applies italic styling without extra meaning or emphasis — ideal for scientific names or similar conventional italics.<em>italicizes and adds emphasis, marking a word that should carry stress in context.<cite>marks the title of a creative work — styled as italics without affecting how the surrounding sentence is read aloud.
The general rule is to use <b> and <i> only as a last resort when nothing more semantically appropriate fits. That semantic flexibility is what kept these tags alive while similar styling elements got deprecated. The underline tag <u> follows a similar path — once deprecated, it was restored in HTML5 because it carries semantic uses like annotating spelling errors.
Deprecated Code Still on the Web
Some deprecated elements remain in widespread use. After all, they still work — they're discouraged, not broken. Sometimes developers haven't heard the old approach is outdated; other times they simply don't see a reason to change something that works.
One common relic is the align attribute on otherwise valid tags, particularly on images. You'll also still see <img> tags carrying the long-deprecated border attribute. CSS remains the preferred method for all such styling.
Staying current with deprecation is essential practice for any web developer. Following current recommendations while avoiding legacy elements helps ensure your sites keep working long-term and remain compatible with the evolving web platform.



