Closed Bug 1185140 Opened 4 years ago Closed 4 years ago

Change handling of internal table types inside of a flex container

Categories

(Core :: Layout, defect)

defect
Not set

Tracking

()

RESOLVED FIXED
mozilla47
Tracking Status
firefox42 --- affected
firefox47 --- fixed

People

(Reporter: dholbert, Assigned: mats)

References

(Blocks 2 open bugs)

Details

Attachments

(3 files)

Quoting https://lists.w3.org/Archives/Public/www-style/2015Jul/0246.html :
=============
The spec currently requires that we do box fixup before determining
flex items:
   http://www.w3.org/TR/2015/WD-css-flexbox-1-20150514/#flex-items
This was discussed originally in this thread:
   [1] https://lists.w3.org/Archives/Public/www-style/2013May/0508.html
   [2] https://lists.w3.org/Archives/Public/www-style/2013Jul/0462.html
   [3] https://lists.w3.org/Archives/Public/www-style/2013Jul/0473.html

Chrome doesn't follow the spec in this case--it turns table cells into
flex items. Which, as I had pointed out [2], has the nice ability to
create a fallback rendering. The argument for not changing it was that
nobody cares. [3]

However, at least some people do care: see e.g. slide 39, which despite
the fact that it would result in layouts that only work properly in
Chrome, uses this technique:
   http://zomigi.com/downloads/Enhancing-Responsiveness-with-Flexbox_CSS-Day_150612.pdf

Should we change the spec to make internal table display types just
turn themselves into flex items, instead of triggering anonymous box
generation?

~fantasai

=============


If the CSSWG ends up resolving to change this, I *think* all we'd need to do is remove the opt-out for the various table display types here:
 http://mxr.mozilla.org/mozilla-central/source/layout/style/nsStyleContext.cpp?rev=6ec03d4b3358#687
The CSSWG did indeed resolve to change this.
Quoting minutes from IRC at http://krijnhoetmer.nl/irc-logs/css/20150825#l-630 :
=============
# [11:07] <dael> fantasai: Last one, if you have a flex container and you put two table cells in it, they won't become flex items independantly. They'll wrap in an anon table and that will be flex. Chrome has impl so that each item is flex.
# [11:07] <dael> dbaron: They do anon box after?
# [11:08] <dael> fantasai: Not at all.
# [11:08] <dael> dbaron: So it turns the table cells into blocks.
[...]
# [11:17] <dael> RESOLVED: Just blockify the children of flex and grid containers. Don't do anon box fixup
=============
Duplicate of this bug: 1252733
I can take a look at this since the code is shared with Grid,
and the Grid spec (now) has the exact same note:
https://drafts.csswg.org/css-grid/#grid-items
Assignee: nobody → mats
Thanks!
This code intentionally prevents blockification of these display types.
So simply removing that should work.
Attachment #8726056 - Flags: review?(dholbert)
I wrote fairly exhaustive test for Grid for various display types and it
seems to work fine.
I'm marking a few flexbox tests as failing for now - I'll file a follow-up bug
on fixing these.  It's probably better if you take that one.
Comment on attachment 8726056 [details] [diff] [review]
[css-grid][flexbox] Make grid/flex item blockification happen before creating table pseudos, per the latest specs.

Review of attachment 8726056 [details] [diff] [review]:
-----------------------------------------------------------------

Looks good, thanks!

I expect this will cause some flexbox tests (which test for this removed behavior) to fail -- particularly these ones from
http://mxr.mozilla.org/mozilla-central/source/layout/reftests/w3c-css/submitted/flexbox/ :
 flexbox-table-fixup-001a.xhtml
 flexbox-table-fixup-001b.xhtml
 flexbox-with-pseudo-elements-003.html

Those tests will need some tweaking/simplifying as part of this patch. Unless you're already making those tweaks, I'll aim to take care of that during the next ~day, and I'll post a "part 2" patch here with those test-tweaks.
Attachment #8726056 - Flags: review?(dholbert) → review+
Depends on: 1253354
I filed a follow-up bug 1253354 to fix the Flexbox reftests.
Flags: in-testsuite+
Blocks: css-grid
Duplicate of this bug: 1280313
You need to log in before you can comment on or make changes to this bug.