Re: [CSSWG] Minutes Berlin F2F Tue 2018-04-10 Part III: Spatial Navigation, Floats [css-overflow][css-floats] / single-spaced

=========================================
   These are the official CSSWG minutes.
   Unless you're correcting the minutes,
  Please respond by starting a new thread
    with an appropriate subject line.
=========================================


Spacial Navigation
------------------

   - Jihye showed a demonstration of how the spec has progressed so far:
       https://wicg.github.io/spatial-navigation/demo/blog/
   - Much of the current spec isn't about CSS, but it has raised questions about
       terminology and making it easier to refer to scrolling concepts.
   - It was suggested that all the definition of terms occur in CSS Overflow
       to make it easier to reference terms.
   - There's significant interest in having this spec assist accessibility
       concerns.
   - The group did not think that adding information about hit testing would
       be valuable.
   - Exposing a new Media Query that would give data on interaction media
       feature navigation raised concerns about possible fingerprinting.
       If there are strong use cases the group will reconsider.

   - RESOLVED: Add the definition of the border shape edge to Borders and
               Backgrounds L3 (Issue #2324: Missing box terminology).

CSS Floats
----------

   - Originally there were three proposals to address issue #2452
       (What happens when a bfc height grows such that it intersects
        with a lower-placed float that was not considered when choosing
        its width):
       1) Attempt all possibilities until one fits (what Firefox does)
       2) If it doesn't fit you try one more layout
       3) Put the BFC under the floats (what Edge does)
   - Option 3 is the most performant, but option 1 was what users would expect.
       Option 2 was a compromise, but since no one implements it currently there
       were objections to resolving on it.
   - The group agreed on Option 1 and will request more performance data from
       whomever implements so that they can re-open this if there is a
       significant performance issue.

   - RESOLVED: The working group preference is to specify BFC float avoidance
               behavior to match the guidelines of what is spec in 2.1 for
               inline layout float avoidance behavior.
   - RESOLVED: Start a CSS 3 Floats Module with dbaron and fremy as co-editors.

===== FULL MINUTES BELOW ======

Agenda: https://wiki.csswg.org/planning/berlin-2018#schedule

Scribe: dael

Spatial Navigation
==================

   Demo link: https://wicg.github.io/spatial-navigation/demo/blog/
   Spec Link: https://wicg.github.io/spatial-navigation/
   jihye: spatial navigation is the ability to navigate between
          focusable elements.
   jihye: florian and I introduced this draft last year. Most browsers
          have not historically offered these features. Some browsers
          have allowed it using arrow keys. No browser now provides it
          by default. Some web apps provide using JS libraries.
   jihye: We thought to spec basic behavior and provide some overriding
          APIs of the default behavior.

   jihye: [shows spec]
   jihye: florian and I wrote the ED. It includes processing model which
          is basic browser behavior. We're writing overriding APIs and
          the CSS property.
   jihye: I also made a polyfill based on the spec. It's not complete,
          but supports main behavior

   florian: This is mostly not a CSS spec right now. From a CSS sense
            it's as if everything was auto. We need to say what happens
            when a user tries to do things when everything is auto and
            then we have some JS for changing auto.
   florian: We started with CSS properties but with limited data on what
            authors and users want. We thought it was better to get the
            basic APIs and then add additional CSS properties based on
            what people do with JS. This works without JS, but the JS
            overrides. The questions we have later is things the depend
            on layouts.

   jihye: [shows demo]
   jihye: In the page there are several focusable elements and you can
          navigate using arrow keys. You can do with tab, but you have
          to press more times. Web apps using inline layout, spatial
          nav is very useful.
   jihye: [shows a page with many examples of layout]
   jihye: There's many corner cases, including hover cases.
   florian: One of this thing we're interested in seeing is the long
            standing questions about re-ordered sequential navigation;
            we think they want spatial navigation. We're interested to
            see if people still want the re-ordered sequential after
            we've done this.
   tantek: There's always been an a11y desire to make sequential work
           without a spatial view.
   florian: This is a side note.

   Rossen: We've been implementing and shipping spatial nav on Xbox
           with Edge for a few releases. We've precieved it as a general
           UI nav, and for that reason we're allowing a generic UI for
           a11y and anything, including XBox controller or input based
           on Kinect motion or verbal commands, is just working.
           We don't have to deal with all modes of input and user input,
           that's mediated by a11y interface.
   Rossen: Also, from what tantek said, I've been in the APA WG and
           that's been their top gripe about flexbox and grid and
           everything else. I'm very interested in anything we'll do
           to help those efforts. If we're not solving this for a11y
           as well I think we're missing out.
   <tantek> agreed with Rossen
   florian: We have an open issue saying if you have use cases not
            solved by spatial nav for reordered sequential please tell
            us. We haven't heard, but maybe don't have the right eyes.
            I don't think there's anything incompatible, but I've heard
            conflicting requests about the sequential navigation, and
            some of them may be solved here.
   tantek: It's better to look through mintes for joint CSS WG and a11y
           meeting at TPAC 2017.
   florian: I did. There's multiple people saying conflicting things.
            I suspect that some of these conflicts would go away once
            we have spatnav.
   florian: But that's not what we wanted to talk about today.

