Menu Search
Jump to the content X X

Today, too many websites are still inaccessible. In our new book Inclusive Design Patterns, we explore how to craft flexible front-end design patterns and make future-proof and accessible interfaces without extra effort. Hardcover, 312 pages. Get the book now →

How To Support Internet Explorer and Still Be Cutting Edge

Everyone has been going on about how we should use CSS3 more and all of the possibilities and flexibility that come with it, but that we should still consider IE6 and other troubling browsers.

But how do we actually do that? How do we create websites that are up to date with the latest coding techniques but that are also usable for people experiencing the Web on Internet Explorer?

In this article, we’ll see what measures we can take to provide a good experience for IE users but keep moving on. We will mainly focus on the CSS part but will also provide some handy tips on dealing with overall markup.

Also consider our previous articles:

The Content Is What Matters Link

Jeffrey Zeldman once said4, “content precedes design. Design in the absence of content is not design; it’s decoration.” In fact, the most important thing on your website is the content. This is what everyone should be able to get, no matter which browser they’re using.

Using CSS3 doesn’t mean we should forget about older browsers and lock visitors out of our websites. We should check our websites on browsers as old as maybe IE5 or 5.5 and make sure the content is accessible for every user.

This doesn’t mean we should quit the fight to eradicate IE6 either. We can still follow the example of websites such as Twitter and YouTube and add visible but not dead-end warnings to upgrade.

YouTube's IE6 warning message5

Twitter IE6 warning message6
YouTube and Twitter warning messages for IE6 users

And remember: each profession has the duty to educate those who are not familiar with their trade. We must explain how stuff works to our clients without being patronizing. It’s not their job to know this after all.

Basics First: The Three Layers (HTML, CSS and JavaScript) Link

When we create a new website, we do it in steps. First, the HTML. We will mark up our content in the most semantic way possible: titles should be marked up as headings, lists as lists, etc. The bottom line is that our content should be perfectly readable and its hierarchy understandable with only this part of the coding done. The content has to make sense, and we must never forget that this layer is the foundation on which we will develop all the rest.

Secondly, we add the style, the CSS. In this step, we add the visual elements to our design; we give the website its personality. We also make sure that the content is accessible without the third layer.

And finally, the third layer, the JavaScript, the behavior. Here we add the interactive elements to our website. We make the experience richer using things such as tabs, sliders, lightboxes, etc.

With this path in mind, our content will always be accessible in any browser. We make sure that older browsers get only the basic content and disregard more complex layers that could hamper their users’ access to it.

Adding Basic Style For Old Browsers Link

So our semantic markup is done, and we know that some browsers cannot render CSS properly or at all, such as browsers before Netscape 4.0 or Internet Explorer 4.0. For those browsers, displaying the bare content—the naked version—is the safest choice.

Some people say that, today, there is no need to do this. But if you’d like to make sure that these people on these browsers don’t run into any problems, just link to a basic version of your CSS with the link tag and then to the more advanced file with the @import declaration:

<link rel="stylesheet" type="text/css" href="basic.css" media="screen" />
<style type="text/css">
	@import "advanced.css";

You can also skip the link tag altogether and leave them with a text-only version of the website:

<style type="text/css">
	@import "style.css";

Embracing The Differences Link

Now let’s deal with the black sheep of commonly used browsers: Internet Explorer 6.

You’ve got two options:

  1. If only a negligible percentage of your audience is browsing the Web with it and you don’t want to throw your client’s money down the drain, you could create a basic style sheet for IE6.
  2. Acknowledge that your design will not look the same in IE6, and make decisions on what to leave out: which IE6 quirks will you fix and which will you leave be.

If you choose to feed IE6 a basic style sheet, the best course is to use the Universal IE6 CSS7. Your website will have virtually no design, but this style sheet makes sure that the body has a readable width, that heading sizes are reasonable and that the content has some nice white space surrounding it.

In your HTML, you will have to add some conditional comments to link to the style sheet and to hide the other sheets from IE6:

	<link rel="stylesheet" type="text/css" href="styles.css" media="screen" />

In the first conditional comment, we link our main style sheet to all browsers that are not IE6 (hence the “!”). And in the second comment, we link directly to the Universal IE6 style sheet on Google’s repository (and save some bandwidth at that!).

Make Photoshop Faster on Firefox8

Make Photoshop Faster on IE69
The Make Photoshop Faster website uses the Universal style sheet for IE6

If you prefer the second route, you must be prepared to embrace the differences between browser renderings. Know that some details of your design will not be visible or render as nicely in IE6, or even IE7 and 8. And don’t be upset about it.

