Open Bug 96463 Opened 24 years ago Updated 3 years ago

border widths are subtracted from table's intrinsic width.

Categories

(Core :: Layout: Tables, defect, P5)

x86
All
defect

Tracking

()

Future

People

(Reporter: alexeyc2003, Unassigned)

References

Details

(Keywords: testcase, Whiteboard: [awd:tbl][p5])

Attachments

(7 files, 1 obsolete file)

OS: Win2K Build: 2001082203 If a table is given an explicit width, the thicker it's borders - the less wider it is drawn. There is an error somewhere in calculations, and borders are getting subtracted from the width.
Attached file testcase
Keywords: testcase
Summary: border widths are subtracted from fixed table width. → border widths are subtracted from table's fixed width.
This *might* be what is causing bug 15248, but I haven't looked at it closely enough, so maybe they are unrelated.
Summary: border widths are subtracted from table's fixed width. → border widths are subtracted from table's intrinsic width.
AIM conversation with Chris: If we want to fix this in standard mode, there is a very simple fix - just put box-sizing:content-box in html.css and put box-sizing:border-box in quirks.css (right now it may be in html.css, not sure). If we do that, keep in mind that few web page will look right in standard mode, which is why we never made the change. I've lost track of history, but I think css 3 defines box-sizing. I am very afraid to make such a change. It definetely cannot be changed in quirks mode. bernd: I am scared to, so I was asking your opinion what is going on. Chris: The good news is that we have thought of it and have a simple fix if need be. bernd: I just tried the stuff with IE6 and they handle quirks and standard mode for the div and the textarea different but not for the table
CSS3 has 2 different width properties: width and box-width. At the moment when width is applied to table, it behaves as if it was box-width. The goal of Mozilla is standard compliance, so yes, this should be fixed for standard mode. As for quirks mode, the way Mozilla renders it at the moment is nothing like any other browser, thus pages already don't look right in it. So for quirks it's basically either: a) Fix it to display as CSS standard requires. b) Make it display like other browsers (which is probably harder than the first choice)
It appears that table layout has been fixed to behave like other browsers now. Except that for some reason tables are now wider than they should be. I filed bug 109680 on that. Maybe we could leave it like this in quirks, and do proper width: in strict? CCing Ian to have a look at this bug.
*** Bug 109780 has been marked as a duplicate of this bug. ***
*** Bug 113849 has been marked as a duplicate of this bug. ***
so.. what is the resolution for this bug then?
I think this should be fixed at least for strict mode.
-->future
Status: NEW → ASSIGNED
Target Milestone: --- → Future
*** Bug 111691 has been marked as a duplicate of this bug. ***
Whiteboard: [awd:tbl][p5]
*** Bug 127027 has been marked as a duplicate of this bug. ***
Attaching a test case that illustrates the problem in relation to DIV elements. Note that this discrepency is going to be really annoying for production folks who need stuff to line up with 1-2 pixel accuracy.
Attached patch patchSplinter Review
this patch does proper thing in strict mode and leaves behaviour the same in quirks mode. also I removed trailing spaces across these files. review please
Keywords: patch, review
OS: Windows 2000 → All
Alexey, how did you test your patch?
run Mozilla with these modified files and looked at the above testcases in strict and quirks mode.
Alexey, if only the last patch is to be considered, please mark the previous one obsolete.
the patches are identical in functional changes the first one also cleans up some unneeded trailing whitespaces in the files. the second shows where the functional changes were made. I'll mark the last patch obsolete, but you can still use it to see where changes were made.
Attachment #71172 - Attachment description: patch without whitespace changes → same patch without whitespace changes
Attachment #71172 - Attachment is obsolete: true
Alexey, as you might have seen I am scared about the patch, the problem here is not the patch but how to test it. My proposal is to turn on in the viewer the standard mode rendering and to run the regression tests as only a minority of the bug testcases is currently in standard mode. And then I would assume that 95% of all tests will fail, then one needs to verify visual every test that it is not broken but only slightly changed.
I'm not sure what you are so worried about here? The behaviour in quirks stays the same, so it won't break mainstream pages. The behaviour in strict mode complies with the spec, which is what most of the people who create strict mode pages expect. And it is goal of Mozilla to comply with standard specs. We already have profound differences between strict and quirks mode presentation and this one is rather minor compared to others. This bug affects a page only if all of these are true: * Page is in strict mode * Page uses CSS * Page uses tables * Tables use borders * Tables use width: property And still the level of distortion will be affected by border width. It should have quite thick borders to be noticeably distorted. As for pages that use tables for putting different pieces together with one pixel precision, they usually don't use borders at all. Once again, quirks pages are not affected. Maybe I'm missing something that makes this change so scary?
Ok, Hixie, I see what you are saying: neither way is right and the border shouldn't be outside or inside the table width, but should have half of it on either side in the above testcases since they have border-collapse: set to "collapse" (by default). Ok, then it really gets more complicated. However, don't you agree that it's still the right fix for "border-collapse: separate"? Even though these testcases do not apply. It fixes half the problem. Another half should be done in C++ I guess?
I'm not sure what the problems is. With collapsed borders in strict mode, border-box excludes the outside half of the borders (I made it include the outside half of the borders in quirks mode since I think IE does it that way, and it seems more nataural despite what the spec says). With separate borders border-box includes all of the borders. content-box is pretty much the same in all cases - the area inside the borders excluding padding (except there is no padding with collapsed borders).
>I'm not sure what you are so worried about here? I am worried that I don't know how to run meaningfull regression tests for this one. All table patches are supposed to pass the regression tests before they are checked in. Our standard regression tests will be nearly blind to regressions caused by this as the quirks mode will not change. My black soul can imagine several bad scenarios, pages where images wrap or don't wrap vice versa, nested tables that overwrite their parents border. While we are on it, with my old build 2002010103 the first caption and table in the first testcase are perfectly aligned, while a current build shows a offset of a pixel. And these regressions in table code are usually the result of not running the table regression tests (and this makes me angry). Btw the separate border model is now the default, see the w3c css2 errata.
oh I thought collapsed was the default. I got confused by URLs Hixie provided. ok I see now that collapsed is done correctly (except caption is misalligned).
So to answer Hixies question why is this the right fix for separated model: Because with this fix it behaves exactly as defined in this URL: http://www.w3.org/TR/REC-CSS2/tables.html#separated-borders The picture in there clearly shows that borders lie outside of table width. Can you think of a better/simpler fix? Or why this is not the right fix?
karnaze: That's good to hear! Excellent news. Given what karnaze said, I don't see the point of this patch.
I think the point is that the box sizing in standard mode should be content-box rather than border-box.
bingo :o)
So to sumarise from http://bugzilla.mozilla.org/show_bug.cgi?id=96463#c27: border-collapse: | separate | collapse | box-sizing: +--+-----------------+------------------+ --------------+ | | content | correct | invalid * | --------------+--------------------+------------------+ border | invalid | correct | --------------+--------------------+------------------+ If I'm right, then that's not really acceptable :-) The problem is the one marked (*) -- border-collapse: collapse should use box-sizing: content (the default) to get the standards compliant behaviour.
So... I'm still confused. What exactly is this bug about? The beginning sounds like complaints about the fact that we implement a preliminary version of the CSS3 "box-sizing" property as -moz-box-sizing and use it in our UA stylesheet.... Comment 34 confuses me. So would someone explain to me what this bug is about?
Comment 32 summarises the reason I filed this bug for pretty well. However this is not really about CSS3, but about our implementation of CSS2. Use of CSS3 terms in comment 32 to describe behaviour just helps to formulate the problem. And since we rely on preliminaty CSS3 properties to implement our CSS2 compliance, this is rather easy to fix. However what is expected by CSS2 standard is opposite of all legacy implementations. And if fixed, might result in slightly broken layouts. That's why this should probably be fixed for Strict mode only. But I would rather let Ian make such decisions. Also <caption> behaviour in the testcase differs from <table> and should be fixed as well. It should be the same width as the table.
mass reassign to default owner
Assignee: karnaze → table
Status: ASSIGNED → NEW
QA Contact: amar → madhur
Target Milestone: Future → ---
Priority: -- → P5
Target Milestone: --- → Future
Testcase showing the problem marked as (*) in comment #34: http://www.gtalbot.org/BrowserBugsSection/MozillaBugs/TableWidthBorderCollapse.html The way I understand this bug, the CSS 2.1 spec on border-collapse and comment #34: Actual results: a table with collapsed borders in strict mode is as wide (computed style width) as its intrinsec content minus (-) half of its borders: its -moz-box-sizing value should is content-box. In that testcase, it is 400px - 100px Expected results: a table with collapsed borders in strict mode should be as wide (computed style width) as its intrinsec content plus (+) half of its borders: its -moz-box-sizing value should be border-box. In that testcase, it should be 400px + 100px
What getComputedStyle returns in Mozilla has very little relation to CSS computed style for various historical and compat reasons. There are existing bugs on this, for what it's worth.
I wanted to bring in this bugfile a testcase which I thought was more suitable, easier to figure out bringing some light. Sorry Alexey, but attachment 71424 [details] seems difficult to figure out. > What getComputedStyle returns in Mozilla has very little relation to CSS > computed style for various historical and compat reasons. Then we also get fooled by DOM inspector as well. There are existing > bugs on this, for what it's worth. I haven't found those yet but I'll look. Somehow, -moz-box-sizing can not be modified (from content-box to border-box) in my testcase.
(In reply to comment #40) > I wanted to bring in this bugfile a testcase which I thought was more suitable, > easier to figure out bringing some light. Sorry Alexey, but attachment 71424 [details] [edit] > seems difficult to figure out. Well it's simply a set of different types of boxes which all have the same width, only their border widths differ.
Over time, there have been some changes on what Gérard Talbot's testcase reported. While offsetWidth constantly reported 500, "width" correctly reported 500px before the reflow refactoring landed; Since the landing of the reflow refactoring it reports 807px. Since that's a regression can it be fixed? Can offsetWidth or any other of the reported bugs also be fixed now?
Assignee: layout.tables → nobody
QA Contact: madhur → layout.tables
Hello, " in HTML and XHTML1, the width of the <table> element [in the border-collapse: separate model] is the distance from the left border edge to the right border edge. " CSS 2.1, § 17.6.1, http://www.w3.org/TR/CSS21/tables.html#separated-borders " The width of the table wrapper box is the border-edge width of the table box inside it " CSS 2.1, § 17.4 http://www.w3.org/TR/CSS21/tables.html#model So, if width is set to 10cm, such width will include the table borders... which is like 'box-sizing: border-box' applying. I have now examined attachment 46745 [details] with all of the tests at CSS2.1 test suite and I don't see a problem. (In reply to Alexey Chernyak from comment #36) > <caption> behaviour in the testcase differs from <table> and should be > fixed as well. It should be the same width as the table. " Anonymous table box is as wide as max(table-width, table-caption-min-intrinsic-width) " [CSS21] table-caption width http://lists.w3.org/Archives/Public/www-style/2010Sep/0186.html Test: http://test.csswg.org/suites/css2.1/nightly-unstable/html4/anonymous-table-box-width-001.htm Caption box width should be -> bug 674520 or -> bug 349144
Severity: normal → S3

The severity field for this bug is relatively low, S3. However, the bug has 4 duplicates.
:dholbert, could you consider increasing the bug severity?

For more information, please visit auto_nag documentation.

Flags: needinfo?(dholbert)

The last needinfo from me was triggered in error by recent activity on the bug. I'm clearing the needinfo since this is a very old bug and I don't know if it's still relevant.

Flags: needinfo?(dholbert)
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: