WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
NEW
5515
Border collapse problem with rowspan/colspan cells
https://bugs.webkit.org/show_bug.cgi?id=5515
Summary
Border collapse problem with rowspan/colspan cells
scott
Reported
2005-10-26 14:35:44 PDT
As seen in the example link, the td with the row/colspan does not have a class/style applied to it, yet it still gets a border. The bordering is inconsistent. Adding this trick to it td[colspan]{ border: 1px solid transparent !important; } Fixes it, however, it also breaks it badly in other browsers with that workaround.
Attachments
Reduction to show collapsed border bug with rowspan
(291 bytes, text/html)
2007-07-09 14:26 PDT
,
Aaron Rosenzweig
no flags
Details
Patch
(46.67 KB, patch)
2012-08-20 06:36 PDT
,
Arpita Bahuguna
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from gce-cr-linux-03
(379.08 KB, application/zip)
2012-08-20 07:31 PDT
,
WebKit Review Bot
no flags
Details
Patch
(81.90 KB, patch)
2012-08-21 04:59 PDT
,
Arpita Bahuguna
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from gce-cr-linux-07
(701.79 KB, application/zip)
2012-08-21 09:10 PDT
,
WebKit Review Bot
no flags
Details
Patch
(81.90 KB, patch)
2012-08-21 22:21 PDT
,
Arpita Bahuguna
no flags
Details
Formatted Diff
Diff
Patch
(67.38 KB, text/plain)
2012-08-26 23:36 PDT
,
Arpita Bahuguna
no flags
Details
Archive of layout-test-results from gce-cr-linux-04
(518.48 KB, application/zip)
2012-08-27 05:30 PDT
,
WebKit Review Bot
no flags
Details
Patch
(108.12 KB, text/plain)
2012-08-27 23:22 PDT
,
Arpita Bahuguna
no flags
Details
Archive of layout-test-results from gce-cr-linux-05
(460.68 KB, application/zip)
2012-08-28 00:07 PDT
,
WebKit Review Bot
no flags
Details
Patch
(120.59 KB, patch)
2012-08-28 02:08 PDT
,
Arpita Bahuguna
no flags
Details
Formatted Diff
Diff
Patch
(120.51 KB, patch)
2012-08-29 00:11 PDT
,
Arpita Bahuguna
jchaffraix
: review-
Details
Formatted Diff
Diff
Show Obsolete
(6)
View All
Add attachment
proposed patch, testcase, etc.
Dave Hyatt
Comment 1
2005-10-26 15:09:49 PDT
This is a problem with border collapsing.
scott
Comment 2
2005-10-26 15:11:42 PDT
So are you saying it is an issue with my css, or just the border-collapse in general?
Dave Hyatt
Comment 3
2005-10-26 15:22:44 PDT
Nothing wrong with your CSS. It's a bug in Safari's border-collapse handling when cells have spans.
mitz
Comment 4
2006-12-19 11:12:24 PST
The linked test case is no longer available. A lot of border collapsing issues have been fixed since this bug was filed. Scott, can you attach the original test case to this bug?
Kurt Moore
Comment 5
2006-12-19 13:40:48 PST
I dont have the file anymore, sorry :-( Seems to be resolved in my tests.
Aaron Rosenzweig
Comment 6
2007-07-09 14:26:10 PDT
Created
attachment 15455
[details]
Reduction to show collapsed border bug with rowspan When two table cells share a border and the borders are "collapsed" then the shared border effectively becomes one. What happens if the 2nd cell defines the shared wall as red? The wall probably should turn red if that rule is more specific. What happens if the 1st cell has a rowspan? Firefox says that the redness should stop at the bottom of the 2nd cell. Safari says that the redness should continue all the way down all the rowspans of the 1st cell. Please try this attached reduction in both Firefox and Safari to see the difference. I'm testing in the Safari 3 Beta on Mac and still see this issue.
Aaron Rosenzweig
Comment 7
2007-07-19 13:24:16 PDT
Can someone comment about the reduction I posted to help solve this issue? Please let me know if it is clear. It should be but I don't want to assume.
mitz
Comment 8
2007-07-19 13:30:33 PDT
(In reply to
comment #7
)
> Can someone comment about the reduction I posted to help solve this issue? > Please let me know if it is clear. It should be but I don't want to assume.
Good reduction! The issue is well understood. Thanks.
mitz
Comment 9
2008-09-29 09:49:25 PDT
***
Bug 21208
has been marked as a duplicate of this bug. ***
mitz
Comment 10
2008-09-29 09:50:26 PDT
See also
bug 14274
.
David Kilzer (:ddkilzer)
Comment 11
2008-09-29 10:58:51 PDT
Reassigning to webkit-unassigned for wider exposure.
Arpita Bahuguna
Comment 12
2012-08-20 06:36:20 PDT
Created
attachment 159412
[details]
Patch
WebKit Review Bot
Comment 13
2012-08-20 07:31:53 PDT
Comment on
attachment 159412
[details]
Patch
Attachment 159412
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/13529965
New failing tests: fast/table/border-collapsing/collapsed-border-with-colspan.html fast/table/border-collapsing/collapsed-border-with-rowspan.html
WebKit Review Bot
Comment 14
2012-08-20 07:31:56 PDT
Created
attachment 159422
[details]
Archive of layout-test-results from gce-cr-linux-03 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: gce-cr-linux-03 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.39-gcg-201203291735-x86_64-with-Ubuntu-10.04-lucid
Arpita Bahuguna
Comment 15
2012-08-21 04:59:41 PDT
Created
attachment 159659
[details]
Patch
Arpita Bahuguna
Comment 16
2012-08-21 07:24:45 PDT
Added the expected files from the previous patch for cr-linux.
WebKit Review Bot
Comment 17
2012-08-21 09:10:55 PDT
Comment on
attachment 159659
[details]
Patch
Attachment 159659
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/13550405
New failing tests: fast/table/border-collapsing/collapsed-border-with-colspan.html fast/table/border-collapsing/collapsed-border-with-rowspan.html
WebKit Review Bot
Comment 18
2012-08-21 09:10:59 PDT
Created
attachment 159701
[details]
Archive of layout-test-results from gce-cr-linux-07 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: gce-cr-linux-07 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.39-gcg-201203291735-x86_64-with-Ubuntu-10.04-lucid
Arpita Bahuguna
Comment 19
2012-08-21 22:21:33 PDT
Created
attachment 159860
[details]
Patch
Eric Seidel (no email)
Comment 20
2012-08-22 12:01:16 PDT
Comment on
attachment 159860
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=159860&action=review
> LayoutTests/fast/table/border-collapsing/collapsed-border-with-rowspan.html:9 > +<p>Test for Bugzilla <a href="
https://bugs.webkit.org/show_bug.cgi?id=5515
">
Bug 5515
</a>: Border collapse problem with rowspan/colspan cells.</p> > +<p>The following tests verify the border-collapse behavior on tables with rowspan.</p> > +<table border="1" style="border-collapse : collapse;">
Please remove the text so that we can share pixel results between platforms. Just make it an HTML comment instead of rendered text.
Julien Chaffraix
Comment 21
2012-08-22 12:55:45 PDT
Comment on
attachment 159860
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=159860&action=review
> Source/WebCore/rendering/RenderTableCell.cpp:498 > + if (!isEndColumn && !(rowSpan() > 1)) {
This fix is not right. First you are only touching half of the collapsing border functions which means that it is still broken in half of the cases. Secondly, after this change, you are ignoring adjacent rowSpan / colspan > 1 cells that still have a full common border which I think is unfortunate. The spec is silent on what we are supposed to do with rowspan / colspan but it doesn't make much sense to disallow this case, especially since we handle it properly already and other browsers seems to allow it too. I posted something similar some time ago on
bug 20840
(only for the colspan case) but never followed up on it due to lack of time. Note that your fix is a hack around the fact that we should support border segmenting per
bug 20260
and you should say it, not hide this fact. Adding this would be the best but it would make our collapsing border code more complex and we would probably run this change through the standards for inter-operability.
Arpita Bahuguna
Comment 22
2012-08-26 23:36:51 PDT
Created
attachment 160650
[details]
Patch
WebKit Review Bot
Comment 23
2012-08-27 05:30:34 PDT
Comment on
attachment 160650
[details]
Patch
Attachment 160650
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/13619115
New failing tests: fast/forms/range/slider-delete-while-dragging-thumb.html tables/mozilla/marvin/backgr_layers-opacity.html inspector/debugger/source-frame.html fast/loader/unload-form-post-about-blank.html tables/mozilla/marvin/backgr_simple-table-cell.html fast/canvas/webgl/shader-precision-format.html animations/suspend-resume-animation-events.html tables/mozilla_expected_failures/marvin/backgr_border-table-quirks.html http/tests/xmlhttprequest/zero-length-response.html tables/mozilla_expected_failures/marvin/backgr_border-table-column-group.html tables/mozilla_expected_failures/marvin/backgr_border-table-row.html fast/table/border-collapsing/collapsed-border-with-colspan.html platform/chromium/virtual/gpu/fast/canvas/webgl/shader-precision-format.html fast/forms/range/slider-mouse-events.html fast/frames/cached-frame-counter.html tables/mozilla/marvin/backgr_simple-table-column-group.html tables/mozilla/marvin/backgr_simple-table-row.html tables/mozilla/marvin/backgr_simple-table.html tables/mozilla_expected_failures/marvin/backgr_border-table-column.html fast/table/border-collapsing/collapsed-border-with-rowspan.html tables/mozilla_expected_failures/marvin/backgr_border-table-row-group.html tables/mozilla/marvin/backgr_position-table.html tables/mozilla/marvin/backgr_simple-table-row-group.html tables/mozilla/marvin/backgr_simple-table-column.html tables/mozilla_expected_failures/marvin/backgr_border-table-cell.html fast/forms/range/slider-onchange-event.html fast/loader/local-CSS-from-local.html
WebKit Review Bot
Comment 24
2012-08-27 05:30:39 PDT
Created
attachment 160699
[details]
Archive of layout-test-results from gce-cr-linux-04 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: gce-cr-linux-04 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.39-gcg-201203291735-x86_64-with-Ubuntu-10.04-lucid
Arpita Bahuguna
Comment 25
2012-08-27 23:22:09 PDT
Created
attachment 160909
[details]
Patch
WebKit Review Bot
Comment 26
2012-08-28 00:07:55 PDT
Comment on
attachment 160909
[details]
Patch
Attachment 160909
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/13664073
New failing tests: tables/mozilla_expected_failures/marvin/backgr_position-table-row.html tables/mozilla_expected_failures/marvin/backgr_position-table-column.html tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html tables/mozilla_expected_failures/marvin/backgr_position-table-row-group.html tables/mozilla_expected_failures/marvin/backgr_position-table-column-group.html tables/mozilla_expected_failures/marvin/backgr_layers-hide.html tables/mozilla_expected_failures/marvin/backgr_position-table-cell.html tables/mozilla_expected_failures/marvin/backgr_layers-show.html tables/mozilla_expected_failures/marvin/backgr_border-table.html
WebKit Review Bot
Comment 27
2012-08-28 00:07:59 PDT
Created
attachment 160919
[details]
Archive of layout-test-results from gce-cr-linux-05 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: gce-cr-linux-05 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.39-gcg-201203291735-x86_64-with-Ubuntu-10.04-lucid
Arpita Bahuguna
Comment 28
2012-08-28 02:08:43 PDT
Created
attachment 160931
[details]
Patch
Arpita Bahuguna
Comment 29
2012-08-28 04:43:45 PDT
(In reply to
comment #21
)
> (From update of
attachment 159860
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=159860&action=review
> > > Source/WebCore/rendering/RenderTableCell.cpp:498 > > + if (!isEndColumn && !(rowSpan() > 1)) { > > This fix is not right. First you are only touching half of the collapsing border functions which means that it is still broken in half of the cases. Secondly, after this change, you are ignoring adjacent rowSpan / colspan > 1 cells that still have a full common border which I think is unfortunate. The spec is silent on what we are supposed to do with rowspan / colspan but it doesn't make much sense to disallow this case, especially since we handle it properly already and other browsers seems to allow it too. I posted something similar some time ago on
bug 20840
(only for the colspan case) but never followed up on it due to lack of time. > > Note that your fix is a hack around the fact that we should support border segmenting per
bug 20260
and you should say it, not hide this fact. Adding this would be the best but it would make our collapsing border code more complex and we would probably run this change through the standards for inter-operability.
Hi Julien, thanks for the review. I agree that my previous patch was a workaround; only addressing the problem at hand. Have tried to incorporate most cases with this patch (adjacent colspan/rowspan, patching in all areas etc.). Have also added some more cases in the layout testcase added along with this patch.
Robert Hogan
Comment 30
2012-08-28 12:17:52 PDT
Comment on
attachment 160931
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=160931&action=review
> Source/WebCore/rendering/RenderTableCell.cpp:438 > + if (isValidCellForColRowSpanBorderResolution(true, prevCell)) { > CollapsedBorderValue prevCellBorder = CollapsedBorderValue(prevCell->style()->borderEnd(), includeColor ? prevCell->style()->visitedDependentColor(endColorProperty) : Color(), BCELL);
You're missing your indentation here.
> Source/WebCore/rendering/RenderTableCell.h:214 > + bool isValidCellForColRowSpanBorderResolution(bool isStartOrEndBorder, RenderTableCell* adjacentCell = 0) const;
Couldn't this helper function be static?
> LayoutTests/ChangeLog:67 > + Modified existing results for qt and chromium-win ports.
It's not obvious why these new results are correct - can you provide some commentary?
Arpita Bahuguna
Comment 31
2012-08-29 00:11:41 PDT
Created
attachment 161153
[details]
Patch
Arpita Bahuguna
Comment 32
2012-08-29 08:59:42 PDT
(In reply to
comment #30
) Thanks for the review comments Robert. Have uploaded another patch with the suggested changes.
> (From update of
attachment 160931
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=160931&action=review
> > > Source/WebCore/rendering/RenderTableCell.cpp:438 > > + if (isValidCellForColRowSpanBorderResolution(true, prevCell)) { > > CollapsedBorderValue prevCellBorder = CollapsedBorderValue(prevCell->style()->borderEnd(), includeColor ? prevCell->style()->visitedDependentColor(endColorProperty) : Color(), BCELL); > > You're missing your indentation here.
Missed out on this.
> > > Source/WebCore/rendering/RenderTableCell.h:214 > > + bool isValidCellForColRowSpanBorderResolution(bool isStartOrEndBorder, RenderTableCell* adjacentCell = 0) const; > > Couldn't this helper function be static?
Done.
> > > LayoutTests/ChangeLog:67 > > + Modified existing results for qt and chromium-win ports. > > It's not obvious why these new results are correct - can you provide some commentary?
Added an explanation for the changes in the results.
Julien Chaffraix
Comment 33
2012-09-06 16:55:46 PDT
Comment on
attachment 161153
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=161153&action=review
> Source/WebCore/ChangeLog:9 > + Our handling of colspans and rowspans while resolving collapsed borders > + on a table is not proper.
Globally this sentence doesn't add anything. How does this sentence help someone unfamiliar with your change understand what you did? Adding a one line short / TL;DR description is totally welcome but think how you can pack *relevant* information in one sentence.
> Source/WebCore/ChangeLog:17 > + The left border (or the start border) specified for the first cell > + adjacent to a spanned cell (rowspan) was being applied for the entire length > + of the spanned cell's right (end border) border. > + > + Similarly, the top border (or the before border) specified for the first > + cell below a spanned cell (colspan) was being applied for the entire > + length of the spanned cell's bottom (after border) border.
Be careful how you phrase the change. start / before are not strictly equal to left / top but this ChangeLog mixes the 2 and makes people wonder if you know the difference.
> Source/WebCore/ChangeLog:21 > + collapsed borders.
Nowhere do you mention in your ChangeLog that this change is a work-around, please do and mention the bug with the right fix.
> Source/WebCore/rendering/RenderTableCell.cpp:342 > +static bool isValidCellForColRowSpanBorderResolution(const RenderTableCell* currCell, bool isStartOrEndBorder, const RenderTableCell* adjacentCell = 0)
Please NO BOOLEAN parameters. They make the call sites difficult to read and every time you add one you should ask yourself if it's needed. See
http://ariya.ofilabs.com/2011/08/hall-of-api-shame-boolean-trap.html
among other resources. On top of that, here they are unnecessary and confusing. You should have 2 function dedicated to each logical direction.
> Source/WebCore/rendering/RenderTableCell.cpp:346 > + if (currCell->rowSpan() > 1) > + return adjacentCell ? adjacentCell->rowSpan() > 1 : false;
First unrelated but this could be written: return adjacentCell && adjacentCell->rowSpan() > 1. Second, I don't see the point of doing this comparison with an empty |adjacentCell|. Finally, I really don't understand what the point of this check is. I would rather keep the alignment case as our heuristic here. Both choices are arbitrary but it matches other browsers on more cases and AFAICT yours requires a lot more rebaselining.
> Source/WebCore/rendering/RenderTableCell.cpp:509 > + if (!isEndColumn && isValidCellForColRowSpanBorderResolution(this, true)) {
NO! Changing this condition means that you now wrongly fall back to checking the |row|'s end border for middle rows if the cells has a rowspan.
> LayoutTests/fast/table/border-collapsing/collapsed-border-with-colspan.html:51 > +<!-- Red, green and blue colored borders should be displayed per cell. -->
Red should be reserved for failures. See our wiki on how to write good layout tests:
http://trac.webkit.org/wiki/Writing%20Layout%20Tests%20for%20DumpRenderTree
Preferably this should be a ref-test.
Ahmad Saleem
Comment 34
2022-05-30 01:58:12 PDT
This bug is reproducible using attached "reduced test case" on Safari 15.5 on macOS 12.4. Chrome Canary 104 and Firefox Nightly 102 behaves same. Thanks!
Radar WebKit Bug Importer
Comment 35
2022-05-31 10:58:13 PDT
<
rdar://problem/94163960
>
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug