CSS Vendor Prefixes: What's Still Needed in 2026
Vendor prefixes were the browser's way of implementing experimental CSS before the spec was finalized. Most are now obsolete — but a small critical set are still required in 2026, especially for Safari compatibility.
1. What Vendor Prefixes Are
/* The pattern: -[vendor]- before the property name */
-webkit- /* Chrome, Safari, iOS, most Chromium browsers */
-moz- /* Firefox (mostly historical) */
-ms- /* Internet Explorer / old Edge (historical) */
-o- /* Old Opera (historical) */
/* Example: before backdrop-filter was finalized */
-webkit-backdrop-filter: blur(20px); /* Required for Safari */
backdrop-filter: blur(20px); /* Standard */
2. What You STILL Need in 2026
This is the short, honest list of prefixes that are STILL required today:
-webkit-backdrop-filter — Required for Safari
/* backdrop-filter is NOT prefixed in Chrome/Firefox but IS in Safari */
.c-card--glass {
-webkit-backdrop-filter: blur(20px) saturate(1.8); /* Safari */
backdrop-filter: blur(20px) saturate(1.8); /* Chrome, Firefox, Edge */
}
/* Without -webkit-, glass effect silently fails in Safari — no error */
-webkit-text-fill-color — Gradient text in Safari
/* Gradient text technique */
.c-heading-gradient {
background: linear-gradient(135deg, #6c63ff, #a855f7);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent; /* Required — "color: transparent" is unreliable */
background-clip: text;
color: transparent; /* Fallback */
}
-webkit-overflow-scrolling — iOS Momentum Scroll (Legacy)
/* Only needed for iOS 12 and below — rare in 2026 */
.c-carousel__track {
overflow-x: auto;
-webkit-overflow-scrolling: touch; /* Momentum scroll on old iOS — safe to include */
}
-webkit-line-clamp — Multi-Line Text Truncation
/* The standard line-clamp is part of overflow module, still needs -webkit- in practice */
.c-card__title {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
/* There is no non-prefixed equivalent that works consistently yet */
}
3. What You Do NOT Need in 2026
These prefixes were common in 2012–2018 tutorials. They are now fully obsolete:
/* ❌ Don't write these anymore — browsers handle unprefixed */
/* Flexbox (was experimental in 2012) */
-webkit-display: flex; /* ❌ Remove */
-ms-flexbox: flex; /* ❌ Remove — IE 11 is dead */
display: flex; /* ✅ This is enough */
/* Transforms */
-webkit-transform: rotate(45deg); /* ❌ Remove */
-ms-transform: rotate(45deg); /* ❌ Remove */
transform: rotate(45deg); /* ✅ This is enough */
/* Transitions */
-webkit-transition: all 0.2s; /* ❌ Remove */
-moz-transition: all 0.2s; /* ❌ Remove */
transition: all 0.2s; /* ✅ This is enough */
/* Border radius */
-webkit-border-radius: 8px; /* ❌ Remove */
-moz-border-radius: 8px; /* ❌ Remove */
border-radius: 8px; /* ✅ This is enough */
/* Gradient */
-webkit-linear-gradient(#fff, #000); /* ❌ Remove */
linear-gradient(#fff, #000); /* ✅ This is enough */
/* User-select */
-webkit-user-select: none; /* ❌ No longer required (Chrome 54+, Safari 16+) */
user-select: none; /* ✅ This is enough in 2026 */
/* Animation / keyframes */
-webkit-animation: slide 0.3s ease; /* ❌ Remove */
animation: slide 0.3s ease; /* ✅ This is enough */
@-webkit-keyframes slide { } /* ❌ Remove */
@keyframes slide { } /* ✅ This is enough */
4. Autoprefixer: The Automated Solution
Instead of manually writing prefixes, use Autoprefixer — it reads your CSS and adds exactly the prefixes needed for your browser target list:
# Install Autoprefixer (as part of PostCSS)
npm install -D postcss autoprefixer
# postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')
]
}
# package.json — define browser targets
{
"browserslist": [
"last 2 versions",
"not dead",
"> 0.5%"
]
}
/* You write: */
.c-card--glass {
backdrop-filter: blur(20px);
}
/* Autoprefixer outputs: */
.c-card--glass {
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px);
}
[!TIP] If you use Vite, Next.js, or Create React App — Autoprefixer is already included. You don't need to do anything. It runs automatically.
5. Quick Reference: 2026 Prefix Status
| Property | -webkit- needed? | Notes |
|---|---|---|
backdrop-filter | ✅ YES | Always pair with -webkit-backdrop-filter |
background-clip: text | ✅ YES | For gradient text technique only |
text-fill-color | ✅ YES | Part of gradient text — no standard alternative |
-webkit-line-clamp | ✅ YES | Multi-line truncation — no unprefixed equivalent |
transform | ❌ No | Fully standard since 2015 |
transition | ❌ No | Fully standard since 2015 |
animation / @keyframes | ❌ No | Fully standard since 2015 |
border-radius | ❌ No | Fully standard since 2011 |
box-shadow | ❌ No | Fully standard |
display: flex | ❌ No | Fully standard since 2015 |
display: grid | ❌ No | Fully standard since 2017 |
filter (blur, brightness) | ❌ No | Fully standard |
user-select | ❌ No | Unprefixed works since 2022 |
appearance | ❌ No | Unprefixed works since 2023 |
scroll-snap-type | ❌ No | Unprefixed works in all modern browsers |
6. Checking Browser Support
Before adding any prefix:
1. Check caniuse.com: search the property → look at "Usage notes" tab
2. Look for an orange "Partial support" note — often indicates prefix needed
3. MDN Web Docs: property page → "Browser compatibility" table
→ Any cell with "prefix" note = prefix needed for that browser
Tools:
caniuse.com — the definitive browser support database
autoprefixer.github.io — paste CSS, see what autoprefixer would produce
browserslist.dev — test your browserslist query against real browser data
7. AI and Vendor Prefixes
AI tools (Claude, ChatGPT) sometimes add unnecessary vendor prefixes because they were trained on older CSS tutorials. Know when to correct:
/* AI might output (outdated): */
-webkit-transform: translateY(-4px);
-moz-transform: translateY(-4px);
-ms-transform: translateY(-4px);
transform: translateY(-4px);
/* Correct it to: */
transform: translateY(-4px); /* The 3 prefixed versions are unnecessary in 2026 */
/* But AI is CORRECT to write: */
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px); /* This prefix IS still needed */
AI prompt addition to prevent unnecessary prefixes:
Do not add vendor prefixes for: transform, transition, animation,
display:flex, display:grid, border-radius, box-shadow, or user-select.
DO add -webkit- prefix for: backdrop-filter and background-clip:text only.