CSS pseudo-classes and pseudo-elements let you style web elements dynamically, enhancing both design and user interaction. This tutorial simplifies both concepts and shows how to use them effectively.
What are CSS Pseudo-classes?
Pseudo-classes target specific states or actions of HTML elements, like when you hover over a link or click a button.
Common pseudo-classes include:
:hover
:active
:visited
:focus
:first-child
:nth-child()
Examples of CSS Pseudo-classes
1. Hover effect (:hover
)
Change the color of a link when hovering:
a:hover {
color: red;
}
2. Styling Visited Links
Differentiate between visited and unvisited links:
a:visited {
color: purple;
}
Styling Focus States
Use :focus
to enhance accessibility and interactivity:
input:focus {
border: 2px solid blue;
outline: none;
}
Using nth-child()
for Advanced Styling
Target specific elements based on their position:
/* Styles every second list item */
li:nth-child(even) {
background-color: #f9f9f9;
}
What are CSS Pseudo-elements?
Pseudo-elements let you style specific parts of an element or insert extra elements without changing your HTML. They always start with double colons ::
.
Common pseudo-elements are:
::before
::after
::first-letter
::first-line
::marker
Examples of CSS Pseudo-elements
Adding Content with ::before
and ::after
You can insert decorative elements or icons without extra HTML:
h2::before {
content: "★ ";
color: gold;
}
Decorative Separator with ::after
.heading::after {
content: "";
display: block;
width: 50px;
height: 3px;
background-color: red;
margin-top: 5px;
}
Styling First Letter or Line of Text
Enhance typography using ::first-letter
or ::first-line
:
p::first-letter {
font-size: 3em;
color: darkblue;
}
p::first-line {
font-weight: bold;
}
Practical Example: Custom Checkbox using Pseudo-elements
HTML:
<label class="checkbox-container">Accept terms
<input type="checkbox">
<span class="checkmark"></span>
</label>
CSS:
label {
position: relative;
padding-left: 25px;
cursor: pointer;
}
.checkmark {
position: absolute;
top: 0;
left: 0;
height: 20px;
width: 20px;
background-color: #eee;
}
input:checked + .checkmark::after {
content: '';
position: absolute;
left: 6px;
top: 3px;
width: 6px;
height: 12px;
border: solid green;
border-width: 0 3px 3px 0;
transform: rotate(45deg);
}
Tips for Using Pseudo-classes and Pseudo-elements
- Use pseudo-classes to enhance user interaction (hover, focus).
- Use pseudo-elements for decorative and visual effects without changing HTML.
- Keep styles simple and consistent across your website.
Conclusion
CSS pseudo-classes and pseudo-elements give you powerful control over styling elements dynamically and creatively without modifying HTML. Practice using these features to enhance your web design and improve your users’ experience.