Resets Link

As you know, all browsers have different default styles for the various HTML elements. This is why using a reset style sheet is wise, so that we can start with a clean slate.

Plenty of style sheets are around on the Internet for anyone’s benefit. The one that is usually considered the standard and most often implemented is Eric Meyer’s reset10, or some variation of it.

Eric Meyer's CSS Reset11

With the advent of HTML5, including the new HTML elements in your CSS reset is also a good idea. html5doctor12 provides a good update to Eric Meyer’s reset that you can use for free in your projects.

html5doctor's CSS reset13

You can use a CSS reset either by embedding it at the top of your own CSS file, or, if you like to keep things tidy, by importing it from your style sheet:

@import url(reset.css);

CSS Differences That Could Break Your Layout Link

If you decide to use the Universal IE6 CSS, you’ve just saved yourself many a headache. But don’t let the shiny logos of IE7 and 8 fool you: if you intend to use the latest CSS techniques, you still have to do a lot to cater to them.

IE6 and PNG support Link

We all know that PNG images with alpha-channel transparency (i.e. the good-looking ones) don’t play nice on IE6. We’ve all seen that annoying light-blue background on our carefully crafted logos.

You can choose from among a few workarounds to this problem so that IE6 can display PNGs. Each is fairly quick to implement and does make a difference in the overall design.

Here are a few of the best scripts and techniques for dealing with this issue:

That said, we should mention that more and more Web designers nowadays opt not to fix the PNG issue on IE6:

31three website on IE619
The newly revamped 31three website doesn’t apply any fix for PNGs in IE6.

Advanced Selectors Link

These selectors are almost the definition of smooth CSS development by themselves, because they hold the true power of CSS and can make our lives as developers so much easier (and our budgets so much lower!).

The decision of whether to make them work on Internet Explorer or not depends largely on what you are using them for.

For example, if you are using them to add extra detail to your designs, such as small icons to represent different file types, it won’t make a lot of difference if the icons don’t display on some browsers. Visitors to your website won’t know what they are missing, and the links will still be perfectly usable.

These selectors are also widely used to enhance typographic detail, and lack of support for them won’t be a big issue for your designs.

Comparison of the rendering of the Hicksdesign website on Firefox and IE20
Hicksdesign uses advanced selectors for numbered bullets in its navigation menu, and they simply aren’t visible for IE6 users

Which browsers don’t support this? Internet Explorer 6 will not see styles applied with virtually any advanced selector. It only really understands simple descendant combinators and classes and ID selectors. It even struggles with multiple classes applied to the same element! It’s not to be trusted.

IE7 ignores the :lang selector and pseudo-elements, such as :first-line, :first-letter, :before and :after. But it does understand all attribute selectors.

Also, none of the Internet Explorer releases to date supports the :target pseudo-class, UI element states pseudo-classes (:enabled, :disabled, etc.), structural pseudo-classes (like :nth-child, :nth-of-type or :first-child) or the negation pseudo-element.

Box-Sizing Link

Box-sizing allows you to tell the browser how you want it to calculate the width and height of an element.

For example, if you set the box-sizing property to border-box, then the paddings and borders will be subtracted from the specified width and height of that element, instead of added to them (as stated in the W3C’s specifications for the standard box model).

This can make it easier to control the size of elements and to make sizes behave the same across different browsers.

If you believe that your website renders in IE in quirks mode (and therefore renders with the non-standard box model), you may want to use this property in your style sheets to make all browsers uniform.

Make sure to add the standard property and the vendor-specific ones:

