Skip to main content

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✅ YESAlways pair with -webkit-backdrop-filter
background-clip: text✅ YESFor gradient text technique only
text-fill-color✅ YESPart of gradient text — no standard alternative
-webkit-line-clamp✅ YESMulti-line truncation — no unprefixed equivalent
transform❌ NoFully standard since 2015
transition❌ NoFully standard since 2015
animation / @keyframes❌ NoFully standard since 2015
border-radius❌ NoFully standard since 2011
box-shadow❌ NoFully standard
display: flex❌ NoFully standard since 2015
display: grid❌ NoFully standard since 2017
filter (blur, brightness)❌ NoFully standard
user-select❌ NoUnprefixed works since 2022
appearance❌ NoUnprefixed works since 2023
scroll-snap-type❌ NoUnprefixed 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.