Skip to content

Linter Rule: No block elements inside inline elements

Rule: html-no-block-inside-inline

Description

Prevent block-level elements from being placed inside inline elements.

Rationale

Placing block-level elements (like <div>, <p>, <section>) inside inline elements (like <span>, <a>, <strong>) violates HTML content model rules and may lead to unpredictable rendering behavior across browsers.

This practice can cause:

  • Invalid HTML that fails validation
  • Inconsistent rendering across different browsers
  • Layout issues and unexpected visual results
  • Accessibility problems with screen readers

Examples

✅ Good

erb
<span>
  Hello <strong>World</strong>
</span>

<div>
  <p>Paragraph inside div (valid)</p>
</div>

<a href="#">
  <img src="icon.png" alt="Icon">
  <span>Link text</span>
</a>

🚫 Bad

erb
<span>
  <div>Invalid block inside span</div>
</span>

<span>
  <p>Paragraph inside span (invalid)</p>
</span>

<a href="#">
  <div class="card">
    <h2>Card title</h2>
    <p>Card content</p>
  </div>
</a>

<strong>
  <section>Section inside strong</section>
</strong>

References

Released under the MIT License.