|
|||||||
|
|||||||
|
Section A - Bugs relating to attaching style to pages (7 bugs).
Section B - Bugs relating to associating style with elements (22 bugs).
Section C - Bugs relating to key concepts (8 bugs).
Section D - Bugs with units (1 bug).
Section E - Color and background bugs (10 bugs).
Section H - Margin and padding bugs (6 bugs)
Section I - Border bugs (7 bugs)Section J - Width and height bugs (4 bugs)
Section K - Float bugs (5 bugs)
Section L - Display and white-space bugs (3 bugs)
Section M - Table bugs (11 bugs)
Section O - Form bugs (6 bugs)
Section P - List item bugs (10 bugs)
Section Q - Error correction bugs (43 bugs)
Total bugs = 7 + 22 + 7 + 1 + 11 + 15 + 20 + 6 + 7 + 4 + 5 + 3 + 11 + 4 + 6 + 10 + 44 = 183.
These are ignored on inline elements.
These are ignored on inline elements (note that they only have an effect on replaced elements).
Opera clips margin-right declarations to avoid them overflowing the viewport.
If a negative margin-left declaration is made on an element, it will result in the element inheriting the width value for its parent, and padding-right adjusted so as to make the outer width of the element that of the containing block. For example:
<div style="margin-left: 50%; background: green">
<div style="margin-left: -100%; background: red">
a b c d e f g h i j k l m n o p q r s t u v w x y z
a b c d e f g h i j k l m n o p q r s t u v w x y z
a b c d e f g h i j k l m n o p q r s t u v w x y z
a b c d e f g h i j k l m n o p q r s t u v w x y z
</div>
</div>
Would result in the calculated value that results from the width: 50% implied by the ancestor DIV's margin-left: 50% being inherited, and padding-right being set to such a value as to make the inner DIV's outer width that of the ancestor.
If you set auto on margin-right or margin-left (or both) and width: auto, the outer width of the element (i.e., the width from margin-left to margin-right) is set to 100%. For example, <IMG style="margin-left: auto; margin-right: 10%"> results in the margin-right being honored and a width of 90% being given, where correct would be to use the intrinsic width and then calculated margin-left based on this - margin-left/right: auto shouldn't affect the width of images, but in Opera it does. The way to avoid this is to avoid auto on replaced elements, or to specify an explicit width in CSS (NB not HTML - Opera overrides this with the CSS).
There is a very similar bug on tables; see below.
Padding is not applied to empty elements unless they are given a height (i.e., using the height property).
When specified on inline elements, borders increase the line box height if they would otherwise result in overlap, which is incorrect - they should simply be placed over the line box. For example, given P {line-height: 20px; font-size: 16px} SPAN {border-top: 3px}, the border will increase the line box to 21 pixels in Opera since it would otherwise overlap, whereas P {line-height: 20px; font-size: 16px} SPAN {border-top: 2px} doesn't extend the line box because the top of the border exactly coincides with the top of the line box. There is a demonstration in one of RichInStyle.com's test pages.
Borders are not applied to empty elements unless they are given a height (i.e., using the height property).
Borders are destroyed on images, being applied from the center of the image but without adjusting the size of the image. For example, given <IMG width="50" style="border: 50px solid">, the border would be applied around the center of the image and then the image would be rendered on top of that. In addition, since the width of the element is less than the width of the border, there would be a 25 pixel of border on each side, which would overlap with adjacent elements. There is a demonstration in one of RichInStyle.com's test pages.
Borders are not usable on HTML or BODY, destroying the whole page by causing massive overflow and ugly compression of content. There is a demonstration in one of RichInStyle.com's test pages.
If the document is less tall than the canvas, Opera applies the border around the canvas, which is incorrect since the height should be that of the content.
The hidden border style (and indeed all other styles that are unbeknownst to Opera - all future border styles) is destroyed by applying the border as a transparent border, overriding the border color.
Opera does not allow you to specify transparent borders.
Opera clips width declarations to avoid them overflowing the viewport.
When specified on images, the CSS width property transforms them into block elements (see a demonstration in one of RichInStyle.com's test pages).
If you set a height declaration on a containing block, then it will be extended if its content overflows it, rather than allowing the content to overflow. For example:
<div style="height: 1px; border-bottom: solid">
<div>
a b c d e f g h i j k l m n o p q r s t u v w x y z a b c d e f g h i j k l m n o p q r s t u v w x
y z a b c d e f g h i j k l m n o p q r s t u v w x y z a b c d e f g h i j k l m n o p q r s t u v
w x y z
</div> </div>
Would result in the border-bottom being placed at the bottom of the content, rather than 1px down as it should be.
Opera ignores height on BODY and HTML.
If you follow a floated block element that is the first element on the page with a non-floated block element, severe problems will be induced. For example:
<P style="float: left; width: 20%">
A run-in heading
</P>
<P>
And some text
</P>
That would result in 'And some text' overlapping the 'A run-in heading', instead of wrapping round it as it should. This means that you should always have content before such elements - o.k. is:
<BODY>
<HR> <-- Or any element -->
<H1 style="float: left; width: 20%">
A run-in heading
</H1>
<P>
And some text
</P>
but bad is:
<BODY>
<H1 style="float: left; width: 20%">
A run-in heading
</H1>
<P>
And some text
</P>
Even though the CSS spec states that floats adjacent to current floats that overflow their containing block should be placed below the float, Opera doesn't follow this, but instead allows them to overflow the containing block. For example:
<DIV style="width: 30%; float: left">
</DIV>
<DIV style="width: 30%; float: left">
</DIV>
<DIV style="width: 30%; float: left">
</DIV>
<DIV style="width: 30%; float: left">
</DIV>
This would have the fourth DIV overflowing the containing block, but it actually should be placed below the other DIVs.
This is not catastrophic because you can simply use the clear property to achieve what the browser should do for you.
This bug also applies to non-floating elements that follow floats. E.g.:
<DIV style="width: 50%; float: left">
</DIV>
<DIV style="width: 50%; float: left">
</DIV>
<P>
Placed to the right of the other two floats.
Text-align doesn't work on floats that were originally online. This is signficant because of:
<P style="font-size: 16px; line-height: 24px">
(a) What were the causes of the Great Depression? <span style="float: right; width: 4em;
text-align: right">(12)</span><br>
(b) What, if any, were its lasting effects on American society? <span style="float: right;
width: 4em; text-align: right; background: blue">(13)</span><br>
<span style="float: right; width: 2em; text-align: right">
<span style="border-width: medium 0; border-style: solid">25</span>
</span>
In this example, designed to give a reproduction of standard examination question layout with the marks to the right, text-align: right is essential because the width of the float is unknown and so therefore it is necessary to specify a width for it. 4 ems and 2 ems are specified because it is not possible to know the true values and these are likely to be the maximum values. Since these values are certain to be too high, in order to align along the right, text-align: right is necessary, but in Opera text-align has no effect on elements that are inline. The effect of this bug is negligible however, because of:
Opera right-aligns right-floated inline elements. This is incorrect since the initial value of text-align is left. This has the effect of obviating the previous bug because it is almost always desired to right-align right-floated inline elements.
Although non-floating block elements should flow around both sides of a floated inline element, Opera only makes them flow on one side. For example:
<p style="margin-right: 100px">
Text<IMG src="stars.gif" style="float: right">
<P>
This text should flow around the image - text should flow around with some to the image's left and
some to its right - effectively two lines, one on each side of the image. This text should flow
around the image - text should flow around with some to the image's left and some to its right -
effectively two lines, one on each side of the image. This text should flow around the image - text
should flow around with some to the image's left and some to its right - effectively two lines, one
on each side of the image. This text should flow around the image - text should flow around with
some to the image's left and some to its right - effectively two lines, one on each side of the
image. This text should flow around the image - text should flow around with some to the image's
left and some to its right - effectively two lines, one on each side of the image. This text should
flow around the image - text should flow around with some to the image's left and some to its right
- effectively two lines, one on each side of the image.
Text.
This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image.
Similarly:
Text.
This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image. This text should flow around the image - text should flow around with some to the image's left and some to its right - effectively two lines, one on each side of the image.
The problem is not a common one - it only occurs when text should flow on both sides of a float.
Opera destroys display: inline, suppressing the line break before the element but not after. For example P {display: inline} would suppress the </p> line break but not the <P> one. This makes it entirely useless.
Opera doesn't support display: list-item.
Opera does not support white-space.
Opera fails to inherit text-align into table cells, instead applying text-align: left.
Opera ignores border properties on table elements.
Opera ignores margin properties on captions, preferring to set use its own, unchangeable, values.
Opera doesn't apply padding to table rows or tables.
Opera doesn't apply padding-top or padding-bottom to table cells.
Opera destroys horizontal padding by applying the sum of padding-left and padding-right as a padding-right on the content (it only does this if the table cell only contains anonymous boxes - <TD style="padding: 100px">Content</TD> will trigger the bug, but <TD style="padding: 100px"><PContent</TD> will not).
Although CAPTIONs are descendants of tables (but not inside their block), Opera doesn't inherit styles to them, so TABLE {color: red} won't affect the color of the CAPTION. It does treat them as descendants for contextual selectors (e.g., TABLE CAPTION {color: red}) however, so you can avoid this bug in that way.
Opera does not support the CSS height and width properties on table elements.
Opera does not support the CSS vertical-align property on table elements.
Opera does not support background images on table elements.
If you set auto on margin-right or margin-left (or both) and width: auto, the outer width of the element (i.e., the width from margin-left to margin-right) is set to 100%. For example, <TABLE style="margin-left: auto; margin-right: 10%"> results in the margin-right being honored and a width of 90% being given, where correct would be to assign width by the browser's table width algorithm and then calculated margin-left based on this - margin-left/right: auto shouldn't affect the width of tables, but in Opera it does. The way to avoid this is to specify a width in HTML (CSS won't work; see above), which causes Opera to ignore the horizontal margin: auto entirely.
To set the color of horizontal rules using CSS in Opera, it is necessary to use the background property.
Even though Opera applies horizontal rules as a border, the border properties have no effect on it. As a result, you are probably best off using HTML to set the characteristics of horizontal borders.
Height doesn't work on HR
The size of vertical margins around horizontal rules is simply that of the horizontal rule, not the collapsed value as would be correct. For example, given P.beforeHR {margin-bottom: 100px} and HR {margin-top: 10px}, the margin between them would be 10 pixels - P's margin would be ignored.
To see a demonstration of this in one of RichInStyle.com's bug pages, click here.
Although non-floated elements should be rendered behind floats, Opera renders them in front of them; for example, <P style="width: 50%; border: solid blue"><HR> would render the rule on top of the blue border.
Style doesn't work on form elements in Opera, except for FORM itself, INPUT type="image" and about a 1 pixel wide glitchy bit (between the text box and the browse button) when color is set on INPUT type="width".
Line-height is glitchy on INPUT type="image" with alt text applying all the line height below the text, instead of have above and half below.
You shouldn't specify borders on INPUT type="image" because Opera applies the border from the center of the button, but not increasing the width of the button to compensate, therefore meaning that large borders will overlap with adjacent elements. There is a demonstration in one of RichInStyle.com's test pages.
Opera does not support padding on INPUT type="image".
Opera destroys display: block on INPUT type="image" by not allocating any space for the image and therefore overlapping subsequent text. There is a demonstration in one of RichInStyle.com's test pages.
Opera does not support width or height on INPUT type="image".
Although the CSS specification states that list numbers should be a, b, c; 1, 2, 3, Opera renders a., b., c. instead.
Although the list-style property should reset all unset values to their initial value, in Opera i does not. For example, list-style-image: url(image.gif); list-style: decimal should reset the image, but doesn't.
Note this is not a serious bug and will never occur in practice.
Opera often requires a reload or to be in the cache (i.e., via use in IMG) to load list images.
Opera does not float list items correctly, failing to float the marker box to the left of the float but instead having them associated with the content.
Given, for example, <LI><P style="color: red">, the list marker of the LI would be red. This wouldn't apply if the P was preceded by anonymous content (such as <LI>content<P>) or un-inheritably styled block-level elements.
If you have an ADDRESS element inside LI, the ADDRESS's left margin is placed with respect to the left of the OL and the marker glyph of the LI is not rendered.
:first-letter doesn't work on LI or its first block-level descendant (unpreceded by anonymous inline content). This bug is almost certainly related to bug 4 above. The exception to this is that the box model property bug still occurs (e.g., P:first-letter {border: solid} is applied to the whole P).
Although the baseline of marker boxes, if the principal box lacks textual content, should be aligned with the top content edge of the principal box (the spec says that it should be aligned with the top outer edge, but this is wrong, and in any case Opera doesn't do this either), Opera instead aligns it with the baseline. E.g., <LI><P style="margin-top: 100px"><IMG>, the marker would be aligned with the bottom of the IMG.
Opera will ignore negative text-indents inside LI (or its first block-level child not preceded by anonymous content).
If LI and its first block-level child not preceded by anonymous content have different font sizes, the marker won't be aligned correctly - it won't be aligned with the baseline of the first line of text in the principal block box.
The element is given a negative top margin and thus moved up. In addition, the bottom half of the element is chopped off when the page is loaded, but an alt-tab to another program and then back again restores the text (but it is still moved up a bit).
The following will trigger the bug: Setting any valid value for InlineElement:first-line on the following only:
Although this is not a valid token character, it should only result in the ruleset being ignored, not the whole of the rest of the style sheet.
Opera doesn't support it - but then it doesn't claim to. Particularly affected are Q, ACRONYM and ABBR. Thus no CSS can be applied to them.
According to the CSS specification, only 16 colors are defined. However, both Internet Explorer and Netscape define far more, and these are used by many designers. For example, BODY {color: white; background: darkgray} would work perfectly in Netscape and Internet Explorer, but would be invisible in Opera, the darkgray being ignored for Opera's default (usually white).
Copyright © RichInStyle.com 2000; all rights reserved. See copyright document for terms of use. Please visit Bukit Lawang flood appeal.