Missing scroll-related anchoring terminology
--------------------------------------------
   github: https://github.com/w3c/csswg-drafts/issues/2322
           and https://github.com/w3c/csswg-drafts/issues/2323

   florian: For issues, one thing that became apparent is spatial
            navigation isn't easy. If the first focused button is
            several pages down you want to scroll until you get to
            it. When we tried to specify in relation to scrolling,
            we found it difficult to define in terms of CSS.
            There's some in overflow, some in scroll snap points,
            some in CSSOM view which defines APIs. These bits are
            not well integrated. The more procedural approach in
            CSSOM view doesn't talk about snap points.
   florian: We have two issues on the agenda. #2322 and #2323

   florian: It's the desire for a scrolling spec to exist. #2322
            we found a need to refer to a thing that can be scrolled.
   fantasai: Do you want something that can be scrolled by the user
   florian: Yes and that can be manually scrolled. It's not already
            scrolled all the way in. If it's all the way down it
            cannot. If it's the last mandatory scroll point you cannot.
            If a use wants to scroll in this direction, could they?
            We found a need to try and talk to that. You can describe
            this, but there's no single term.
   fantasai: What do you want the WG to do?
   florian: These two issues call for a scrolling spec that folds all
            the things in so that we don't have to talk about properties
            from many specs when talking about scrolling. What's the
            WG stategy to make scrolling easy to refer to?
   fantasai: Having terminology defined in Overfow makes sense if it's
             general. If it's API-based it should be in CSSOM.
   florian: This is anchoring terminology.
   fantasai: CSS Overflow

   florian: We needed a thing that can be manually scrolled in another
            direction, and the other is scrolling directionally by a
            UA-defined amount, taking into account all the other properties.
   fremy: Scroll a single user?
   florian: If you pressed the down arrow, find an anchoring term
   fantasai: Scroll in intended direction.
   <fantasai> https://www.w3.org/TR/css-scroll-snap-1/#scroll-types
   florian: There's the classification of things in Scroll Snap.
   fantasai: We can move that section to Overflow.
   Rossen: I think what fantasai said is CSS Overflow is where terminology
           should be. If it's not there point it out. In terms of additional
           features that live on those terminologies, we shouldn't have base
           definitions in css-snap-points.

   florian: So propose terms move to Overflow with notes to spec how they
            affect that term
   majidvp: Overscroll introduces scroll boundary and that's something you
            alluded that you needed so it makes sense to refactor.
   florian: I'll propose the relevent edits.
   Rossen: For issue #2322 do you need anything for the group?
   florian: No, I need to propose.

Questions from demo discussion
------------------------------

   myles: I wanted to ask for clarification on the xbox. Were you talking
          about logical vs visual ordering or talking about making the API
          work for a11y?
   Rossen: Mine was about that we've been asked many times to help a11y
           WG by defining how the flexbox reordering, or grid, plays nicely
           with a11y. a11y for all the providers today is still tree-based,
           and based on content order. If you reorder using flex order or
           you target visually different grid cells you are disconnecting
           visual order from content order.
   Rossen: This has been the #1 issue the a11y WG has been asking us to help
           them solve.
   Rossen: They have also been asking in addition for help with general
           spatial nav. Put aside flexbox and grid, if they have a canvas
           with a bunch of little things inside, how do the spatially
           navigate? Like with a map. Then going back to HTML/CSS how do
           you navigate over a document.
   Rossen: I sympathize with the effort. I hoped florian and jihye's work
           would help with both things. I hoped that they wouldn't reinevent
           the wheel with how it currently works. If this is something that
           can aid this.
   florian: Clarification. We're trying not to reinvent. Our model is closer
            to the one that exists in Chrome. It doesn't exist by default,
            but you can get it in a console command and it's similar to
            presto. I don't know the type of spat nav.
   iank: It's similar to presto when it was in opera.
   Rossen: myles does that answer?
   myles: Yes.