div {
	-moz-box-sizing: border-box;
	-webkit-box-sizing: border-box;
	box-sizing: border-box;

Which browsers don’t support this? If the website is rendered in quirks mode, IE6 will render using the non-standard box model, so it will already be rendering as if it had the “border-box” property on. You can force IE6 to render in quirks mode. There are a few ways of doing this; one way is by adding an HTML comment before the doctype declaration of your HTML pages.

Media Queries Link

Media queries aren’t fully supported by most browsers, and Internet Explorer doesn’t support them at all.

However, because they are mostly used to call variations of style sheets for handheld devices, such as the iPhone, this fact is almost irrelevant in that case.

If you use media queries mainly to cater to the iPhone, the fact that they are not supported by other browsers makes no difference anyway, and their use is highly encouraged.

If you are using them to create a more flexible website design that adapts to changes in, say, window size, then know that only Safari, Firefox and Opera support them (partially).

Which browsers don’t support this? Internet Explorer and, in some instances, Safari and Firefox.

CSS Differences That Are Mainly Decorative Link

These are the issues that are best left alone for non-supporting browsers, because the lack of support won’t be a problem for users who want to access your content (i.e. your pages won’t break).

This has to do mainly with some of the new CSS3 properties, such as border-radius, text-shadow and border-image.

Border-radius Link

This is the first CSS3 property that designers learned to live without on Internet Explorer, because of its clearly decorative nature. With border-radius, you are better off not trying to replicate it on IE at all. Just let it be.

Gowalla's homepage on Firefox

Gowalla's homepage on IE6
Gowalla uses border-radius on its website, but Internet Explorer users don’t see it.

Which browsers don’t support this? All Internet Explorer browsers. Opera, too.

Font-face Link

Font-face can be used with IE, but you may need to use Microsoft’s Web Embedding Fonts tool21 to convert your fonts to EOT.

Microsoft Web Embedding Fonts Tool (WEFT)22

If you are including both font formats in your website, your CSS will probably follow this structure:

@font-face {
	  font-family: "Delicious";
	  src: url("Delicious-Roman.eot");
	  src: local("Delicious"), url("Delicious-Roman.otf") format("opentype");

Usually, a browser not being able to render the first font in a font stack shouldn’t break the website or hamper in any way the user’s access to the content. So, the recommendation here is to carefully ponder which fonts you want the visitor to see if their browser doesn’t support font-face and has to rely on the fonts you have declared in the style sheet.

Elliot Jay Stock's website on Firefox23

Elliot Jay Stock's website on IE24
A browser that doesn’t support font-face simplys show the next available font in the font stack

Which browsers don’t support this? If you use the EOT version for IE, even IE users will see the correct fonts.

Multiple Columns Link

Rather than create multiple floating DIVs to organize your text into columns, you can create columns automatically by using the multiple column properties in CSS3. But this means that some browsers won’t see them.

Multiple columns are better used for text, not layout. If you use them on your website, the worst thing that will happen is that visitors see a wider line of text.

If you’re dealing only with short text, than why not go ahead and use it and finish the job in two minutes? But if it would seriously impair the readability of your content, then your best option is to stick to the regular DIVs to create columns.

Multiple columns on Firefox25

Multiple columns not rendered on IE26
Here, the introductory text is displayed using CSS multiple columns. IE users will see normal single-column text.

Which browsers don’t support this? Internet Explorer and Opera.

RGBa and Opacity Link

RGBa colors are bliss. Rather than use hard-to-update PNG files for backgrounds, you can create the same transparency effect with CSS. But IE doesn’t get it. IE6 doesn’t even understand the PNGs to begin with.

It’s safe to assume that these transparencies won’t usually be applied to elements that cover important content; in which case, the content shouldn’t be behind another element in the first place.

So, when using RGBa colors, make sure to include a normal color before the RBGa one, so that browsers that don’t understand it will still have a fallback color:

div {
	background-color:  #FFFFFF;
	background-color: rgba(255,255,255,.5);

Opacity can be applied to IE using the opacity filter, but IE filters work only on elements that have layout:

div {
	filter: alpha(opacity = 50);

Also, remember that opacity works differently than RGBa colors: all of the elements enclosed in this DIV will be rendered transparent.

24ways website on FIrefox27

24ways website on IE828
24ways uses RGBa colors and alpha transparency heavily, even though Internet Explorer doesn’t render the transparency.

Which browsers don’t support this? Every browser sees opacity, provided that filters are applied. IE doesn’t see RGBa colors.

Text-shadow Link

This is an easy call: ignore it. Assuming that the text is still readable, trying to recreate text-shadow any other way than with CSS is a Herculean task. So, unless missing text-shadow would seriously reduce the clarity of a large amount of text, or a small amount (in which case you could use image replacement), you’re better off without it.

Brokers Direct website on Firefox with text-shadow29

Brokers Direct website on IE with no text-shadow30
The white text-shadow on Brokers Direct’s website is not visible on Internet Explorer.

Which browsers don’t support this? Internet Explorer.

Border-image Link

The border-image property gives us an easy way to add beautiful borders to our elements that would otherwise be a nightmare to implement (and that in most instances we would probably choose not to implement).

Because the property is almost always decorative, the best option would be to include a fallback for browsers that don’t support it using the normal border property, and adding the enhanced CSS after it for other browsers.

SpoonGraphics blog on Firefox with border-image31

SpoonGraphics blog on IE with no border-image32
SpoonGraphics uses border-image, but it is not visible in Internet Explorer.

Which browsers don’t support this? Answering the opposite question is easier: for now, only Safari and Firefox support this feature.

Multiple Backgrounds Link

This feature depends on the design of your website, but in a lot of cases, the lack of a second or even third background will not affect the readability of the page.

Multiple backgrounds in CSS saves us a lot of the development headaches that were caused by having to use different HTML hooks and nested elements to achieve the same effect. So, if you opt to use multiple backgrounds, you are already choosing which browsers to display the results to.

If all users seeing all of the backgrounds is important to you, then do it the old way and apply different backgrounds to different elements.

If not, your best bet is to give a fallback to browsers that don’t support it: pick the background that you feel is most important or that best fits the overall design and add that property before the multiple backgrounds one. Browsers that don’t support it will ignore the second property.

Which browsers don’t support this? Internet Explorer, Opera and Firefox up until version 3.5 (version 3.6 is currently in beta, but it supports multiple backgrounds!).

Tools Link

Modernizr Link

Modernizr homepage33

Modernizr34 is a little JavaScript that is quite useful if you are using advanced CSS properties. It adds some classes to the html tag in your pages, to see whether a browser supports certain CSS features, such as:

  • @font-face
  • rgba()
  • hsla()
  • border-image
  • border-radius
  • box-shadow
  • Multiple backgrounds
  • opacity
  • CSS animations
  • CSS columns
  • CSS gradients
  • CSS reflections
  • CSS 2-D transforms
  • CSS 3-D transforms
  • CSS transitions

Take border-image. When a page loads in a browser that supports the property, it output borderimage. If the browser doesn’t support it, it outputs no-borderimage.

Modernizr doesn’t enable these features in browsers that don’t support them, but rather gives you important information (in the form of classes) that you can use in your style sheets to apply distinct selectors and properties to elements.

IE-7.js Link

IE-7.js35 makes IE5+ behave like IE8, supporting more advanced selectors and fixing some rendering bugs. Here’s an excerpt from the creator’s website36:

  • Added support for advanced selectors: >, + and ~; attribute selectors; :hover, :active, :focus for all elements; :first-child, :last-child, :only-child, :nth-child, :nth-last-child; :checked, :disabled, :enabled; :empty, :not; :before, :after, :content; :lang.
  • It uses the standard box model in standards and quirks mode.
  • Supports min- and max-width and -height.
  • Supports PNG alpha transparency (but doesn’t solve the PNG problem for repeated or positioned backgrounds).

The disadvantage of this technique is that JavaScript has to be enabled for it to work, which is unfortunate. So, you will have to be careful to give users who have disabled JavaScript an acceptable version of your website, especially if some behaviors will not work or, worse, if the lack of JavaScript will break your layout.

Examples Link

As they say it, this is easier said than done. So, we’ll show that these ideas can actually be put into practice with some nice examples. These are websites we’ve come across that render differently in different browsers. In some cases, the differences are quite noticeable, but the developers have chosen to embrace those differences.

Twitter Link

Twitter on Firefox37
Twitter in Firefox

Twitter on IE638
Twitter in IE6

WordPress Link

WordPress on Firefox39
WordPress in Firefox

WordPress on IE640
WordPress in IE6

WWF Link

WWF on Firefox41
WWF in Firefox

WWF on IE642
WWF in IE6

Conclusion Link

Remember that the purpose of this post is not to teach you how to hack IE or deal with its quirks or even how to achieve effects by resorting to JavaScript. Rather, it is to explain how we can design and build websites knowing that differences will arise between browsers.

You won’t see people rioting over the lack of rounded corners on Twitter or WordPress; they aren’t even upset by it, because those differences don’t fundamentally break the websites. People can still use the websites and have a good experience. In most cases, they won’t even notice it!

All we have to do now is explain this politely but seriously to our clients, so that we can all contribute to the ever-evolving Web.

Further Reading And References Link

Do your designs have a support for older versions of Internet Explorer (<= 7.0)? Link

You may be interested in the following related posts:


Footnotes Link

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53

↑ Back to top Tweet itShare on Facebook


Inayaili de León is a London-based Portuguese web designer, specialist in cross-browser, semantic HTML and CSS, and clean, functional design. She writes frequently for well-known online and print publications and also on her own web design blog, Web Designer Notebook. In May 2011, she published a book, Pro CSS for High Traffic Websites, and she speaks frequently at local and international web conferences and meetups. She is currently working as a web designer on Canonical's Design team.

  1. 1

    Ignoring the IE older than version 7 isn’t a very professional solution. The IE6 will be supported until 2014 and therefore I prefer solutions like the IE7.js. Smart and easy to implement.

  2. 2

    Paul Sanduleac

    December 1, 2009 6:05 am

    Yeah, sure….my grandma still uses Internet Explorer, i’m using Google Chrome. No offense :))

  3. 3

    Great post. I always display an “Upgrade your Browser” on my sites.

  4. 4

    Thanks for the post! Working with IE is tough, but I think this does a great job. Thanks for the explanations about the CSS3 elements as well! Definitely bookmarked!

  5. 5

    I’m curious if we still have this discussion over a couple years. But it’s a sad one.

  6. 6


    Very useful article much as I loath IE6 you still have to work with it, your hints and tips will help with some of the pain.



  7. 7

    its good to educate end users and its tricky that we have to work more to accommodate IE users. but still, this is life.

  8. 8

    Jordan Koschei

    December 1, 2009 6:25 am

    Best post I’ve read in a while! I’d never even heard of the Universal IE6 stylesheet.

  9. 9

    Johan de Jong

    December 1, 2009 6:27 am

    Also something to consider is the use of HTML5 and still support all browser (even IE6!) is to use the following script:

    Although it’s javascript (very small; 350 bytes) it will help you to create real cutting edge templates. And with use of the tips described in this post you won’t even see the difference.

  10. 10

    great article

  11. 11

    Useful post, to those saying it is the older generation that uses IE, this is not true – a lot of workplaces, Universities, colleges etc use IE as a default browser so unless you don’t mind excluding these viewers (and potential customers) you sadly can’t afford to ignore IE altogether.

  12. 12

    Nice Post :)
    Keep it up :)

  13. 13

    Great post! and i do ignore IE users on my site! it helps filter out some time wasters and not over fill my work schedule to allow quality customers, :P

  14. 14

    Until developers and designer stop kowtowing to IE6’s woeful inadequacies, there will be no incentive for those that still have it installed to upgrade or change. The one and only thing you should ever have on your site that is IE6 specific is a warning about upgrading or changing browsers. I don’t listen to music on 8 track because something better came along. I don’t use IE for the same reason.

  15. 15

    A nice article, but still there’s an assumption that people choose IE6, or rather that they have a choice to upgrade it.

    Some of the sites we work on have 35-40% of IE6 users, the second largest percentage after IE7. When you dig deeper, the vast majority of those visits come from large corporations. A lot of our clients also work for large organisations who have an IT policy to have Windows XP and IE6 on every machine, simply to allow them to easily support said machines. Often they have Intranets optimised to work in IE6 only. It might be wrong, and it might be counterproductive, but that’s the way it is, and no amount of patronising “upgrade your browser” messages will make any difference. I’m hoping that the launch of Windows 7 will see more IT departments consider upgrading their software, but I won’t hold my breath.

    The rest of the IE6 users out there probably don’t know what a web browser is, or why they should upgrade, so please consider these users more than you consider your peers.

  16. 16

    Ikram Hakimi, aww, you really sounded devastated there *giggles*

    Anyway, this is a very optimistic post. I enjoy reading it! I definitely agree on this line particularly, “..those differences don’t fundamentally break the websites. People can still use the websites and have a good experience..”

  17. 17

    Great article!

    I agree with James M.

    And showing messages to IE users will not help since a lot of theme can’t upgrade. It’s just annoying for the user.

  18. 18

    Very nice article.. I have great respect for… you guys are the best! (I like that you are found of wordpress :P )

  19. 19

    IE6 is still part of the webworld. So unfortunately we have to support this oldie. Even if we have to waste up to one day for the hacks sometimes.

    I think it’s a good idea to advise the end users to upgrade their browsers, but many of them do not have the permissions to install programs on their computers ’cause they work for a greedy company who will not pay money to someone upgrading all their browsers.

  20. 20

    if people would stop bending over backwards for IE6 the problem would just go away.

    i understand why people are pigeonholed into an IE6 environment, but why do i have to suffer because of someone else’s shitty planning and shortcutting? why am i putting in hours of extra work and stress because someone else was too bad/cheap to do things properly?

    if people would just stop getting pushed around by this problem it would go away pretty fast. yes, it’s expensive and time consuming to redo any enterprise software that’s reliant on IE6, but the company did that to themselves. they should deal with it, not me.

    you want to be cutting edge? get involved with technology that will let you. want to stay with ie6? you get work of 2001 calibre to go with it.


↑ Back to top