Bird
Raised Fist0
CSSmarkup~8 mins

Universal selector in CSS - Performance & Optimization

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
Performance: Universal selector
MEDIUM IMPACT
The universal selector affects the style calculation and layout phases by applying styles to all elements, which can slow down rendering.
Applying a style to many elements on the page
CSS
body, h1, p, ul, li { margin: 0; padding: 0; }
Targets only necessary elements, reducing the number of nodes affected and minimizing style recalculation and layout work.
📈 Performance Gainreduces style recalculation and layout to only targeted elements, improving rendering speed
Applying a style to many elements on the page
CSS
* { margin: 0; padding: 0; }
The universal selector applies styles to every element, triggering style recalculations and layout for all nodes, even those that don't need it.
📉 Performance Costtriggers style recalculation and layout for all DOM nodes, increasing rendering time
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Universal selector (*)All elements matchedTriggers reflow for all elementsHigh paint cost due to many styled nodes[X] Bad
Specific element selectorsOnly targeted elements matchedReflow limited to fewer elementsLower paint cost[OK] Good
Rendering Pipeline
The universal selector causes the browser to apply styles to every element, increasing the work during style calculation and layout stages.
Style Calculation
Layout
Paint
⚠️ BottleneckStyle Calculation and Layout due to broad element matching
Core Web Vital Affected
LCP
The universal selector affects the style calculation and layout phases by applying styles to all elements, which can slow down rendering.
Optimization Tips
1Avoid using the universal selector for broad styling to reduce style recalculation cost.
2Target only necessary elements with specific selectors to improve rendering speed.
3Monitor style recalculation and layout times in DevTools to catch performance issues.
Performance Quiz - 3 Questions
Test your performance knowledge
Why can using the universal selector (*) slow down page rendering?
ABecause it reduces the number of CSS rules
BBecause it only styles one element at a time
CBecause it applies styles to every element, increasing style calculation and layout work
DBecause it caches styles for faster rendering
DevTools: Performance
How to check: Record a performance profile while loading the page, then look at the 'Style Recalculation' and 'Layout' events to see if many nodes are affected.
What to look for: Long style recalculation or layout times indicate broad selectors like the universal selector impacting performance.

Practice

(1/5)
1. What does the CSS universal selector * do?
easy
A. Selects elements with a specific class
B. Selects only div elements
C. Selects all elements on the page
D. Selects elements with a specific ID

Solution

  1. Step 1: Understand the universal selector symbol

    The * symbol in CSS means "all elements" without exception.
  2. Step 2: Apply the selector meaning

    Using * targets every element on the page, regardless of tag, class, or ID.
  3. Final Answer:

    Selects all elements on the page -> Option C
  4. Quick Check:

    Universal selector = all elements [OK]
Hint: Remember * means every element on the page [OK]
Common Mistakes:
  • Thinking * selects only specific tags
  • Confusing * with class or ID selectors
  • Assuming * targets only visible elements
2. Which of the following is the correct syntax to apply a margin of 0 to all elements using the universal selector?
easy
A. # * { margin: 0; }
B. . * { margin: 0; }
C. all { margin: 0; }
D. * { margin: 0; }

Solution

  1. Step 1: Identify the universal selector syntax

    The universal selector is just * without any prefix like dot or hash.
  2. Step 2: Check the CSS rule format

    The correct CSS rule to apply margin 0 to all elements is * { margin: 0; }.
  3. Final Answer:

    * { margin: 0; } -> Option D
  4. Quick Check:

    Universal selector syntax = * { ... } [OK]
Hint: Universal selector is just * without dot or hash [OK]
Common Mistakes:
  • Adding dot or hash before *
  • Using invalid selector names like 'all'
  • Forgetting curly braces
3. Given this CSS code:
* { padding: 10px; }
p { padding: 5px; }

What will be the padding of a paragraph (<p>) element?
medium
A. 10px
B. 5px
C. 15px
D. 0px

Solution

  1. Step 1: Understand selector specificity

    The universal selector * applies padding 10px to all elements, but the p selector is more specific.
  2. Step 2: Apply CSS specificity rules

    Since p selector is more specific than *, the paragraph's padding will be 5px, overriding the universal selector.
  3. Final Answer:

    5px -> Option B
  4. Quick Check:

    More specific selector wins = 5px [OK]
Hint: More specific selector overrides * [OK]
Common Mistakes:
  • Assuming * always overrides other selectors
  • Adding padding values instead of overriding
  • Ignoring CSS specificity rules
4. You wrote this CSS:
* { font-size: 16px }

But the browser ignores it and uses default font sizes. What is the likely error?
medium
A. CSS file not linked properly
B. Universal selector cannot set font size
C. Font size must be in quotes
D. Missing semicolon after 16px

Solution

  1. Step 1: Check CSS syntax

    The CSS rule * { font-size: 16px } is syntactically valid; a trailing semicolon is optional at the end of a rule.
  2. Step 2: Understand common issues

    If valid CSS is ignored by the browser, the stylesheet is likely not linked properly in the HTML with a <link rel="stylesheet" href="..."> tag.
  3. Final Answer:

    CSS file not linked properly -> Option A
  4. Quick Check:

    No styles applied? Check <link> tag [OK]
Hint: If * styles not applying, verify CSS file link [OK]
Common Mistakes:
  • Thinking universal selector can't style fonts
  • Using quotes around numeric values
  • Ignoring CSS file linking issues
5. You want to reset margin and padding for all elements but keep links (<a>) with no margin and 5px padding. Which CSS achieves this?
hard
A. * { margin: 0; padding: 0; } a { padding: 5px; }
B. a { margin: 10px; padding: 5px; } * { margin: 0; padding: 0; }
C. * { margin: 0; padding: 5px; } a { margin: 0; padding: 0; }
D. * { margin: 0; padding: 0; a { padding: 5px; } }

Solution

  1. Step 1: Reset all elements margin and padding

    The universal selector * { margin: 0; padding: 0; } sets margin and padding to zero for all elements.
  2. Step 2: Override padding for links

    The selector a { padding: 5px; } specifically sets padding to 5px for all <a> elements, overriding the universal selector.
  3. Final Answer:

    * { margin: 0; padding: 0; } a { padding: 5px; } -> Option A
  4. Quick Check:

    Specific selector overrides universal [OK]
Hint: Use * first, then override with specific selector [OK]
Common Mistakes:
  • Placing universal selector after specific selector
  • Nesting selectors incorrectly
  • Setting wrong padding values