Windows Internet Explorer 8 is the most standards-compliant
version ever, with full support for Cascading Style Sheets (CSS) Level 2.1,
enhanced support for CSS 3, improved support for HTML 4.01, and strong support
for HTML 5. Because of the improved support of these HTML elements, Web
developers can now build more expressive and accessible HTML markup. This
document will discuss the changes to behaviors in Windows Internet Explorer 8
regarding HTML and CSS support and how these changes affect the Web developer.
HTML Support
To help developers take full advantage of the elements that HTML 4.01 offers, and to better provide
the semantic meaning intended by Web developers, Windows Internet Explorer has
upgraded support for the following presentational elements:
The P element: Represents a logical paragraph.
The OBJECT element: May represent any object, including
images.
Automatically Closing P Elements
Unclosed P elements
are now automatically closed when followed by TABLE, FORM, NOFRAMES,
or NOSCRIPT
elements.
<html>
<head>
<title>Simple P Element Closing Example</title>
<meta http-equiv="X-UA-Compatible" content="IE8"/>
</head>
<body>
<p>This is the first paragraph</p>
<p style="margin-left:30px">This is another paragraph. <!-- P not closed -->
<table border="1px" cellpadding="2px">
<tr><td>This is a table cell.</td></tr>
</table>
<p>This is a third paragraph.</p>
</body>
</html>
In this example, the second P element is not closed. When
viewed with Windows Internet Explorer 7, the TABLE element is displayed as a
child element of the second P element. The second P element is indented from
the left margin of the window by 30 pixels. Because the TABLE is a child element
of the P element, it is also indented from the left margin of the window. When
viewed with Windows Internet Explorer 8 in the default mode, however, the TABLE
element is aligned to the left margin. Because Windows Internet Explorer 8
automatically closes unclosed P elements before displaying TABLE elements, the
TABLE element is a child of the element.
Using OBJECT Elements to Display Images
Windows Internet Explorer 8 now makes it possible to use the
OBJECT
element to display images. When displaying images with this element in
older versions of the browser, it used to automatically add scrollbars and
borders to the image, which frequently caused the image to display improperly.
Now with Windows Internet Explorer 8, the OBJECT element
displays images as if they were embedded using IMG
elements. To use this behavior in your Web pages, set the OBJECT element's DATA
attribute to the URL of the image. You can also embed a dataURL in the DATA
attribute. For more information, see Data
Binding.
To make Windows Internet Explorer load images into OBJECT
elements using the behavior of older versions, either choose an older compatibility mode for
your Web page or set the OBJECT element's TYPE
attribute to text/html.
Improved Object Fallback
When an OBJECT element fails to load a resource, content
inside the OBJECT element is rendered instead. This is called object fallback
because it allows you to define a strategy that Windows Internet Explorer uses
to "fall back" to when something goes wrong.
Windows Internet Explorer 7 introduced the ability to nest
OBJECT elements; that is, to use multiple OBJECT elements to create a richer
fallback strategy, as shown in the following example.
<object data="..." type="silverlight" >
<object data="..." type="windows media file">
<object data="..." type="image/png">
Wow! Everything went wrong. Sorry.
</object>
</object>
<object>
This example uses three OBJECT elements to define an object
fallback strategy. It first tries to load a Silverlight application. If that
fails, a Microsoft Windows Media file is requested. If the Windows Media file
cannot be loaded, the example loads an image.
If you viewed this example using Windows Internet Explorer
7, you would see the image, but there would be only one OBJECT element in the
page's Document
Object Model (DOM), because Windows Internet Explorer 7 does not create
OBJECT elements for objects that fail to load.
If you viewed the example using Windows Internet Explorer 8,
you would see the image with three OBJECT elements in the page's DOM. Because
they failed to load, the first two OBJECT elements would be inactive. You
could, however, use JavaScript to search for them.
Note: Inactive objects cannot be reactivated without
refreshing the page or using JavaScript to load new objects.
Windows Internet Explorer 8 uses this new fallback behavior
only for communication related errors; that is, it only occurs when a load
request generates a client (4xx) or a server (5xx) HTTP error response. If the
request fails for other reasons, such as malformed content or a corrupted
ActiveX control, the original fallback behavior occurs. For more information
regarding HTTP response codes, see HTTP
Response Headers.
HTML 5 / AJAX Enhancements
HTML 5 enhancements with Windows Internet Explorer 8
includes AJAX Navigations, DOM Storage, Cross-Document Messaging (XDM), and
Connectivity Events. These were developed in close coordination with the W3C HTML 5.0 Working Draft. For
more information, see AJAX - Introducing
AJAX Navigations, Introduction to DOM
Storage, AJAX -
XMLHttpRequest Enhancements in Internet Explorer 8, and AJAX - Connectivity
Enhancements in Internet Explorer 8.
AJAX Navigations
One of the significant benefits of using AJAX is the ability
to update page content without traditional page navigations. The inability to
save the state of a page and alert its components when this happens can be
problematic in some scenarios, because components like the address bar and the
back and forward buttons only update after page navigation. As a result, the
browser doesn’t save AJAX content changes on the travelog or update components
like the address bar. This may confuse end-users who wonder why the browser
seems stuck on old content. In IE8 mode, Windows Internet Explorer treats window.location.hash
updates like navigations and saves the previous document URL.
DOM Storage
Today, Web pages use the document.cookie
property to store data on the local machine. Cookies are limited in capability
because sites can only store 50 key/value pairs per domain. Furthermore, the
cookie programming model is cumbersome and requires parsing the entire cookie
string for data. The W3C’s HTML 5 DOM Storage objects provide a much simpler
global and session storage model for key/value pair string data. Sites can
store data for the life of a tab or until the Web site or user clears the data.
Each domain, including its sub-domains, has 10 MB of local
storage space. This helps reduce the possibility of cross-domain attacks.
Similarly, each browser tab has its own session store. DOM Storage is just a
mechanism for Web applications to simply store data—there is no database behind
it. For example, there is no way to do complex queries, such as search by
value.
Cross-Document Messaging (XDM)
The browser’s site origin policy blocks Web pages from
getting data from other domains. This means that different domains on a single
Web page can’t communicate with each other to provide a richer experience. Web
sites work around this policy by creating nested IFrames and retrieving data
transmitted through URLs. Another way Web sites work around this policy is by
directly hosting script and other resource files from other domains. This
second workaround allows for only one-way communication. It is also a security
risk because embedded script and resources run with the same privileges as the
host Web site and have access to the user’s data such as that stored in
cookies.
XDM provides a postMessage method off of the window object,
which allows different domains to communicate with each other given mutual
consent. XDM provides a much simpler, more performance-driven mechanism for
two-way cross-domain communication than the workarounds noted above.
Connectivity Events
Windows Internet Explorer 8 allows Web pages to detect when
the browser is online or offline through the window.navigator.onLine
property and online/offline events. With this information, you can enable rich
offline scenarios using the DOM Storage object. For example, if a user is
logged onto his Live mail page and loses connectivity, the page could always
prompt the user to save a draft in the DOM store and allow the user to continue
editing the mail. When connectivity is restored, the script can retrieve the
e-mail and send it to the server.
For more information, see AJAX - Connectivity
Enhancements in Internet Explorer 8.
CSS Support
Support for the CSS standard has steadily improved with each
new version of Windows Internet Explorer, culminating in full support for CSS
2.1. The following tables show, at-a-glance, the various improved CSS
properties supported in Windows Internet Explorer 8 as compared to Windows
Internet Explorer 7. These tables do not show a comprehensive list of CSS
properties supported by Windows Internet Explorer 8; they show only the CSS
properties that either were not supported or were only partially supported in
Windows Internet Explorer 7 but that are now supported in Windows Internet
Explorer 8. For more information regarding CSS compatibility in Windows
Internet Explorer and expanded CSS element support tables, see CSS
Compatibility and Internet Explorer.
A value of "Partial" in a cell indicates that that
feature is only partially implemented in that version of Windows Internet
Explorer. For more information, click the link to view that feature's reference
page on MSDN.
Pseudo-classes
CSS 2.1 | | IE 7.0 | IE 8.0 |
:active { sRules } | :active | Partial | Yes |
:after { sRules } | :after | No | Yes |
:before { sRules } | :before | No | Yes |
:focus { sRules } | :focus | No | Yes |
:lang(C) { sRules } | :lang() | No | Yes |
Lists
Color and Background
Font and Text
Generated Content
CSS 2.1 | | IE 7.0 | IE 8.0 |
{ content : sContent } | content | No | Yes |
{ counter-increment : sCounter } | counter-increment | No | Yes |
{ counter-reset : sCounter } | counter-reset | No | Yes |
{ quotes : sQuotes } | quotes | No | Yes |
Border and Layout
CSS 2.1 | | IE 7.0 | IE 8.0 |
{ border-collapse : sCollapse } | border-collapse | Partial | Yes |
{ border-spacing : sSpacing } | border-spacing | No | Yes |
{ border-style : sStyle } | border-style | Partial | Yes |
{ caption-side : sLocation } | caption-side | No | Yes |
{ empty-cells : sEmptyCells } | empty-cells | Partial | Yes |
Positioning
CSS 2.1 | | IE 7.0 | IE 8.0 |
{ bottom : sBottom } | bottom | Partial | Yes |
{ display : sDisplay } | display | Partial | Yes |
{ left : sPosition } | left | Partial | Yes |
{ right : sPosition } | right | Partial | Yes |
{ top : sTop } | top | Partial | Yes |
{ z-index : vOrder } | z-index | Partial | Yes |
Printing
User Interface
CSS 2.1 | | IE 7.0 | IE 8.0 |
{ outline : sOutline } | outline | No | Yes |
{ outline-color : sColor } | outline-color | No | Yes |
{ outline-style : sStyle } | outline-style | No | Yes |
{ outline-width : sWidth } | outline-width | No | Yes |
CSS 3 | | IE 7.0 | IE 8.0 |
{ box-sizing : sSizing } | box-sizing | No | Yes |
Functions
CSS 2.1 | IE 7.0 | IE 8.0 |
counter() | No | Yes |
attr() | No | Yes |
Keywords
CSS 2.1 | IE 7.0 | IE 8.0 |
Inherit | No | Yes |
For more information regarding CSS compatibility in Windows
Internet Explorer and expanded support tables, see CSS
Compatibility and Internet Explorer.