About This HTML Issue
HTML follows a strict stack-based nesting model. When you open an element, it becomes the “current” element, and any new element you open becomes a child of it. Closing tags must mirror the opening order in reverse. When the validator encounters </i> but the most recently opened unclosed element is something else — like <strong>, <b>, <span>, or <a> — the nesting rules are violated because the <i> element and the other element are overlapping rather than containing one another.
For example, if you write <i>...<strong>...</i>...</strong>, the <i> and <strong> elements overlap. The <i> tries to close while <strong> is still open inside it, and then <strong> tries to close outside of <i>. This creates an ambiguous structure that no valid DOM tree can represent as written. Browsers will attempt to “fix” this using error-recovery algorithms, but the result may differ across browsers and is unlikely to match your intent.
Why this matters
- Unpredictable rendering: Browser error-recovery can silently restructure your markup, leading to missing styles, broken links, or misplaced text.
- Accessibility: Screen readers rely on a well-formed DOM tree. Mis-nested elements can cause assistive technology to misinterpret the structure, reading content out of order or missing emphasis cues entirely.
- Maintainability: Overlapping tags make code harder to read and debug. Future edits are more likely to introduce additional errors.
Common causes
-
Overlapping inline elements: Opening
<i>and then<b>(or<strong>,<em>,<span>, etc.) but closing</i>before</b>. -
Tags crossing an anchor boundary: Starting
<i>outside an<a>element but closing it inside, or vice versa. -
Copy-paste errors: Duplicating a block of HTML that includes icons (e.g., Font Awesome
<i>tags) or screen-reader-only<span>elements, then editing part of it without fixing the tag order. -
Mixing presentational and semantic markup: Wrapping
<i>around content that already contains<em>or<strong>, then accidentally closing in the wrong sequence.
How to fix it
-
Identify the overlapping pair. The validator message usually points to the line where
</i>appears. Look for the nearest unclosed element that was opened after<i>. -
Reorder the closing tags so they mirror the opening order in reverse. If you opened
<i>then<strong>, close</strong>then</i>. - If the overlap is intentional (e.g., you want bold-italic text that transitions to just bold), restructure by closing and reopening elements at the boundary rather than overlapping them.
-
Consider semantic alternatives. The
<i>element is for idiomatic text (technical terms, foreign phrases, thoughts). If you need emphasis, use<em>. If you only need italic styling, use CSSfont-style: italic;. Whichever element you choose, the nesting rules are the same.
Examples
Incorrect — overlapping <i> and <strong>
The </i> closes while <strong> is still open inside it:
<p>
<a href="/about"><i>About <strong>Us</i></strong></a>
</p>
Correct — properly nested
Close <strong> first, then <i>:
<p>
<a href="/about"><i>About <strong>Us</strong></i></a>
</p>
Incorrect — <i> crossing an anchor boundary
<p>
<i><a href="/contact">Contact us</i></a> for more info.
</p>
Correct — keep <i> fully inside or fully outside the link
<p>
<a href="/contact"><i>Contact us</i></a> for more info.
</p>
Incorrect — overlapping inline elements with a style transition
Trying to make “bold italic” transition to “just bold” by overlapping:
<p>
<i>Italic and <b>bold-italic</i> then just bold.</b>
</p>
Correct — close and reopen at the boundary
<p>
<i>Italic and <b>bold-italic</b></i><b> then just bold.</b>
</p>
Incorrect — icon element mis-nested with a span
<button>
<i class="icon-search"><span class="sr-only">Search</i></span>
</button>
Correct — close <span> before <i>
<button>
<i class="icon-search"><span class="sr-only">Search</span></i>
</button>
A quick way to check your nesting is to read through your opening tags in order and then confirm the closing tags appear in exactly the reverse order. If you opened <a>, <i>, <strong>, the closing sequence must be </strong>, </i>, </a>. When in doubt, use your editor’s bracket-matching or tag-highlighting feature to visually trace each pair.
Find issues like this automatically
Rocket Validator scans thousands of pages in seconds, detecting HTML issues across your entire site.