Missing box terminology
-----------------------
   github: https://github.com/w3c/csswg-drafts/issues/2324

   florian: css-backgrounds-3 says border-radius changes the border edge.
            If you link to “border edge” it doesn't say if it effects it.
            The spec that does talks about border edge but not the other
            various boxes. It makes it really awkward to refer to in other
            specs. If we can define the border edge in level 3
   TabAtkins: I like “shaped border edge” to refer to it.
   florian: And we can add all the things that can be shaped.
   TabAtkins: We wanted to refer to the things outside.
   florian: If it effects hit testing it should be there.
   iank: clip-path yes, but I don't believe share-outside affects it.
   florian: Editors will do it? I think it's border and backgrounds L3
   TabAtkins: Sure. Seems fine.
   astearns: Since it's just missing testing to go to rec....it's just a
             term. As long as you don't open hit testing against backgrounds
             and borders L3 I'll be happy.
   Rossen: proposal: Add the definition of the border shape edge to Borders
           and Backgrounds L3
   RESOLVED: Add the definition of the border shape edge to Borders and
             Backgrounds L3

Hit Testing
-----------
   github: https://github.com/WICG/spatial-navigation/issues/29#issuecomment-378153116

   florian: Is this an operation that we can use or is it hard to impl?
   florian: When you have dialogs or things popping over a page, you can't
            click on the things behind. Currently tabbed navigation can get
            behind, but spatial navigation is relatively new. It would be
            nice that if an item can't be clicked on also can't be navigated
            to. It could be possible to declare these things as inert, but
            if we didn't have to ask authors it would be good. Can we or is
            it hard to implement?
   tantek: It would require normative reference to “can you click on it”.
   florian: We haven't defined how hit testing works, so we don't have to
           depend on it.
   iank: If there's a 1px edge and you want to test exposed?
   florian: If it's barely visible then you made it visible.
   iank: This is asking for hit testing on an area and you have to determine
         the area?
   smfr: As you scroll and animations run you have to animate every frame.
         It's super hard.
   Rossen: Every implementation layers differently. We layer for perf.
           We layer things interdependently for painting and hit testing
           doesn't benefit on that. Mechanics of doing hit testing may
           suffer, but hit testing isn't highly demanding.

   Rossen: Thing to point out, though, I would encourage you to take a look
           at HTML AAM or ARIA AAM and see how they go about it. They define
           landmarks and all of the sites I've seen with pop ups they have
           a11y.
   florian: There are mechanisms to say obscure things aren't interactive.
            Given our thing doesn't have compat baggage, if it's necessary
            for authors to make them do it that's okay, but if it could be
            authors don't have to do anything it's a nicer experience.
   Rossen: You'd discourage authors to do what's recommended for a11y reasons.
   florian: I'm hearing hard to implement and possibly not desirable;
            don't do this.

   fremy: We have a JS-exposed function called msElementsFromRect where
          we return all elements that match the rectangle. Rectangles are
          easy but shapes and SVG things get harder. If you want to define
          this as there is an element for the entirety of the object.
          Can you click on some pixel is hard.
   Rossen: And then you get into the argument of where is the origin of
           the pixel.
   fremy: If you want to see if there is one object that completely covers
          another object that's easier.
   Rossen: And with this you don't get the order of the rects.
   florian: So rely on author actively disabling things.
   Rossen: Which they should do for a11y. I would continue encouraging
           people to support that a11y agenda. It should work for everyone.

   tantek: florian you said you saw contradicting items. most comprehensive
           write-up is from James Craig. I would reach out to him to ask for
           him to point you to latest thinking

