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-filterYESAlways pair with -webkit-backdrop-filter
background-clip: textYESFor gradient text technique only
text-fill-colorYESPart of gradient text — no standard alternative
-webkit-line-clampYESMulti-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.