CSS Vendor Prefixes

By  on  

What are the Vendor Prefixes?

Vendor prefixes are small strings prepended to CSS properties that will ensure that the property will only be valid and rendered within the given browser engine.  Chrome and Safari both use the WebKit rendering engine, Firefox uses Gecko, Internet Explorer uses Trident, and Opera uses Presto.  Browser vendors generally don't implement other vendor prefixes but due to the popularity of the WebKit-based mobile browser, vendors like Opera and Firefox have also implemented WebKit's vendor prefixes on their mobile offerings.

Vendors use the following prefixes:

  • WebKit:  -webkit
  • Firefox:  -moz
  • Opera:  -o
  • Internet Explorer:  -ms

Why Vendor Prefixes?

There are a few reasons browser vendors use prefixes:

  • To implement proprietary CSS properties that have no working standard and may never become standard
  • To provide early implementations of standard properties
  • To provide an alternate syntax than the standard

Other reasons may apply but these are the main reasons.

Which Properties Use, or Have Used, Vendor Prefixes?

Prominent vendor-prefixed properties include:

  • @keyframes
  • transition and transform properties   (transition-property, transition-duration, transition-timing-function, transition-delay)
  • animation properties (animation-name, animation-duration, animation-timing-function, animation-delay)
  • border-radius
  • box-shadow
  • backface-visibility
  • column properties
  • flex properties
  • perspective properties

There have been and will be many more prefixed CSS properties!

How are Vendor Prefixes Used?

When using browser-prefixed properties, it's best to place the browser-prefixed properties first, then the standard property name and value.  For example:

/* use of keyframes */
@-webkit-keyframes fadeIn {
	0% { opacity: 0; } 100% { opacity: 0; }
}
@-moz-keyframes fadeIn {
	0% { opacity: 0; } 100% { opacity: 0; }
}
@keyframes fadeIn {
	0% { opacity: 0; } 100% { opacity: 0; }
}

/* use of basic properties */
.myClass {
	-webkit-animation-name: fadeIn;
	-moz-animation-name: fadeIn;
	animation-name: fadeIn;
}

If the standard is known, that rule is used; if unknown the rule is tossed out and the vendor-prefixed property is used!

Recent Features

  • By
    5 More HTML5 APIs You Didn’t Know Existed

    The HTML5 revolution has provided us some awesome JavaScript and HTML APIs.  Some are APIs we knew we've needed for years, others are cutting edge mobile and desktop helpers.  Regardless of API strength or purpose, anything to help us better do our job is a...

  • By
    Welcome to My New Office

    My first professional web development was at a small print shop where I sat in a windowless cubical all day. I suffered that boxed in environment for almost five years before I was able to find a remote job where I worked from home. The first...

Incredible Demos

  • By
    Hot Effect: MooTools Drag Opacity

    As you should already know, the best visual features of a website are usually held within the most subtle of details. One simple trick that usually makes a big different is the use of opacity and fading. Another awesome MooTools functionality is...

  • By
    Scroll IFRAMEs on iOS

    For the longest time, developers were frustrated by elements with overflow not being scrollable within the page of iOS Safari.  For my blog it was particularly frustrating because I display my demos in sandboxed IFRAMEs on top of the article itself, so as to not affect my site's...

Discussion

  1. oh i hate those things
    can’t just every browser unite under one vendor prefix

    shoot !

  2. Kaylea

    Hi David!

    I used the flip card code on a project and I love it.

    There is a pronounced stutter in Firefox, chrome, Safari and ie even after I used the ie adapted code. Do you know why this could be happening? I cleared the cache and went through with a fine tooth comb.

    My other option would be to use a flip on click animation, but yours is easier in the long run. Thank you for your help.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!