Stylesheets per page

How many stylesheets the page loads and their over-the-wire weight.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · All devices field outcomes
Metric LCP INP CLS
1

At a glance the headline numbers for Stylesheets per page

How many stylesheets the page loads and their over-the-wire weight.

77 KB
Median (p50)
172,628 sites
153 KB
p75
1.2 MB
p99
Long tail

The typical page loads stylesheets weighing 77 KB.

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
2

Stylesheets per page — size the value at each percentile across all sites

14 KB
p10
38 KB
p25
77 KB
p50
153 KB
p75
275 KB
p90
1.2 MB
p99

Stylesheets per page — size 77 KB. p75 153 KB. p99 1.2 MB. computed

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
3

Why this matters for the Core Web Vitals, and where to start fixing it

Every blocking stylesheet is a render gate. The browser paints nothing until the last one arrives, so the count multiplies the risk: more requests on the critical path, more chances that one of them is the slow one.

Few files beat many here. The request side costs more than the byte side: one round trip on a cold connection outweighs a lot of kilobytes on a warm one. Bundle the critical CSS into as few files as the architecture allows.

Related signals Script loading mix → Font source → Image format mix → Iframe loading → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured
Live queries (3) — admin only
Query #1: 27.8 ms
SELECT COUNT(*) AS count,
            quantile_disc(m.stylesheets.total.n, 0.10) AS p10,
            quantile_disc(m.stylesheets.total.n, 0.25) AS p25,
            quantile_disc(m.stylesheets.total.n, 0.50) AS p50,
            quantile_disc(m.stylesheets.total.n, 0.75) AS p75,
            quantile_disc(m.stylesheets.total.n, 0.90) AS p90,
            quantile_disc(m.stylesheets.total.n, 0.99) AS p99
            FROM sites WHERE m.stylesheets.total.n IS NOT NULL;
Query #2: 382.3 ms
SELECT COUNT(*) AS count,
            quantile_disc(m.stylesheets.total.size, 0.10) AS p10,
            quantile_disc(m.stylesheets.total.size, 0.25) AS p25,
            quantile_disc(m.stylesheets.total.size, 0.50) AS p50,
            quantile_disc(m.stylesheets.total.size, 0.75) AS p75,
            quantile_disc(m.stylesheets.total.size, 0.90) AS p90,
            quantile_disc(m.stylesheets.total.size, 0.99) AS p99
            FROM sites WHERE m.stylesheets.total.size IS NOT NULL;
Query #3: 15.3 ms
SELECT CASE WHEN m.stylesheets.total.size >= 0 AND m.stylesheets.total.size < 50 THEN 0 WHEN m.stylesheets.total.size >= 50 AND m.stylesheets.total.size < 100 THEN 1 WHEN m.stylesheets.total.size >= 100 AND m.stylesheets.total.size < 150 THEN 2 WHEN m.stylesheets.total.size >= 150 AND m.stylesheets.total.size < 200 THEN 3 WHEN m.stylesheets.total.size >= 200 AND m.stylesheets.total.size < 250 THEN 4 WHEN m.stylesheets.total.size >= 250 AND m.stylesheets.total.size < 300 THEN 5 WHEN m.stylesheets.total.size >= 300 THEN 6 END AS bucket_idx, COUNT(*) AS n,
            quantile_disc(crux."all".inp, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."all".inp IS NOT NULL AND crux."all".inp <= 200) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".inp IS NOT NULL), 0) AS good_pct
            FROM sites WHERE m.stylesheets.total.size IS NOT NULL GROUP BY bucket_idx;
JSON file lookups (4)
20260625/meta.json 0.04 ms
20260625/types.json 0.71 ms
20260625/loaf-scripts.json 0.48 ms
20260625/menu.json 0.17 ms