The ::after pseudo-element lets you add content right after an element without changing the HTML. It helps decorate or add extra info easily.
After pseudo-element in CSS
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
CSS
selector::after { content: "your content"; /* other styles */ }
The content property is required; without it, nothing shows.
Use double colons ::after for modern CSS, but single colon :after also works for compatibility.
Examples
CSS
a::after { content: " 🔗"; }
CSS
p::after { content: " -- end of paragraph"; font-style: italic; color: gray; }
CSS
h2::after { content: ""; display: block; width: 50px; height: 3px; background: black; margin-top: 0.5rem; }
Sample Program
This code adds a green checkmark after the "Submit" button text using the ::after pseudo-element.
CSS
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>After Pseudo-element Example</title> <style> button::after { content: " [check]"; color: green; font-weight: bold; } </style> </head> <body> <button>Submit</button> </body> </html>
Important Notes
The ::after element is inline by default. Use display to change layout if needed.
It does not add real HTML content, so screen readers may not read it. Use carefully for accessibility.
Summary
::after adds content after an element without changing HTML.
You must set content for it to show anything.
Great for decoration, icons, or extra info in a simple way.
Practice
1. What does the CSS
::after pseudo-element do?easy
Solution
Step 1: Understand the purpose of
The::after::afterpseudo-element inserts content after the selected element in the page layout without modifying the HTML structure.Step 2: Compare with other options
Options A, C, and D describe different CSS effects unrelated to::after.Final Answer:
Adds content after an element without changing the HTML -> Option AQuick Check:
::afteradds content after element [OK]
Hint: Remember ::after adds content visually, not in HTML [OK]
Common Mistakes:
- Thinking it changes the HTML structure
- Confusing it with visibility or color changes
- Forgetting it needs content property to show
2. Which CSS rule correctly uses
::after to add a red asterisk after a paragraph?easy
Solution
Step 1: Check correct pseudo-element syntax
The modern and correct syntax for the after pseudo-element is::after, not:after.Step 2: Verify property names
The property to add text iscontent, and color is set withcolor. Options C and D use incorrect properties (textandfont-color).Final Answer:
p::after { content: '*'; color: red; } -> Option AQuick Check:
Use::afterwithcontentandcolor[OK]
Hint: Use double colons and 'content' property for ::after [OK]
Common Mistakes:
- Using single colon instead of double (::after vs :after)
- Using wrong property like 'text' instead of 'content'
- Using 'font-color' instead of 'color'
3. What will be the visual output of this CSS?
h1::after { content: ' [check]'; color: green; }Given HTML: <h1>Task Complete</h1>
medium
Solution
Step 1: Understand
The::aftercontent insertion::afteradds the string ' [check]' after theh1text, so the check mark appears after "Task Complete".Step 2: Check color styling
The color property applies to the inserted content, so the check mark will be green.Final Answer:
Task Complete [check] (green check mark after text) -> Option BQuick Check:
::afteradds green check after text [OK]
Hint: Content appears after element text with given styles [OK]
Common Mistakes:
- Thinking content appears before text
- Ignoring color styling on inserted content
- Expecting no visible change without HTML change
4. Identify the error in this CSS code:
div::after { content: foo; }medium
Solution
Step 1: Check valid values for
Thecontentcontentproperty requires a string (in quotes), url(), or special keywords like''(empty string). The valuefoois invalid here.Step 2: Verify usage of
The::afterondiv::afterpseudo-element can be used on any element, includingdiv.Final Answer:
contentmust be a string or url, not 'foo' -> Option DQuick Check:
contentneeds string or url, not 'foo' [OK]
Hint: Use quotes for content, 'foo' is invalid [OK]
Common Mistakes:
- Using 'foo' instead of empty string or valid content
- Thinking ::after can't be on div
- Missing semicolon (not the main error here)
5. You want to add a decorative quote mark after every blockquote without changing HTML. Which CSS snippet correctly does this and ensures accessibility?
hard
Solution
Step 1: Add decorative content with
Using::aftercontent: '"'adds the quote mark after blockquote text visually.Step 2: Accessibility for pseudo-elements
Generated content from::afteris not part of the DOM accessibility tree and is ignored by screen readers, so no additional CSS properties are needed.Step 3: Check other options
blockquote::after { content: '"'; font-size: 2rem; color: gray; aria-hidden: true; } uses invalid CSS propertyaria-hidden(ARIA attributes belong on HTML elements). blockquote::after { content: '"'; font-size: 2rem; color: gray; display: none; } usesdisplay: none;which hides the quote visually. blockquote::after { content: '"'; font-size: 2rem; color: gray; role: presentation; } uses invalid CSS propertyrole.Final Answer:
blockquote::after { content: '"'; font-size: 2rem; color: gray; } -> Option CQuick Check:
::after content ignored by screen readers [OK]
Hint: Pseudo ::after content doesn't need special accessibility handling [OK]
Common Mistakes:
- Using invalid CSS properties like aria-hidden or role
- Using invalid CSS properties like role
- Hiding content visually instead of from screen readers
