The Problem: Why Nested Anchor Tags Fail
You've designed a beautiful card component for your blog posts or product listings. The entire card should be clickable--taking users to the full article or product page--but you also need secondary links inside, like "Read more" or "Add to cart." You try wrapping everything in an anchor tag, only to discover that nested <a> tags are invalid HTML and browsers will break them.
HTML specification explicitly forbids nesting anchor (<a>) elements. When browsers encounter nested links, they don't throw an error--they simply close the first link before opening the second, causing the inner link to be "kicked out" and rendered as invalid HTML. This is one of the most common challenges in modern web development, yet the solution is surprisingly elegant with CSS.
According to CSS-Tricks' comprehensive coverage of nested links, the browser's HTML parser handles nested anchors by restructuring them into sibling elements, which breaks the intended interaction model entirely.
<!-- This gets restructured by the browser -->
<a href="/article">
Article Title
<a href="/author">Author Name</a>
</a>
<!-- Browser renders something like: -->
<a href="/article">Article Title</a>
<a href="/author">Author Name</a>
<a href="/article"></a>The CSS-Only Solution: Pseudo-Element Stacking
The solution involves creating a "cover" link that spans the entire container using CSS pseudo-elements (::before or ::after), while keeping secondary links naturally positioned above it using z-index. This approach requires no JavaScript and maintains full accessibility.
Sara Soueidan's detailed technique analysis covers how this approach was implemented at Smashing Magazine for their article listings--a technique now used across the web for performant card components.
Core Technique
The implementation uses three key CSS concepts:
- Position the main link relatively - Creates a positioning context for the pseudo-element
- Add an absolutely positioned pseudo-element - Covers the entire card surface with a clickable area
- Set z-index on secondary links - Places them above the cover element for proper stacking
This CSS-only approach adds minimal page weight while providing a robust solution that works across all modern browsers. For more advanced layouts, combining this technique with flexbox containers creates flexible, responsive card designs.
1.card {2 position: relative;3}4 5.card__main-link {6 position: relative;7 display: block;8 text-decoration: none;9 color: inherit;10}11 12/* The cover pseudo-element */13.card__main-link::before {14 content: '';15 position: absolute;16 top: 0;17 left: 0;18 width: 100%;19 height: 100%;20 z-index: 1;21}22 23.card__secondary-link {24 position: relative; /* Creates new stacking context */25 z-index: 2; /* Above the cover */26 display: inline-block;27}Accessibility Considerations
The pseudo-element technique is accessibility-friendly because screen readers announce the link text normally, and keyboard users can still tab to secondary links. The cover element doesn't interfere with focus order, and all links remain discoverable through standard navigation.
Per W3C WAI's WCAG 2.4.4 Link Purpose requirements, link purpose must be determinable from link text alone or with programmatically determined context. For nested link patterns in accessible web design:
- Link text should clearly describe the destination without ambiguity
- Avoid generic text like "Read more" without contextual information
- Use ARIA labels for additional context when link text alone isn't sufficient
- Test with screen readers (NVDA, VoiceOver, JAWS) to verify announcements
- Verify keyboard navigation order follows a logical, predictable sequence
WebAIM's accessibility guidelines for hypertext links recommend ensuring all links have distinguishable focus states and meet minimum touch target sizes for mobile users. Implementing accessible navigation patterns like these contributes to overall SEO performance since search engines prioritize websites that serve all users effectively.
| Approach | Best For | Pros | Cons |
|---|---|---|---|
| Pseudo-element | Card patterns, article listings | No JS, accessible, performant | CSS knowledge required |
| JavaScript overlay | Complex interactions | Maximum flexibility | Accessibility burden |
| CSS Grid | Grid-based layouts | Clean semantic HTML | Requires modern CSS |
| Form action | Search, filter actions | Semantic HTML | Limited use cases |
Common Patterns and Use Cases
Blog Post Card Pattern
The most common use case: entire card links to full article, with a "Read More" or "Continue Reading" secondary link. This pattern appears throughout content-heavy sites built with modern web frameworks.
Product Grid Pattern
E-commerce implementations frequently use this pattern:
- Product image and title link to product page
- "Add to Cart" button as secondary link
- Quick action buttons (wishlist, compare) as additional nested links
News Article Listing
Publishing sites leverage nested links for:
- Entire card linking to full article
- Author name linking to author profile
- Category tag linking to category page
- Published date and read time for context
Dashboard Widget Pattern
Application interfaces use this technique for:
- Header linking to detail view
- Summary metrics linking to detailed analytics
- Action buttons for common operations
Each pattern benefits from the CSS pseudo-element technique since it maintains accessibility while providing the UX users expect. For teams practicing test-driven development, these CSS-only solutions are particularly valuable since they reduce the JavaScript surface area that requires testing.
Verify necessity
Confirm nested links are truly necessary for the user experience
Screen reader testing
Test with NVDA, VoiceOver, or JAWS for accessibility
Keyboard navigation
Verify logical tab order and focus visibility
Touch targets
Ensure all links meet minimum 44x44px size on mobile
Hover and focus states
Provide clear visual feedback on all interactive elements
JavaScript disabled
Test degradation without JavaScript enabled
Link text context
Verify WCAG 2.4.4 compliance for link purpose
Reduced motion
Respect prefers-reduced-motion for any animations
Conclusion
Nested links are one of the most common challenges in modern web development, yet HTML specification makes them impossible to implement directly. The CSS-only pseudo-element technique provides an elegant, accessible, and performant solution that has been battle-tested by major publications and production-ready design systems.
By understanding the underlying problem--how browsers handle nested anchors--and following established accessibility guidelines from the W3C Web Accessibility Initiative, developers can implement these patterns confidently while maintaining inclusive user experiences across all devices and ability levels. This attention to accessibility not only serves users with disabilities but also improves overall site quality for search engines.
The key takeaways: use the pseudo-element cover technique for simplicity and performance, ensure all link text clearly communicates purpose, test with assistive technologies, and consider whether nested links truly enhance or complicate the user experience before implementing them. When implemented correctly, nested link patterns become invisible infrastructure that improves user engagement without compromising accessibility or code quality.
Frequently Asked Questions
Sources
- CSS-Tricks: Nested Links - Comprehensive coverage of the problem, CSS-only solutions, and accessibility considerations
- Sara Soueidan: Nested Links Without Nesting Links - Detailed technical article with the pseudo-element cover technique
- W3C WAI: Link Purpose (In Context) - WCAG 2.4.4 accessibility requirements
- WebAIM: Hypertext Links - Accessibility best practices for links