Interaction media feature navigation: none | sequential | spatial
-----------------------------------------------------------------
   github: https://github.com/WICG/spatial-navigation/issues/41

   <jihye> https://github.com/w3c/csswg-drafts/pull/2494
   florian: We have a few media features that let you test input device
            to try and help author of page media-query their way into
            more convenient UI
   florian: We propose it would be useful for an author to know if user
            has sequential or spatial navigation available to them.
   florian: If you're on a thing that lacks a mouse but has spat nav,
            grid is fine. If you lack a mouse and spat nav you likely
            want visually linear. Having a ability to know if they
            match seems useful.
   florian: Web signage would be an example of having neither.
   florian: I made a PR, can we add that to MQ L5?

   fantasai: Reasonable to me. might want to distinguish 4-direction
             navigation and navigation that can go in any direction
             (e.g. joystick).
   florian: I'd suggest opening that as an issue on the feature.
   fantasai: Okay.

   Rossen: If you have a mobile device and are connected to a hub that
           gives you keyboard and mouse, what's the expectation?
   ...
   florian: It's also for authors to not be unreasonable. You can query
            ability to hover when there's a mouse. You could reorder
            the whole page at that time, but it would not be wise.

   smfr: I'm slightly opposed to a MQ that exposes a user setting
         because it's extra fingerprintting.
   Rossen: I also want to echo smfr concern about user fingerprinting.
           We're going through extreme efforts to not bleed anything
           into the user logic level that would ID users with disabilities.
   <tantek> Also want to echo concerns about fingerprinting
   florian: I think this is different where devices that provide this
            always and devices that allow it. If it's an opt-in
            functionality we can say you're allowed to opt-in.
   dbaron: I'm a little skeptical to the fingerprinting concerns because
           the site can tell what the user is using anyway. They'll get
           mouse events.
   smfr: True, if those events go to a frame doing detection. Detection
         without user input is more dangerous.
   fantasai: I would hope we'd get more browsers implementing spatial nav.

   myles: Would MQ enable when you press modifier.
   florian: The MQ would not be on when you press a key, it's on when
            you're in a browser where spatial navigation is enabled.
   myles: So every page gets this MQ when you update your browser the
          internet looks different... being a spatial nav enabled browser
          is different then saying optimize your site for spatial navigation.
   florian: I don't think it means prefer spatnav. It's like when hover is on.
            If I'm about to do a design that would look terrible without
            that feature, I should rethink when you don't have it available.
   florian: This isn't meant as a request for preferring design for spatial
            nav. Design for spatial nav is typically a typical design.
   myles: So if every major browser ships, what would a web author do with
          this MQ?
   florian: If you're on a device with no pointer but there is spatial nav
            it's reasonable to have the same main layout we see. If there's
            neither it's not so great. If you're on a TV with no tab key
            you might want to know.
   smfr: Are there any UA where tab is only form of nav? We should encourage
         people to write web content that works everywhere, not content
         that works with a mouse but is terrible with tab navigation.
         This feels a bit too far. And we shouldn't assume there's UAs with
         only terrible tab navigation. Those are bad UAs.
   smfr: I'd prefer not to have this.

   florian: Summarize the feedback as "hmm maybe, come back with stronger
            use cases"
   smfr: Yeah.
   Rossen: I'd say "hmm not really but if you come back with something
           stronger we'll reconsider"

   Rossen: Anything else for spatial nav?
   florian: Just a request for people to look at what we've done.
   <florian> https://wicg.github.io/spatial-navigation/
   Rossen: That's jihye and florian

CSS Floats
==========

