So the battle for hearts and minds continues as A List Apart publishes its third and fourth articles on Microsoft’s proposed version targeting for IE8 and beyond. That’s four articles on the same subject, so it must be important right?
It is important, but the issue is also pretty simple. There seems to be little doubt that browser version targeting is a good thing. What’s more, Microsoft’s proposal of using a meta tag or an HTTP header is valid, pretty inoffensive, and easily extended to other browser manufacturers.
So the fight is all down to the default behaviour. Should the web page tell the browser that it’s the latest and greatest in order to receive the most up-to-date rendering; or should the browser automatically assume the web page is the latest and greatest and only render otherwise if told to do so?
It’s absolutely counter to my instinct as a Web Standards advocate and practitioner, but I think logic indicates that the default behaviour proposed by Microsoft is actually right. Firstly it seems reasonable that web pages should tell the browser how they should be rendered (and behave). By the same note, browsers should assume that any web page which doesn’t lay claim to a browser version should be rendered as per an old browser. The logic here being that web pages without browser versioning will include the vast majority of older web pages and so these should be rendered as per an older browser. Of course not all web pages without versioning will be ‘old’ web pages, but the chances are they can safely be treated as such. So, yes, I disagree with m’learned colleague Jeremy Keith in that I believe the default behaviour proposed by Microsoft is logical and should stand.
Assuming that browser versioning does go ahead as proposed, it brings up an interesting question for standards-loving agencies such as us at Clearleft: what version do we include in the pages and templates we create? Do we go with IE=edge, which is ‘discouraged’ despite it being the current behaviour with which we deal? Or do we play it safe at stick in IE=8 or whatever the latest browser was on which the page was tested?
Personally I think we’ll go with IE=edge because we often include subtle visual enhancements not available to all browsers (progressive enhancement). For example text-shadow is only supported by Safari at the time of writing but it’s proposed in CSS 3 so it’s likely to be supported by IE sometime in the future, and I’d like to give IE users the opportunity to see our lovely text shadows as soon as their browser supports it. The only was we could achieve this would be to use using IE=edge.
Which leads me to a final thought. Pity the Internet Explorer developers working their arses off to add great standards support to their browser, only for that work to manifest itself on but a tiny proportion of web sites. Bit of thankless job, if you ask me, but I hope they stick at it.
Ximo wrote:
Your (and Zeldman’s) reasoning is logically sound, although my heart is with the opposing view.
One question though: With the history of bugs and quirks introduced in every new version of IE, won’t IE=edge be a risky choice? It might work fine in IE8, but what about IE10 a few years later?
Matt Wilcox wrote:
I’ve thought the same as you since the articles first came out. The default behavior can’t be anything else without rending the entire operation completely pointless. OK, so it means sacrificing progressive enhancement on IE, but the whole thing makes sense, and it’s not like any of us can’t opt in to the new shiny.
I hadn’t thought about the poor IE team though. That’s a tough break for them.
Val wrote:
Wow, just dead wrong, I think. Here’s the clue:
“...browsers should assume that any web page which doesn’t lay claim to a browser version should be rendered as per an old browser.”
So, which browser should that be? Practical issues like market share aside, there are many old browsers, and many pages that work in some of them but not in others – and what works changed between one (version of an) old browser and another.
Seems much more clear that without any specific instructions like a DOCTYPE, unspecific HTML should be rendered according to the HTML standard.
Yes, it sucks that some old stuff will break. But the solution to that is to keep the old browser around until the site in question is fixed or becomes useless. We all do that – we used to have a copy of IE on the Mac for those few sites that wouldn’t work without it. At work, we’re solidly standardized on IE6, and won’t even upgrade to IE7, much less 8, because we have a bunch of apps from small vendors that can barely create proper HTML of any flavor.
Instead of forcing IE-everything into legacy behavior by default, Microsoft could have spent their time making it easy to have more than one version of IE installed and running (for values of easy that don’t involve a Virtual Machine ;-) That would solve the problem – but wouldn’t further their aims at world domination. I just don’t see why we need to help them in their misguided efforts.
Cliff Gerrish wrote:
How about a default of “edge -1” Meaning whatever the latest browser version is, subtract one from the version number. So for MSIE 8, the default is 7, but for MSIE 9, the default is 8.
The problem is making it static – then you get a bunch of pages stuck in time.
Dusan Smolnikar wrote:
Surely Microsoft wants everybody to upgrade to the newest version of software as soon as possible, and get rid of buggy and non-secure old versions.
To an average user, who has no idea as to why sites render differently in new versions, this would discourage him from upgrading. For Microsoft this means they would have to keep supporting the older versions of software. And by turning programers into supporting old software they would lose workforce in development of the new versions, which would mean less progress.
So I’m all for version targeting in IE. Make the changes transparent for an average Joe, but keep them in the code so in the future developers can use them. This will also mean no time and money will be spent on fixing websites that have already been working, as some have complained with IE7.
Peter Asquith wrote:
I agree with the need for a solution – Microsoft’s position is difficult. I agree with the mechanism of the solution. In fact, I can see, if widely adopted in other browsers, that this could be a very handy mechanism for managing site upgrades when new browsers are released. However, I can’t agree with the default behaviour.
My logic follows: There’s a finite number of web pages that need to render according to an old IE version. There’s an infinite number of pages that have been, and will continue to be, created that meet, or at least aim to meet, the specifications of HTML and CSS. These pages render accurately in a wide range of modern browsers. The weight of page creation will tend towards markup and presentation that conforms to the most recent interpretation of the “standards”. It will tend away from pages that were written for a specific release of IE.
In this light, doesn’t it seem reasonable for a sysadmin of a site that is broken in this wide range of modern browsers (but is unbroken in a single version of IE – and represents an increasingly minority proportion of the web) to add a header directive on the server?
Miguel wrote:
I totally agree with you that the behaviour Microsoft proposes makes a lot of sense in this case. Just thought you’d like to know that you are not alone! Ha ha.
In all seriousness though, if they we wouldn’t use this behaviour, wouldn’t it mean that a whole bunch of old website, which are not necessary kept up-to-date weekly, would be rendered using whatever new engine and therefore would potentially be broken because they’ve been using hacks from the past (for IE7, etc)?
Anyways, I am not sure if I am making any sense here, but I know I agree with this. Hopefully MS will make a sound decision on this. Thanks for sharing your thoughts.
Brent Miller wrote:
As you say, “it seems reasonable that web pages should tell the browser how they should be rendered (and behave).” Absolutely. That’s why we have doctypes. If the browser isn’t upholding its end of the contract, then the browser is broken. IE5 was broken. IE6 is broken. And IE7 is still broken, although far less than its predecessors.
I absolutely agree that MS is in a bad position, but I don’t have that much sympathy for them; they put themselves there by not building browsers up to spec and then letting IE6 languish for years.
To reverse this situation, somebody is going to have to bite the bullet. Who is it going to be?
1) Microsoft
2) Developers who code badly
3) Developers who code well
Of the three, I’d rather it be 1 and 2 than 1 and 3. Please don’t penalize those of us who have been doing things well in favor of those who haven’t.
This bullet will definitely need biting. The longer we wait to do it, the worse it’s going to be. Waiting as long as MS has to build a working browser (which I’ll believe when I see) has only made the bullet bigger than it needed to be. Defaulting to IE7 rendering is putting the bullet off for a long time: it’s going to be HUGE. What do we do in 2020 when one of the dominant browsers is still rendering with a broken engine? That’s really not an option for our industry. We don’t see too many cars built with Model T technology anymore – and there’s a reason for that.
Nate Klaiber wrote:
My only question is this: How many patches will they provide before they just FIX the problem at hand in the first place? I am not saying it’s bad – but conditional comments, now this – why not spend energies just fixing the darn thing instead of patching it like this?
Stuart Langridge wrote:
Do you trust Microsoft to not say “ah, people are using IE=edge even though we told them not to; IE9 will break those sites; therefore you now have to have IE=edge and Really-IE=edge set to get IE9’s rendering”?
I don’t think I do. If I can see them commit to the position that “if you use IE=edge and your site breaks in IE9, that’s just tough”, i.e., they are explicitly prepared to break sites if the site designer said “I don’t mind being broken”, then I’d be much more keen. But I do not believe they’ll do that, for that would be against the “don’t Break The Web” over-exaggerated religion.
Joel Goldstick wrote:
Why not make it user controlled? Put a button or menu item in the browser. If the site looks weird, back off to a previous version.
Antonio Bueno wrote:
At the beginning I could not understand the logic behind the default behaviour. But then I though: “What if the meta switch was to use Gecko or Kestrel as a rendering engine in IE8?” I’d be delighted for that to happen (and I doubt I’d be alone).
From that point the question (for me) is: “Will the (new?) IE8 rendering engine be as good as Gecko or Kestrel?” (Note that I’m not asking for a better one) I wish it will be, but MS history suggest otherwise.
Jake Smith wrote:
Microsoft has made their bed, but we all have to lie in it.
While I too am against the version targeting because of current practices, the idea of trying to fix it by version targeting will lead to tears.
It’ll never work correctly due to the sheer amount of old browsers and badly coded, proprietary tagged pages that are the legacy of Microsoft’s bullish dominance of the old browser wars.
I too would prefer to use the IE=edge tag, if I have to tag at all, but I am not envious of the Microsoft programmers, who as someone put it, “Are running as fast as they can to stand still” (http://www.b-list.org/weblog/2007/dec/17/standards/)
Joe Clark wrote:
text-shadow is also in Opera 9.5, ostensibly. Any WebKit browser also gets it.