PIE aims to drastically shorten that timeframe, by implementing a simple shim to make CSS3 “just work” in IE. Our goals are:
-
Be simple to use
Applying PIE is extremely simple; in many cases the only thing you have to do is add the behavior property to your CSS.
-
Be a CSS-only solution
Many of the current solutions for implementing CSS3 features like border-radius are implemented as JavaScript libraries and require the author to write JavaScript to invoke them. That is less than ideal because it requires the CSS author to also know how to write JS, and it makes development slower and less maintainable because your styling code is scattered between CSS and JS files. PIE works entirely within the stylesheet, so you only write CSS and it’s all in a single place.
-
Be seamless to the CSS author
There have been several articles and resources in recent months which show ways that you can make IE “mimic” certain CSS3 features, for example using IE filters to fake box-shadow, or jQuery plugins to implement rounded corners. The problem with these solutions is that they require a lot of IE-specific code on top of your real CSS3, increasing your development time and the size of your CSS files. PIE on the other hand uses your CSS3 directly whenever possible; you simply write real CSS3, and PIE handles it seamlessly.
PIE handles attaching, detaching, and updating automatically without any intervention from the author. This means that, unlike some other solutions, PIE does not require you to explicitly initialize elements when they are added to or removed from the document via script, and does not require any sort of “update” method to be called when an element’s position, size, or styles are modified on the fly.
Another aspect of PIE’s seamlessness is that it should be fully compatible with any JavaScript library the site author might choose to use. You can create elements and assign CSS3 styles to them in jQuery or YUI or MooTools or any other library and PIE will automatically apply itself. Also, PIE’s objects are completely self-contained except for a single global
PIEobject, so there’s no chance that it will override objects or functions from any other JS code. -
Be as compliant with the CSS3 specs as possible
PIE aims to be a true CSS3 implementation for those features it supports, complying with the current spec drafts as closely as possible. The goal is to allow authors to write a single set of CSS3 code and have it “just work” between browsers.
-
Be as performant as possible
If it makes the browser feel sluggish (more so than IE normally does, that is) then it’s useless. PIE was architected with performance in mind from the very beginning:
- Rendering elements are only updated when they need to be.
- CSS property values are only parsed when they have changed.
- Internal objects are created lazily, and cached when appropriate.
- The behavior script is written with file size in mind, and the most advanced JS compression tools available are used to minimize the file size, so the initial download is as fast as possible.
