While Opera Presto is well capable of showing standards-compliant pages correctly, not all Web pages are compliant. To be able to both display all standards-compliant pages and the other pages as well, three different display modes are present in Opera: Standards Mode (following Web standards as close as possible), Almost Standards Mode (same as Standards Mode except vertical alignment of images in table cells) and Quirks Mode (essentially an Internet Explorer 5.5 compatible mode). Which of the modes is selected depends on which Document Type Declaration (DOCTYPE) the page is using.
Internet Explorer (from 6.0 on for Windows and 5.0 on for Mac) and Mozilla/Netscape (from versions 0.6 and 6.0 respectively) also use DOCTYPE switches. Opera Presto uses similar rules as IE6 for Windows to determine whether to enter Standards Mode or Quirks Mode.
The following table represents DOCTYPEs triggering standards compliant behavior in Opera 7 and later, IE6 for Windows, and Netscape 7.
|Document type||Example Document Type Declaration||URL present||URL absent|
 When XHTML is delivered as
 Only Opera recognizes the WML doctypes
|HTML 2.0||<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">||Quirks||Quirks|
|HTML 3.0||<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN//">||Quirks||Quirks|
|HTML 3.2||<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">||Quirks||Quirks|
|HTML 4.0 Frameset||<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd">||Quirks||Quirks|
|HTML 4.0 Transitional||<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">||Quirks||Quirks|
|HTML 4.0 Strict||<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">||Standards||Standards|
|HTML 4.01 Transitional Frameset||<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">||Almost Standards||Quirks|
|HTML 4.01 Transitional||<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">||Almost Standards||Quirks|
|HTML 4.01 Strict||<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">||Standards||Standards|
|XHTML 1.0 Strict||<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Strict 1.0//EN" "http://www.w3.org/TR/xhtml/DTD/xhtml1-strict.dtd">||Standards ||Standards |
|XHTML 1.0 Transitional||<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Transitional 1.0//EN" "http://www.w3.org/TR/xhtml/DTD/xhtml1-transltional.dtd">||Almost Standards ||Almost Standards |
|XHTML 1.0 Frameset||<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Strict 1.0//EN" "http://www.w3.org/TR/xhtml/DTD/xhtml1-frameset.dtd">||Almost Standards ||Almost Standards |
|WML 2.0||<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD WML 2.0//EN" "http://www.wapforum.org/DTD/wml20.dtd">||Standards ||Standards |
document.compatMode. When a page is rendered
according to Quirks Mode, this property is set to
BackCompat, in Almost Standards Mode and Standards Mode it
is set to
Quirks Mode enables Opera to display existing invalid pages. If you make pages from scratch, your best option is to make
them standards-compliant and use a DOCTYPE to ensure Standards Mode, but see the following
topic. You may have to add workarounds.
If you have existing pages and they are only tested with Netscape 4 and IE, going for Quirks Mode may be a safer bet initially. If after testing a page looks good in these browsers and in Opera in Standards Mode as well, you may safely change to Standards Mode.
There will not be a complete list of rendering differences of Opera in Quirks Mode and in Standards Mode. This will continously change with whatever standards divergences are common at any given time. The rendering in Standards Mode will always follow the standards. Below are some of the most important differences. They are mostly in one of two categories:
Unit-less numbers in CSS (e.g.
width: 300) are interpreted as pixels in Quirks Mode and ignored in Standards
Spaces between the number and unit (e.g.
width: 45 em;) is not valid CSS. Opera allows this in Quirks Mode
and ignores properties with invalid lengths in Standards Mode.
A class or id must begin with a letter or an underscore, not with a number (e.g.
<div class="2">). Opera
ignores such selectors in Standards Mode, but allows class names starting with a number in Quirks Mode.
heightattribute in table rows (7.0-7.11)
<tr> element doesn't have a
height attribute. Opera 7.0-7.11 only allowed this
attribute in Quirks Mode, Opera 7.2 and later also allows
height in Standards Mode.
In Quirks Mode, Opera will expand the block element to fit the content. In Standards Mode, Opera honours the height and
applies the style
overflow:visible if nothing else is specified.
A bug IE/Win and Netscape 4 share is that CSS properties aren't inherited into tables. Opera emulates this bug in Quirks Mode, but not in Standards Mode.
In Internet Explorer/Windows (except IE6 in standards compliant mode)
font-size: small is interpreted as the
initial font size. Opera in Quirks Mode emulates this behavior, but uses
font-size: medium in Standards Mode.
This means that the absolute font size keywords are
one size larger in Quirks Mode.
In Strict mode,
class="CLASS" is different from
class="class", and the CSS selector
will only select the former. In Quirks Mode, case doesn't matter and
*.CLASS will match both. Likewise,
id="id" is different from
id="ID" in Standards Mode, but not in Quirks Mode.
In quirks mode, the CSS properties
margin-right is subtracted from the width of
containing box when computing percentage widths, not so in Standards Mode.
Normally the DOCTYPE Switch determines which mode is used, but you can set Opera to always use Standards Mode or always use Quirks Mode by setting one of these lines in the opera6.ini file:
If you design Web pages, setting Opera to never using Quirks Mode will help you see how a page will look like in a browser not supporting DOCTYPE switching.
WML 2.0 uses a special form for DOCTYPE switching. In most respects WML 2.0 is XHTML Basic with some WML extensions and it uses the same namespace as XHTML Basic. In a few cases the WML behavior differs from XHTML, such as the handling of WML variables and $ escaping. See the WML 2.0 Specification for details.
Need help? Hit F1 anytime while using Opera to access our online help files, or go here.