Attribute selectors match elements by the presence or value of an attribute. [required] checks whether an attribute exists; [type="email"] checks its exact value. They are useful for styling different form controls clearly.
Read a rule first
A CSS declaration uses property: value;. The semicolon ends one declaration, and braces group declarations for the same selector. The browser reads rules from top to bottom. When several rules match one element, the cascade considers their source, selector specificity, and order.
<label>
Email
<input type="email" required>
</label>
<label>
Name
<input type="text">
</label>input { padding: 8px; border: 1px solid #94a3b8; }
input[required] { border-left: 5px solid #dc2626; }
input[type="email"] { background: #eff6ff; }Change one value at a time and watch the text, color, size, or position. This connects each declaration to a visible result. Browser developer tools show the result of the same matching process.
A useful checking order
- Confirm that the selector matches the intended HTML element.
- Check the property name, colon, value, and semicolon.
- Test narrow space, longer text, and keyboard use.
Live style lab: Attribute selectors
Unlock the complete interactive lab, deeper explanations, and curated reference answers.
A common source of confusion
CSS changes presentation and layout; it does not change the meaning of the HTML. Keep meaningful HTML elements and style them, rather than choosing the wrong element only for its default appearance. Readability comes before decoration.
KNOWLEDGE QUIZ
required attribute?
Practice: build a attribute selectors example
Write a small CSS rule set for the supplied HTML and verify each result in a browser preview.
- Keep the HTML content and semantic structure.
- Use selectors related to this lesson and write at least three declarations.
- Check text contrast and make sure no content is covered or clipped.
HTML structure
<label>
Email
<input type="email" required>
</label>
<label>
Name
<input type="text">
</label>