Leave it to PPK to come out with a bold statement like, "CSS vendor prefixes considered harmful". Moreso,
It’s time to abolish all vendor prefixes. They’ve become solutions for which there is no problem, and they are actively harming web standards.
The problem is that they are necessary. Look at Safari's implementation of
border-radius compared to the rest. I still can't remember if it's
border-top-left-radius. If they had gone without the vendor prefix, they'd be in quite the pickle. Or worse yet, web developers would be.
The vendor prefix does two things:
- It allows browser developers to test new functionality without fear of a changing spec.
- It warns web developers that things are in flux.
In essence, a browser does not support a CSS feature until it drops the vendor prefix. In essence, for
border-radius, the only browsers to support it are Opera 10.50 and the upcoming Internet Explorer 9. Any other browser is just dipping their foot into the stream to test the waters.
As web developers, we make the choice to implement a design with or without vendor prefixes and their existence does not mean that we have to use them. If you consider them harmful, as PPK does, then don't use them. Rest assured that eventually all browsers will eventually come around and your CSS will remain pristine.
But we're an impatient bunch, we want to use the latest and greatest features that the browsers send our way. The price for our impatience is a few extra lines of CSS.
Dealing with Backwards Compatibility
Sadly, as CSS gets more complex, even vendor prefixes can't save us from dealing with backwards compatibility. I've lamented previously on the multiple background specification and how a background declaration ends up being declared multiple times—and vendor prefixes aren't to blame.
This is a difficult problem to solve for browser developers and I don't have any answers. The other day on Twitter I commented on how I'd love a
size: 20px 50px; shortcut for specifying width and height. I said it knowing that it's too late for this. Every browser still needs a width and height declaration to be specified and we'd be left specifying width, height and size. That isn't saving me any time or effort.
As browser developers continue to add new features to the CSS specification, we will continually and increasingly have to deal with the fallout of transition. That fallout means vendor prefixes and repetitive declarations.
I predict we'll see more CSS preprocessors like SASS that take a clean file and parses it for specific scenarios, saving us from these headache of vendor prefixes and background compatibility issues.
Either way, it's a small price to pay.