So far we have discussed two methods of fixing IE's rendering issues with web pages; we're about to add one more. Each method is broadly associated with the severity of issues that IE has in displaying a site:

Low to mild problems in IE
Typified by: a few elements displayed out of place when the page is rendered in IE, with perhaps several CSS effects not being supported; a best-case scenario that is usually gained by crafting valid code and occasional testing in IE during development.

Solution: IE CSS hacks added directly to the existing stylesheet.

Moderate severity
Typified by: multiple elements displayed incorrectly in IE; usually due to extensive use of CSS.

Solution: Conditional comments to introduce a limited set of IE-only CSS fixes (see below).

High severity
Typified by: the page being unreadable or unusable in IE, usually due to high use of CSS or HTML5.
Solution: clean up your code and use a JavaScript shim to fix the problems IE has with your page.

Note that the appropriate solution depends upon the degree of the problem; just as a doctor should not over-prescribe antibiotics, it is a waste of resources to load in a 60K of JavaScript to fix problems that could be solved by adding just a few lines of CSS.

If a website uses a great deal of CSS, it makes sense to create compatibility with IE via a CSS3 JavaScript shim. But if your site only uses a few CSS3 values, loading 20K of JavaScript to make IE work is overkill, and a significant waste of resources.

Microsoft has long supported its own way of creating many visual effects that are now featured in CSS, ever since IE 5.5. The problem is that the filters are rather long, complex, proprietary (supported only in IE) and somewhat difficult to understand; I find it easiest to use various tools to convert CSS into MS-specific filters, and then call those generated values with conditional comments.

Broadly speaking, there are three methods for bringing Internet Explorer 6 – 8 up to speed with modern web standards:

    Replace the rendering engine in IE with something better, such as ChromeFrame, that understands both CSS3 and HTML5. (It can be difficult to convince clients and visitors to a site to do this, however).

    If your page is written in HTML, try to work in IE-equivalents to CSS by using -ms- vendor prefix selectors for IE9, and / or work in older Microsoft proprietary equivalents to transforms and gradients, into the CSS.

    "Shim" the web page with JavaScript that will allow IE6 – 8 to understand CSS2 & 3 selectors, properties and values.