Complex float shapes and bfc sizing
-----------------------------------
   github: https://github.com/w3c/csswg-drafts/issues/2452

   The diagrams being discussed are funky things like placing a series of floats
   into configurations like the following, and then trying to flow content
   (lines or BFCs) into the remaining space in the container.

   +------------------------------------+
   |###                      ###########|
   |###                      ###########|
   |###                      ###########|
   |################         ###########|
   |################         ###########|
   |################                    |
   |################                    |
   |################                    |
   |############################        |
   |############################        |
   |##                                  |
   |##                                  |
   |##                                  |
   |                                    |
   |                                    |
   |                                    |
   |                                    |
   |....................................|

   fremy: [whiteboards]
   fremy: Issue is pretty simple
   fremy: When you have a float and another float later that has a different
          shape constraint. We try and size the BFC in the remaining space
          in the block. If your BFC is taller than the point where size
          constraint changes then you have to do something.
   fremy: In FF every time this happens, a new layout is drawn and we try to
          resize the BFC. It's repeated as many times as needed. It's an
          arbitrary number of relayouts.
   fremy: Chrome looks like some weird behavior where they tried to do it
          but it broke websites.
   fremy: We'd like to find something in the middle

   Rossen: We'll layout in the first available space and then slide the other
           block down until we find space. We're optimizing for not relayout
           so we avoid overlap
   astearns: But you're not using the width of the space.
   Rossen: We are. The BFC might become wider and shorter so you don't
           intersect. When I wrote this in like IE9, you do an intersection
           with all your geometry until you fit the space in your initial
           BFC and you use that.
   iank: Did you change recently?
   Rossen: Maybe but not so much
   fremy: We do first layout and move the box to the first place you fit.
   Rossen: We may not do relayout.

   dbaron: One problem with the description. While making something wider
           generally makes it shorter, sometimes it makes it taller.
           Like when you have an overflow:hidden and the image has a
           fixed width if you make it wider the image gets taller.
   dbaron: You can't assume that it's going to not overlap.
   dbaron: Other thing is these overlap cases happen on real websites,
           especially Wikipedia. Browsers that get this wrong have
           overlapping content in Wikipedia.
   dbaron: In wikipedia cases, FF has like 3 layouts.

   iank: We looked into this. We think our current implementation is a
         little funky. One thing we can do is you look for next available
         area that is unbounded and doesn't have a float blocking it off
         at the bottom.
   Rossen: You can have a zigzag of floats. If you want to start filling
           it with a zigzag you'd push the first BFC down in this case.
   iank: It will skip the zig zag. That's the best 2 pass.
   fremy: 2 pass option, first we try and use the size. If you overlap
          with another float you can try to get the smallest distance
          that you have in the future and try to layout in that narrow
          space. If that's more then the minimum space you do the usual.
   Rossen: What do you mean it'll work in 2 passes?
   fremy: If it doesn't work we do edge behavior, but if it does you find
          the smallest space in the future. You simplify the geometry and
          the remaining space is what you try to use.
   Rossen: Furthest left and furthest right can be disjointed.
   fremy: To get 2 passes. [missed]
   <iank> Here is a testcase I created a while ago...
          https://www.software.hixie.ch/utilities/js/live-dom-viewer/?saved=5370
   florian: So furthest left and right, not shortest distance.

   dbaron: There's one assumption about gecko you made that I think is
           wrong. I think you assumed we did a layout...let me check...
   dbaron: I think we're using intrinisic min-content width for checks
           and not doing layout.
   dbaron: We're doing a layout to determine the height.
   Rossen: That's the one we're talking about. The widths are created
            by the geometry.
   dbaron: I need to read the code...

   iank: One thing to point out is when you introduce margin collapsing
         if the BFC's margin affects position of floats.
   Rossen: If BFC positions after the floats it will have to be in content
           order. Only thing that could be effected is BFC position
   iank: Margins collapsing through in an empty div.
   Rossen: But they're already committed.
   iank: Not until you know the final margins.
   iank: You can have a margin that's further down in the doc that affects
         where the floats are positioned.
   Rossen: You'll have to show me the test case.
   Rune: top margin will collapse through?
   iank: Yes.

   Rossen: dbaron did you get this into your head?
   dbaron: Kinda. There are a set of positions you can reject without layout.
   Rossen: What does 2.1 spec suggest?

   astearns: From my recollection when defining shapes, FF has the right
             behavior where you slide things until it fits.
   Rossen: What do you mean by slide? In fremy picture, would you consider
           sliding?
   astearns: I recall line layout, not BFC.
   Rossen: Line layout is rigid.
   dbaron: Line layout has the same problem because the line can also get
           taller.
   astearns: And trying them at a lower position can change the width.

   Rossen: [draws]
   Rossen: Assuming this geometry is what you have to play with (large
           multi-tiered box) what do you mean by sliding?
   Rossen: Let's assume everything above is taken. First place you can
           position is here. Then you arrive and get to some kind of
           layout. Is sliding on the x axis? one of the geometries?
   dbaron: For both line layout and BFC you have 2 nested loops.
           If you fail to fit....the outer loop is over your y position
           and the inner is over your reduction in width.
   dbaron: If you try and place here and fail because it intersects
           below, you narrow your width to account for the intersection
           and try again. You go until you fit or you fail but there's
           no more floats.
   dbaron: That's the inner loop. Outer loop is we failed to find a
           width for this vertical position so then we move down to
           the next vertical position with more room.
   dbaron: In the simple case what we implement right now is looking
           for the next position where something changes.
   dbaron: Traditional floats it's not that bad, in shapes we should loop

   iank: On shapes we switched shape sizes and BFC, so shape-outside has
         no effect on a BFC.
   dbaron: I think you can exclude a decent amount of things.
   astearns: Changing what you're doing depending on regular float vs
             shape-outside, I don't think that makes that much sense.
             Everything you can do with shapes you can do with a
             sufficient number of floats.
   iank: We have use counters saying it's not used so we switched it off.
   astearns: I'm not that concerned with BFCs but everything we're
             discussing as a problem for BFCs is also a problem for
             placing first line of non-BFC content next to floats.
   iank: Slightly different.

   Rossen: In general what you describe makes sense. I hope there's a
           spec where we can define this. I failed to find anything
           when I implemented.
   astearns: Section 9.5.1
   dbaron: 2.1 defines itfor lines but not well for BFC is my memory.
   dbaron: All float rules in 2.1 are in terms on constraints and this
           is a case where constraints is a bad way of defining it.
   fremy: This is potentially a lot of layout.
   iank: In our new implementation of block layout we went with FF's
         behavior, going through each opportunity.
   Rossen: From user POV that's the better behavior.

   iank: I can describe the 2 pass method.
   iank: The 2 pass one is layout and the based on I think min-content
         you lay out in one of the areas.
   fremy: I proposed you first try the first position. Then you try
          the furthest right space. If it's bigger then the min-width
          you put the element there. That's what Edge is doing. I'm
          fairly confident that'll work almost all the time and then
          you don't have to layout again and again. As an author you
          don't expect this to be super expensive, but it can be.
   <rego> this non-BFC example has overlapping issues on Blink/WebKit
           http://jsbin.com/yebelixowu/1/edit?html,css,output
   florian: If I understand dbaron in the case without minimum, the
            extra part you compress. But if you have the minimum you
            have to do a re-layout.

   dbaron: Most expensive case is [whiteboards]
           a table and you're dealing with a shape that has a really
           rough uneven edge.
   dbaron: So you keep having to relayout.
   iank: This is why we switched this off for shapes.
   fremy: We only do this a few times and then give up and overflow
          the floats.
   fremy: What this would do is it would try to lay it out and if it
          doesn't work it would clear the table under the shape.
   [But not relayout in the larger space after clearing]
   astearns: I'm not sure the example of the narrowest place works
             for this example.
   dbaron: Depends on what the shape is.
   fremy: If the table fits it fits. If it's bigger it goes underneath.

   myIes: I think the point is it's valid, but not good.
   astearns: I see the appeal from an implementation side, but as an
             author I can't imagine wanting this... if an author wants
             the content as far up in the layout as possible so FF and
             half of Chrome is what I expect an author would want.
   astearns: If we have to have a strategy to avoid re-layouts, giving
             up and going past the float may be better.
   fremy: Chrome would like to remove this thing.
   iank: We've removed shapes. We added counters to shapes and barely
         saw usage. I believe shapes now only effect line-boxes.
   iank: As people add lots of floats, sure. Shapes is easy to go into
         every max-length.
   dbaron: I think saying shape-outside doesn't effect BFC is a
           reasonable compromise.
   astearns: We deferred to 2.1 in the spec.
   fremy: [missed]

   dbaron: I think wikipedia looks better with the algo.
   fremy: In most cases you do it in 3 which gets you same result.
   dbaron: It's reasonably common that the narrowest thing will be
           something narrow.
   astearns: Because we counter with shapes and BFCs is small, a
             different rule for BFC is fine. But I'd hate that to be
             a precedent for line layout.
   iank: That's easier because when you do the first pass you know
         the height.
   astearns: I don't mind as long as it doesn't apply to line layout.
   florian: Are you sure problem isn't for lines?
   dbaron: You don't change height of the line depending on it getting
           narrower. If you shrink the line it might get shorter,
           but it won't increase in height. If you shorten the line
           and it gets shorter in height, but it fits, you leave it.
   iank: Always works in 2 passes.
   Rossen: And for BFCs the narrower you make it, the longer it gets
           usually.
   dbaron: You can guarantee the shortening look is 2, the moving
           down can be more loops.

   fremy: 2 proposal. 1 to say BFC....
   Rossen: 1) Do all possible layouts which will optimize for the area.
   myles: 2) layout to widest. If it doesn't fix calculate some numbers
             and if it doesn't fix clear it.
   myles: 3) is always clear it.
   Rossen: We try and find space for the layout and then clear it.
   fremy: Reason we're here is we've found 3) is not good on Wikipedia.
   myles: 1 is what user wants. astearns pointed out option 3 may be
          better than option 2 for user.
   fremy: [missed]
   astearns: Option 1 will often find a > min place to put the BFC.
   fremy: Not as likely.
   dbaron: Depends on the floats.
   dbaron: If your floats are like this (smallest on top right) then
           you'll be fine on the top.
   Iank draws two stepped sets of floats, one of decreasing widths
        on the left, one of increasing widths on the right, leaving
        a stepped diagonal channel

   Rossen: Can I make a proposal? I'm not sure we'll be able to resolve
           without wasting more paper. Holding the whole group on this
           prob. not very helpful. Let's take this over lunch with the
           people interested.
   Rossen: So what we believe is best for user and impl and we'll come
           back after the break.
   dbaron: I think one resolution that solves part of the problem is
           the interaction with shapes and BFC. Prop: BFC flow around
           floats don't care about shape-outside.
   fremy: If you do shape-outside and you do a float BFC is wrong.
          If you do shape outside the entire element floats.
   florian: For FC it's rare enough it's okay.
   Rossen: Shapes with BFC is probably not common. Shapes with text is
           how feature was intended.
   myles: Why do we want this proposal?
   iank: Implementation complex.
   dbaron: Gets rid of worst cases.
   myles: You just look at mins and maxes
   Rossen: Whatever you have with shapes you can make with floats.
   dbaron: Okay, I take back that we might be able to resolve.

