Skip to main content

Combining Selectors

Updated Mar 20, 2019 ·

Overview

Different CSS selectors apply styles to various elements based on their type, position, or interaction.

The examples below use the following HTML file:

index.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<button>Click Me</button>
<input type="text" placeholder="Type here">

<p>Paragraph with default color.</p>

<div>
<p>Direct paragraph inside div</p>
<section>
<p>Nested paragraph inside section</p>
</section>
</div>

<div>
<h2>This is an H2 header</h2>
<ul>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
</ul>
<h2>This is another H2 header</h2>
<ul>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
<li>Fourth item</li>
</ul>
</div>
</body>
</html>

Grouping Selectors

The same rule can apply to multiple elements using a comma.

button, p {
color: blue;
}
  • Selects both h1 and h2
  • Applies the same style to both

This is useful for reducing repetitive code.

Descendant Selector (Space)

This rule targets elements nested within a specific ancestor.

div p {
color: red;
}
  • Selects all <p> elements inside <div>.
  • Works regardless of nesting depth

Use this when styling all occurrences of an element within a parent.

Child Selector (>)

The > selector targets only direct children, ignoring nested ones.

div > h2 {
color: green;
}

/* Only applies to direct <p> inside <div>, not nested ones */
div > p {
font-style: italic;
}

Note:

  • In the <ul>, only top-level <li> elements are green
    • Sub-items remain unaffected
  • In the <div>, only the direct <p> is italic
    • Nested <p> inside <section> is unaffected

Use this to style only immediate child elements.

Adjacent Sibling Selector (+)

The + selector targets an element immediately following a specified element.

button + input {
border: 2px solid red;
}
  • Selects an input that comes directly after a button
  • Does not apply if another element is in between

Useful for styling elements based on their direct relation to others.

Chaining Selectors

Apply styles only when multiple conditions are met. The syntax is as follows:

selectorselector {
attribute: value;
}

For example, if we want to select a super specific h1 that has id=title and class='big heading', we can use:

h1#title.big.heading {
color: green;
}
  • Add the specific element first in the chain
  • Use . to chain/append classes
  • Use # to chain/append id
  • No spaces between selectors

Hover Selector (:hover)

The :hover selector applies styles when the user hovers over an element.

button:hover {
background-color: lightgray;
}

-Changes the button's background when hovered -Enhances interactivity for users

Last Child Selector (:last-child)

The :last-child selector targets the last child of a parent.

li:last-child {
font-weight: bold;
}
  • Selects only the last li in each list
  • Useful for styling the final item in a group

Using Important

Using !important forces a style, overriding all other rules. However, it should be used cautiously as it makes debugging harder.

input {
background-color: yellow !important;
}

Combining Combiners

CSS allows combining multiple selectors to create highly specific rules.

selector selectorselector {
attribute: value;
}

For example:

div p:last-child {
color: red;
}
  • Selects the last p inside any div
  • Useful for precise targeting within nested structures