Reputation: 1109
This is driving me insane.
No matter what I try, Internet Explorer is switching to IE7 Standards Document Mode. I have tried stripping my code back to nothing to try and get it to behave, using HTML5 boilet plate AND HTML5 reset (whose own site goes into Quirks Mode).
I have also added the meta tag that is supposed to force IE to it's latest version no matter what, but all that has done is made my mark-up invalid according to W3C.
This is what I have; what am I missing?
<!doctype html>
<!--[if IE 7 ]> <html class="ie7> <![endif]-->
<!--[if IE 8 ]> <html class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<p>Test text</p>
</body>
</html>
EDIT
I have a solution found via a suggestion below. The suggestion didn't work, but it did lead me to an answer. This might not be 100% suitable for everyone since it imposes a class on the body
tag rather than html
, but it works for me and seems to work for IE.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="css/style.css">
</head>
<!--[if IE 7 ]> <body class="ie7> <![endif]-->
<!--[if IE 8 ]> <body class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><body><!--<![endif]-->
<p>Test text</p>
</body>
</html>
Upvotes: 21
Views: 21604
Reputation: 1596
Sometimes IE behaves extra badly on intranet sites, forcing them into compatibility mode regardless of the <meta>
line in the head. However, you can make the server send a header to brute-force IE to behave by adding the following to the web config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Upvotes: 8
Reputation: 1109
I have a solution found via an earlier suggestion. The suggestion didn't work, but it did lead me to an answer. This might not be 100% suitable for everyone since it imposes a class on the body
tag rather than html
, but it works for me and seems to work for IE.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="css/style.css">
</head>
<!--[if IE 7 ]> <body class="ie7> <![endif]-->
<!--[if IE 8 ]> <body class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><body><!--<![endif]-->
<p>Test text</p>
</body>
</html>
EDIT
I have actually stopped using the above and now add my IE specific classes to the html
element, as suggested in HTML5BP.
Also note that you may want to remove chrome=1
from the meta tag as Chrome Frame is being killed off soon. No harm in keeping it though for those rare cases where someone is still using it though.
Another thing to check which I don't think has been mentioned is the status of what is probably the most irritating setting in IE - 'Display intranet sites in Compatibility View'. If you run a testing server with a name like http://mytestserver:8888
IE will think it's an intranet site and switch modes regardless of what you do in your document head.
This setting is enabled in my company's group policy as our ancient sharepoint intranet actually relies on it. Great for the old crap, but terrible for the new stuff which is actually going to adhere to standards.
Switch that f***er off in Tools > Compatibility View Settings
and be prepared to switch to it manually if you have any legacy sites.
Upvotes: 10
Reputation: 9402
I've used the following to fix this problem when IE8 was rendering in IE7 Standards document mode despite all else I tried. Add this just before the doctype declaration:
<!--[if IE ]><![endif]-->
So the resulting HTML would look something like this:
<!--[if IE ]><![endif]-->
<!doctype html>
<!--[if IE 7]><html class="lt-ie8"><![endif]-->
<!--[if IE 8]><html class="lt-ie9"><![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->
<head>
<title>Page title here</title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
Someone else will have to comment on why this seems to work--it is a mystery to me.
Upvotes: 0
Reputation: 31
Keep the
<!doctype html>
to be the first line of the page source, and the X-UA-Compatible meta tag must be tilte tag's adjacent next sibling.
<meta charset="utf-8">
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Upvotes: 3
Reputation: 86
The link that Stuart posted worked for me as it related to the local website being set for compatibility mode. Once I removed the intranet website from the compatibility mode list, then the page went to the proper IE=9 mode according to the meta tag.
Upvotes: 0
Reputation: 2993
I was also having this issue with ie10 forcing IE7 standards mode for sites on localhost. Adding/using a virtualhost including a dot in its name (local.x) solved the issue.
Upvotes: 2
Reputation: 23208
from this thread
The X-UA-Compatible meta tag must appear straight after the title in the element. No other meta tags, css links and js scripts calls can be placed before it.
Upvotes: 10