<br type="lunch" dur="60min"/>

   Rossen: Let's resume
   <iank> https://www.software.hixie.ch/utilities/js/live-dom-viewer/?saved=5879

   [projector projects a diagram on Rossen's computer]
   * astearns wonders whether the rainbow layout versus the black gloomy
              layout with red glowing eyes means anything
   Rossen: This is the picture we were trying to illustrate on the white
           board. It's intended to illustrate the 3 proposals.
   ACTION Rossen send the image of to www-archive@w3.org
   <trackbot> Created ACTION-872

   fremy: Proposal #3 is when you have an image that overflows you
          just push it down, but that was also leaving a lot of empty
          space. Edge is doing that right now.
   Rossen: We do one layout. We're assuming inline is in top left.
   astearns: BFC tried for full width and intersected with float.
   Rossen: Right. If we don't fit because we intersect, we try to fit
           and end up at the bottom (behavior #3)
   florian: Width is full width of containing block?
   Rossen: Might not. It doesn't fit.
   fantasai: That's super weird.
   Rossen: And super performant!
   <fantasai> Rossen was explaining that once they've cleared past the
              floats into a larger-width area, they don't lay out into
              that larger area but keep the width of the initial layout
              into the float-impacted area.
   <fantasai> This is what I thought was super weird

   astearns: Edge is getting bugs on clearing and leaving the empty space
             above.
   Rossen: Say you have a div and a tiny 0 width float and then another
           small float. In this case there's a 0 width, which we layout
           the BFC next to the 0 width. But it intesects with the other
           float. Then we slide the BFC down. Say it doesn't fit and
           then it's before the small float.
   Rossen: you can argue we can fix our bug with behavior #2 which has
           different drawbacks.
   fremy: Proposal #2 is if it doesn't fit you try one more layout.
          You try to find first place you can fit the min content of
          the BFC you're trying to place. If you can fit the min-content
          you put it there. Downside is you may end up in a situation
          where it goes down if the min-width is too small. You try to
          find somewhere you can fit the min-content and there are no
          floats limiting the height below it. It doesn't require
          any layout. It's guaranteed valid. Drawback is it could be
          min width is very small so you get very tall.
   florian: In this logic if there is several places you can fit do
            you try all?
   iank: The first one. In this case there's three areas. You start
         at the first and if it fits you put it there.
   fremy: If it doesn't you try the second and then the third.
   iank: It's a 2 pass layout and you're trying all areas.
   astearns: It fixes the floated UI issue.

   fremy: Option 1 is Firefox. It's literally trying all possibilities.
   fantasai: Nobody gets the rainbow where it is?
   Rossen: Firefox is rainbow.

   iank: I posted a link at 1:22 pm of a test case for this.
   myles: rainbow is FF, 3 is edge, no one does 2.
   iank: Blink and webkit is undefined.
   fremy: There's one thing I don't like is that.
   Rossen: People use zero-width floats to vertically offset other
           floats. It's the only way to offset floats veritically.
   fremy: No gap here (position the float, then the BFC) means that
          someone really wanted that space.
   astearns: So we have 3 which goes below the floats. 2 which makes
             an attempt based on heuristics. And 1 which does the
             best but is expensive.
   fremy: Also will Chrome disable this for shapes.

   astearns: Rossen said there was a conclusion.
   fremy: [missed]
   group decision: no conclusion
   fremy: If people won't agree on #2...I think we should resolve on 2.
   Rossen: 2 is improvement for us and Chrome, and reduced experience in FF.
   iank: The test case I dumped in IRC we do 2 in.
   <iank> https://www.software.hixie.ch/utilities/js/live-dom-viewer/?saved=5879
   astearns: Would anyone object to specifying the second option?
   dbaron: Who does it now?
   many: no one
   dbaron: I would object to spec something no one does.

   fremy: We can't spec what Chrome is doing. Firefox is option 1.
          That's better then our version.
   astearns: Sounds like we don't agree.
   iank: We can see how expensive 1 is.
   Rossen: We can resolve on 1, ask whomever implements it to spec it.
           If there is a performance concern, we can ask to get some
           data back. In the meantime other implementations... we'll
           do something to fix.
   Rossen: For normative behavior it's hard to argue #1 isn't the best.
           It's up to us to figure out easy engineering tricks to
           optimize as much as possible.

   Rossen: So is there objections to #1?
   fantasai: Sounds better.
   astearns: Objections to spec #1 for BFCs?
   fremy: No special about shapes?
   Rossen: No, nothing special about shapes.
   astearns: If we specify this, then we'd need a floats module.
   Rossen: Let's get a resolution about the behavior we want.
   astearns: Prop: The working group preference is to specify BFC float
             avoidance behavior to match what is spec in 2.1 for inline
             layout float avoidance behavior
   Rossen: ish.
   astearns: To follow those guidelines and spec it well.
   astearns: Objections?
   RESOLVED: The working group preference is to specify BFC float
             avoidance behavior to match the guidelines of what is
             specified in 2.1 for inline layout float avoidance behavior

   Rossen: Where does this go?
   florian: 2.1?
   astearns: I think Floats module. 2.1 is vague on inline.
   Rossen: In CSS positioning the fork happened for floats and position.
   fantasai: I'd recommend not in the same module because positioning
             and floats are quite different.
   Rossen: That's okay. We can take the line out of 2.1 and start a module.
   Rossen: A resolution for that?
   gsnedders: If we're removing a line from 2.1 we should have a resolution.
   astearns: We're not taking out, we're making a module to refine.
   astearns: objections to someone creating a css float module at some point?
   Rossen: I can create the fork and start it.
   dbaron: I can help, but I don't want to be only person.
   astearns: objections to rossen and dbaron creating a css float module?
   smfr: This isn't about float layout, but wrapping behavior. So if shapes
        trigger same behavior doesn't make sense.
   astearns: Shape-outside is in relation to floats and exclusions would tie in.
   fantasai: I think Floats is right place.
   dbaron: I think if I'm putting it with something, it would be block layout
           and we don't really have a L3 for that.
   myles: That's better then proposal. Rather then a new spec we should have
          someone take up stewardship of the block layout
   fantasai: It has way more stuff in it than just floats.
   astearns: Like with any other module the bits and pieces that refer to
             other specs say it's defined over there.
   astearns: Can be floats module, can be wrap. They're pretty synonymous
             for css so I don't care on the name.
   Rossen: Floats is more specific and targeted.
   astearns: Prop: Start CSS 3 Floats Module with dbaron & fremy as co-editors
   RESOLVED: Start a CSS 3 Floats Module with dbaron and fremy as co-editors

   astearns: We have more layout stuff this afternoon.

Received on Friday, 27 April 2018 21:29:05 UTC