Bird
Raised Fist0
CSSmarkup~5 mins

Starts-with and ends-with selectors in CSS

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

These selectors help you style elements based on how their attribute values start or end. It makes targeting specific elements easier without extra classes or IDs.

You want to style all links that start with 'https' differently from others.
You want to highlight images whose file names end with '.png'.
You want to change the color of buttons whose IDs start with 'btn-'.
You want to style input fields where the name attribute ends with 'email'.
Syntax
CSS
[attribute^="value"] { /* styles */ }
[attribute$="value"] { /* styles */ }
^= means 'starts with'.
$= means 'ends with'.
Examples
This styles all links (a) whose href attribute starts with "https" in green.
CSS
a[href^="https"] {
  color: green;
}
This adds a blue border to all images whose src attribute ends with ".png".
CSS
img[src$=".png"] {
  border: 2px solid blue;
}
This colors buttons orange if their id starts with "btn-".
CSS
button[id^="btn-"] {
  background-color: orange;
}
This makes input fields bold if their name attribute ends with "email".
CSS
input[name$="email"] {
  font-weight: bold;
}
Sample Program

This page shows how CSS styles elements based on attribute values that start or end with certain text. Green bold links start with "https". Blue bordered images end with ".png". Orange buttons have IDs starting with "btn-". Bold input fields have names ending with "email".

CSS
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Starts-with and Ends-with Selectors</title>
  <style>
    a[href^="https"] {
      color: green;
      font-weight: bold;
    }
    img[src$=".png"] {
      border: 3px solid blue;
      padding: 4px;
      max-width: 100px;
      display: block;
      margin-bottom: 1rem;
    }
    button[id^="btn-"] {
      background-color: orange;
      color: white;
      border: none;
      padding: 0.5rem 1rem;
      cursor: pointer;
      margin-bottom: 1rem;
    }
    input[name$="email"] {
      font-weight: bold;
      border: 2px solid #333;
      padding: 0.3rem;
      margin-bottom: 1rem;
      display: block;
      width: 200px;
    }
  </style>
</head>
<body>
  <h1>Starts-with and Ends-with Selectors Demo</h1>
  <a href="https://example.com">Secure Link (https)</a><br />
  <a href="http://example.com">Regular Link (http)</a>
  <hr />
  <img src="flower.png" alt="Flower" />
  <img src="tree.jpg" alt="Tree" />
  <hr />
  <button id="btn-submit">Submit</button>
  <button id="cancel">Cancel</button>
  <hr />
  <input type="text" name="useremail" placeholder="Your email" />
  <input type="text" name="username" placeholder="Your name" />
</body>
</html>
OutputSuccess
Important Notes

These selectors only work with attributes, not with element text content.

They are case-sensitive, so "https" is different from "HTTPS".

Use browser DevTools to test and see which elements are matched by these selectors.

Summary

Starts-with selector targets elements whose attribute value begins with a specific string.

Ends-with selector targets elements whose attribute value ends with a specific string.

They help style elements easily without extra classes or IDs.

Practice

(1/5)
1. Which CSS selector targets all elements with an href attribute that starts with "https"?
easy
A. a[href*="https"]
B. a[href$="https"]
C. a[href^="https"]
D. a[href~="https"]

Solution

  1. Step 1: Understand the starts-with selector syntax

    The starts-with selector uses the caret symbol (^) inside square brackets to match attribute values that begin with a specific string.
  2. Step 2: Match the selector to the question

    The selector a[href^="https"] matches all anchor tags with href attributes starting with "https".
  3. Final Answer:

    a[href^="https"] -> Option C
  4. Quick Check:

    Starts-with selector = ^ = a[href^="https"] [OK]
Hint: Starts-with selector uses ^ inside attribute brackets [OK]
Common Mistakes:
  • Confusing starts-with (^) with ends-with ($)
  • Using *= which means contains, not starts-with
  • Using ~ which matches whole words in space-separated values
2. Which of the following is the correct CSS syntax to select elements with a class attribute ending with "-btn"?
easy
A. [class$="-btn"]
B. .class^="-btn"
C. .class$="-btn"
D. [class^="-btn"]

