π§© 1. Attribute Selectors
Select elements based on their attributes or attribute values.
π‘ Syntax Examples:
input[type="text"] { ... } /* exact match */
a[href^="https"] { ... } /* starts with */
a[href$=".pdf"] { ... } /* ends with */
a[href*="docs"] { ... } /* contains */
π§ Example:
<input type="text" placeholder="Name">
<input type="password" placeholder="Password">
<a href="https://example.com">Visit</a>
<a href="manual.pdf">Manual</a>
π Useful for styling forms, links, or any tag with attributes β no extra classes needed!
πͺ 2. Pseudo-elements (::before, ::after)
Used to generate content or add decorations using CSS only.
π‘ Syntax:
h2::before {
content: "π ";
}
a::after {
content: " β";
}
π§ Example:
<h2>Welcome</h2>
<a href="#">Learn more</a>
π Great for icons, labels, badges, or automatic quotes β adds personality to designs without extra HTML.
π±οΈ 3. User Action Pseudo-classes
React to user interactions (hover, click, focus, etc.).
π‘ Common ones:
button:hover { background: #2563eb; color: white; } /* on hover */
input:focus { border-color: #10b981; } /* when focused */
a:active { color: red; } /* when clicked */
π§ Example:
<button>Hover me</button>
<input type="text" placeholder="Focus me">
π These make your website feel alive β interactive and dynamic.
πΆ 4. Child Combinator (>)
Targets only direct children of an element (not grandchildren).
π‘ Syntax:
section > p {
color: blue;
}
π§ Example:
<section>
<p>Direct child (styled)</p>
<div>
<p>Nested child (not styled)</p>
</div>
</section>
π Helps you keep precise control over which elements get styled.
π§± 5. Structural Pseudo-classes
Select elements based on their position in the HTML structure.
π‘ Syntax:
li:first-child { color: red; }
li:last-child { color: blue; }
p:only-child { font-style: italic; }
π§ Example:
<ul>
<li>First</li>
<li>Middle</li>
<li>Last</li>
</ul>
π Super handy for lists, tables, grids, and sections β no need for extra classes.
π« 6. Negation Pseudo-class (:not())
Select everything except something specific.
π‘ Syntax:
button:not(.primary) {
background: gray;
}
π§ Example:
<button class="primary">Save</button>
<button>Cancel</button>
π Styles all buttons except the one with the .primary class.
Perfect for excluding special elements from general styles.
π’ 7. Nth Pseudo-class (:nth-child() / :nth-of-type())
Select elements by their order number.
π‘ Syntax:
li:nth-child(odd) { background: #f3f4f6; } /* every odd item */
li:nth-child(even) { background: #e0f2fe; } /* every even item */
li:nth-child(3) { color: red; } /* third item only */
π§ Example:
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
π Perfect for alternating row colors (like zebra stripes in tables).
β 8. Validity Pseudo-classes (:valid, :invalid, :required)
Used in forms to style inputs based on whether theyβre valid or not.
π‘ Syntax:
input:valid { border-color: #10b981; }
input:invalid { border-color: #ef4444; }
input:required { background: #fff7ed; }
π§ Example:
<input type="email" placeholder="Enter email" required>
π Adds real-time visual feedback in forms β no JavaScript needed!
π 9. Relational Selector (:has())
Select elements based on what they contain.
(Modern browsers only β supported in Chrome, Edge, Safari, Firefox 121+)
π‘ Syntax:
article:has(img) {
border: 2px solid #2563eb;
}
π§ Example:
<article>
<img src="photo.jpg">
<p>This article has an image.</p>
</article>
π Think of :has() as a βparent-awareβ selector β CSS can now react to children!
(For example: βstyle any card that contains a button.β)
Top comments (0)