Solution

  1. Step 1: Identify the ends-with selector syntax

    The ends-with selector uses the dollar sign ($) inside square brackets to match attribute values that end with a specific string.
  2. Step 2: Apply correct syntax for class attribute

    To select elements whose class attribute ends with "-btn", use [class$="-btn"]. The dot (.) is for class names, not attribute selectors.
  3. Final Answer:

    [class$="-btn"] -> Option A
  4. Quick Check:

    Ends-with selector = $ inside [] = [class$="-btn"] [OK]
Hint: Ends-with selector uses $ inside attribute brackets [OK]
Common Mistakes:
  • Using dot (.) with attribute selectors incorrectly
  • Confusing starts-with (^) with ends-with ($)
  • Missing square brackets for attribute selectors
3. Given this HTML:
<a href="https://example.com">Link1</a>
<a href="http://example.com">Link2</a>
<a href="https://secure.com">Link3</a>

Which links will be styled by the CSS selector a[href^="https"] { color: red; }?
medium
A. All three links
B. Only Link1
C. Link2 and Link3
D. Link1 and Link3

Solution

  1. Step 1: Identify which href values start with "https"

    Link1 has href="https://example.com" and Link3 has href="https://secure.com". Both start with "https". Link2 starts with "http" (no s).
  2. Step 2: Apply the starts-with selector effect

    The selector a[href^="https"] styles only elements whose href attribute starts with "https". So Link1 and Link3 get styled.
  3. Final Answer:

    Link1 and Link3 -> Option D
  4. Quick Check:

    Starts-with "https" matches Link1 & Link3 [OK]
Hint: Starts-with selector matches only beginning of attribute value [OK]
Common Mistakes:
  • Including links starting with "http" without s
  • Confusing contains (*) with starts-with (^)
  • Assuming all links get styled
4. You wrote this CSS but it doesn't style any elements:
input[name^="user"] { background-color: yellow; }

HTML:
<input name="login">
<input name="signup">
<input name="emailuser">

What is the likely problem?
medium
A. The selector should use $ instead of ^
B. The attribute values do not start with "user"
C. The input elements need IDs for this selector
D. The selector syntax is invalid

Solution

  1. Step 1: Check attribute values against selector

    The selector targets inputs with name attributes starting with "user". The inputs have names "login", "signup", and "emailuser". None of these start with "user".
  2. Step 2: Identify why no elements styled

    Since none of the name attributes start with "user", no elements match the selector, so nothing gets styled.
  3. Final Answer:

    The attribute values do not start with "user" -> Option B
  4. Quick Check:

    Starts-with selector matches only beginning of attribute value [OK]
Hint: Check if attribute values actually start with the given string [OK]
Common Mistakes:
  • Assuming ends-with ($) is needed instead of starts-with (^)
  • Thinking IDs are required for attribute selectors
  • Believing selector syntax is wrong when it is correct
5. You want to style all img elements whose src attribute starts with "https://cdn." and ends with ".png". Which CSS selector correctly targets these images?
hard
A. img[src^="https://cdn."][src$=".png"]
B. img[src*="https://cdn."][src*=".png"]
C. img[src$="https://cdn."][src^=".png"]
D. img[src^=".png"][src$="https://cdn."]

Solution

  1. Step 1: Understand combined attribute selectors

    You can combine multiple attribute selectors to match elements that satisfy all conditions. Here, one selector checks if src starts with "https://cdn." and another checks if src ends with ".png".
  2. Step 2: Match correct starts-with and ends-with syntax

    Starts-with uses ^ and ends-with uses $. So the correct selector is img[src^="https://cdn."][src$=".png"].
  3. Final Answer:

    img[src^="https://cdn."][src$=".png"] -> Option A
  4. Quick Check:

    Combine ^ and $ selectors correctly [OK]
Hint: Combine ^ and $ selectors to match start and end [OK]
Common Mistakes:
  • Using * (contains) instead of ^ or $
  • Swapping ^ and $ symbols
  • Incorrect order or syntax of attribute selectors