[CSSWG] Minutes TPAC F2F 2017-11-07 Part IV: Constructible Style Sheets, ::selection cascade, Multicol [css-pseudo][css-multicol]

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


Constructible Style Sheets
--------------------------

   - RESOLVED: Start working on constructible style sheets in WICG

CSS Pseudo Elements
-------------------

   - The ::selection cascade issue (https://github.com/w3c/csswg-drafts/issues/374 )
       skipped, since issue was filed with incorrect conclusions.

CSS Multicol
------------

   - RESOLVED: Apply proposed edit from Oct 2013 to spec.
        - Text from Issue #1739: Column rules are painted just above
            the border of the multicol element. For scrollable multicol
            elements, note that while the border and background of the
            multicol element obviously aren't scrolled, the rules need
            to scroll along with the columns.
   - RESOLVED: Remove sentence 2 and 3 and adding clarification about
               the principal box. (Issue #1738)
   - RESOLVED: Remove example XVII: "If a tall image is moved to a
               column on the next page to find room for it, its natural
               column may be left empty. If so, the column is is still
               considered to have content for the purpose of deciding
               if the column rule should be drawn."
   - RESOLVED: column-span applies to elements lower than the first
               level of descendants as long as it's part of the same
               formatting context. (Issue #1072)
   - RESOLVED: If the fragment before the spanner is empty, nothing
               special happens; the top mbp is above the header, and
               it's just an empty fragment.
   - RESOLVED: autofill rebalancing applies to the immediately
               preceding column row of a spanning element only. (Issue
               #1075)
   - RESOLVED: Behavior already defined in CSS Fragmentation; reference
               that and file any further issues there. (Issue #1894)

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

Agenda: https://wiki.csswg.org/planning/tpac-2017#proposed-agenda

Scribe: eae

Constructible style sheets
==========================
   document: https://tabatkins.github.io/specs/construct-stylesheets/

   ericwillinger: Common use case is with shadow dom. People will
                  construct a stylesheet inside a shadow root. Creates
                  a thousands of stylehseets.
   ericwillinger: Could have browser logic that shares them. A better
                  way might be to have a js api to explicitly share it.
   TabAtkins: We'd like style sheet parsing to be async. Will decide
              later between an async constructor or factory functions.
   astearns: dglazmen had some comments he wanted me to forward: He's
             really happy and wants to use it right away.
   astearns: If you have a doc with a style node, he'd like to be able
             to add a style to the document through that.
   TabAtkins: Want to be able to replace a stylesheet with a
              constructed one?
   astearns: Yes, and further also for link elements. The link element
             question could remain open but he'd really like it for the
             style element.
   TabAtkins: One of the issues with applying styles to shadow roots is
              wanting to apply them to all shadow roots. You want to
              apply UA styles that are easy, trivial, to override. One
              possibility for that is defining another origin that
              lives just before author style. Might be done with
              constructor for constructible style sheets.
   TabAtkins: Some discussion in shadow dom around this. This is one
              possibility.

   Rossen: Do you need a resolution?
   TabAtkins: More than one implementor is usually needed. Any takers?
   TabAtkins: We have a consumer, which is useful, but no other
              implementor as of yet.
   dbaron: Don't know yet.
   smfr: Seems interesting, not high priority at the moment.
   Rossen: On edge side, not opposed to it but it's interesting and
           needed. Not a priority at the moment.
   Rossen: So two interested parities but no commitments.

   RESOLVED: Start working on constructible style sheets in WICG

CSS Pseudo Elements
===================

::selection cascade
-------------------
   github: https://github.com/w3c/csswg-drafts/issues/374

   TabAtkins: The original part of the issue: I assumed my testing had
              proven that there was a simple subset we could agree on.
              A few weeks ago Greg posted that not to be the case.
              David recently commented and linked to data dating back
              many many years.
   TabAtkins: The probable issue is that it's still more complicated
              than I though it was. We need to figure it out and be
              consistent.
   fantasai: We looked at this many times in the past. Once was when
             dbaron posted all options, another time was during pseudo
             discussion, when we realized we couldn't do certain
             options due to interop/web compat.
   Rossen: You're saying spec text is not accidental?
   fantasai: Yes.

   TabAtkins: My memory are hazy but I said something like "all
              browsers agree on behavior but all disagree with spec".
              We need to either update spec or change behavior.
   dbaron: When is spec text from?
   TabAtkins: In pseudo
   florian: 2-3 years old?
   TabAtkins: More than one year old.
   florian: Less than five.
   dbaron: 3.3 in pseudo spec links to substantially more info that
           lead to the text.
   TabAtkins: The point is: As far as I can tell no implementing
              matches the spec. We're trying to do more of these and
              would be good to have at least the first one match the
              spec.
   TabAtkins: Someone need to write good tests for it.

   dbaron: Hard part is how the selection styles interact with each
           other across elements.
   dbaron: This is the reason gecko hasn't unprefixed it.
   TabAtkins: The only actionable point is "make this all better", my
              original premise was ruined by you all pointing out I was
              wrong.

   Note: Previous WG discussion on ::selection was
         https://lists.w3.org/Archives/Public/www-style/2014Dec/0299.html

<br type="15min">

CSS Multicol
============

z-order of column-rule and column scrolling
-------------------------------------------
   github issue: https://github.com/w3c/csswg-drafts/issues/1739

   rachelandrew: These first three issues are ones I dug out from the
                 mailing list archive. They're all quite old.
   rachelandrew: Things we've discussed, not sure what to do so
                 bringing them up here.
   rachelandrew: First one. z-order for column scrolling.
   rachelandrew: Suggested change to wording.
   rachelandrew: Is this something we want to add into the spec or do
                 we need to discuss it?

   florian: Do we have interop on the proposed wording?
   rachelandrew: There is an issue with overflow which as resolved a
                 while ago, interop on the issue across browsers as far
                 as I can tell.
   rachelandrew: Firefox does not support spanning.
   Rossen: Firefox is different due to that.
   rachelandrew: Right, relating to the fact that they haven't
                 implemented it.
   florian: The things that is linked to is not a minimized test case.
            Is an example.
   rachelandrew: Correct.

   Proposed resolution: Apply proposed edit from Oct 2013 to spec.
   florian: A minimal test case would be good, but I'm fine with it.
   Rossen: There is one in the github issue.
   rachelandrew: I'll add a test as part of spec change.
   florian: I volunteer to review it.

   RESOLVED: Apply proposed edit from Oct 2013 to spec.

Text describing column boxes as block container boxes
-----------------------------------------------------
   https://github.com/w3c/csswg-drafts/issues/1738

   rachelandrew: This is another text change for column boxes.
                 Basically there is a section in the spec, example 9,
                 about container boxes.
   rachelandrew: There was a proposal to have the second sentence to be
                 omitted.
   rachelandrew: There was no objections yet no edit took place. Looks
                 like it was dropped.
   rachelandrew: Idea of containing block not defined in spec.
   TabAtkins: I agree, go ahead and kill second sentence
   <TabAtkins> Kill "That is, column boxes behave like block-level,
               table cell, and inline-block boxes as per CSS 2.1,
               section 10.1, item 2 [CSS21]."

   rachelandrew: Should we remove either or both of these sentences?
   florian: Remove 2nd and 3rd?
   fantasai: I don't think we should remove the 3rd.
   TabAtkins: Default case applies.
   florian: This might be read as shutting down other properties that
            could apply unless specified.
   fantasai: Behavior when you apply position relative needs to be
             defined.
   TabAtkins: Doesn't turn column boxes into abs containing blocks is
              fine, makes sense, should be explicitly informative. As
              written it is bad and should be removed.
   rachelandrew: A clarification would be useful.
   fantasai: It might help to clarify that the multicol container is
             the principal box (not mentioned in spec) and that the
             column boxes are anonymous.
   fantasai: For example position: relative doesn't apply to column box.
   rachelandrew: Makes sense to me.
   Rossen: Super good clarification. We all know this yet it isn't
           mentioned anywhere.
   Rossen: Common source of confusion.

   rachelandrew: What are we suggesting to remove here? Turn third
                 sentence into a note?
   TabAtkins: Yes, and also make it clear that it clarifies that
              nothing you do on the column box...
   fantasai: The part about being a principal box should go in sentence
             two. We should fix that.
   fantasai: We don't have a good term for that box now, we refer to it
             as the multicol "element", separate issue.
   gregwhitworth: One thing that would be beneficial is having an
                  example in there. Saying principal box isn't
                  necessarily going to help web developers clarify.
   Rossen: Similar to the table example in 2.1, speaks volumes when
           people see it
   Proposed resolution: Remove sentence 2 and 3 and adding
       clarification about the principal box.

   RESOLVED: Remove sentence 2 and 3 and adding clarification about the
             principal box.

Proposal to drop example XVII
-----------------------------
   github issue: https://github.com/w3c/csswg-drafts/issues/1740

   rachelandrew: Again, raised in 2013.
   rachelandrew: This example was dropped for reasons mentioned in
                 issue.
   rachelandrew: No resolution.
   rachelandrew: Perhaps needs a clearer example.
   Rossen: OK. Any opinions?

   RESOLVED: Remove example XVII: "If a tall image is moved to a column
             on the next page to find room for it, its natural column
             may be left empty. If so, the column is is still
             considered to have content for the purpose of deciding if
             the column rule should be drawn."

Column Spanning Issues
----------------------
   github issue: https://github.com/w3c/csswg-drafts/issues/1072

   rachelandrew: Three issues all referring back to each other. Main
                 issue is 1072. Propose we resolve it first and then
                 refer back to it.
   rachelandrew: Quite a long issue. dbaron raised it and florian
                 commented quite a lot.
   rachelandrew: Quick summary: When you got an element with column
                 spanning and they're not a direct child of the
                 multicol box container and they're still spanning. The
                 definition says what happens to the ancestor. A good
                 example would be a section with headings and one of
                 them has span all.
   rachelandrew: Was discussed on a call in May, June, and then went
                 back to discuss on github and then stopped.
   rachelandrew: Perhaps we shouldn't allow these nested things to span.

   fantasai: There was some comments on allowing nesting of block but
             not things within another formatting context. Seems like a
             reasonable compromise.
   fantasai: I don't think it is particularly useful for it to pop out
             of a formatting context root, as long as spanners nested
             within regular block elements work. The restriction
             makes sense from a behavior and implementation point of
             view.
   fantasai: It is what I'd expect to happen, and it is what
             implementations seem to do. Makes sense to specify that
             behavior.
   rachelandrew: I'd be happy to draft that up, makes sense to me.
   fantasai: Happy to review spec text.

   [discussion about florian's comment in issue 1072]
   <iank> https://github.com/w3c/csswg-drafts/issues/1072#issuecomment-299097552
   <iank> ?
   fantasai: Arbitrary depths but you cannot cross a formatting context.
   fantasai: Header inside a <section> is a good example.
   Proposed resolution: Column span applies to elements lower than the
       first level of decendence as long as it doesn't cross a
       formatting context

   RESOLVED: column-span applies to elements lower than the first level
             of descendants as long as it's part of the same formatting
             context.

Background and borders for spanners
-----------------------------------
   github: https://github.com/w3c/csswg-drafts/issues/1072#issuecomment-299076034
   <nainar> Board images: https://photos.app.goo.gl/sm5cc7q8pywbSF0P2

   fantasai: What if the spanner is the very first element in an
             element that has borders and margins and paddings?
   fantasai: Is the top margin pushed to after the spanner?
   fantasai: For an inline what florian suggests in the issue that would
             be broken, what would we do in that case?
   rachelandrew: I'd like to see what implementations do at this point.
                 Haven't looked at that.

   <fantasai> http://software.hixie.ch/utilities/js/live-dom-viewer/?<!DOCTYPE html>%0A<span style%3D"border%3A solid%3B">%0A 
<span style%3D"display%3A block">splitblock<%2Fspan>%0Arest of text<%2Fspan>
   fantasai: Here is an example with a block splitting an inline. You
             can see that the border and then the split inline.
   fantasai: There is a lot of fragmentation bugs as well. Entirely
             separate pile of "fun". Right now we're only dealing with
             the multicol aspects. What are the implications for this
             split.
   [fantasai gives an example with spanners and multicol and borders]

   iank: What appears if the spanner is the first child? What do you
         want to appear before the spanner? Marking border padding?
   fantasai: Yes
   iank: Makes sense
   fantasai: I don't know if I want that, but it is what would fall out
             from it being analogous.

   <dbaron> The in-progress Gecko implementation treats it as analogous
            to block-in-inline splitting.
   <dbaron> although it's a little harder in a few ways, and a little
            different in others.

   Rossen: The example is having a section inside an element with
           border?
   [fantasi draws an example]
   fantasai: We have a multicol with some stuff and a section element,
             then we have an h2 and the h2 is a spanner.
   fantasai: The section has a border.
   fantasai: We definitively have a border around the section. The
             question is where the border goes.
   fantasai: Remember the header is inside the section.
   fantasai: First piece of border is before the split. Then you have
             the header and then the border continues.
   fantasai: If that is bad behavior we could say that this first
             empty fragment doesn't exist and then the border would
             start after the header
   Rossen: For the purpose of margin collapsing, when we take the
           spanner out of the element, the right element, assuming it
           was the only content, then margin collapsing with the red
           border would change.
   Rossen: If the element is effectively taken out of the flow of the
           containing blocks flow and then I don't see a reason why
           this element would be breaking the position of the top
           border of its parent.
   Rossen: Now that the spanner is outside of the containing block and
           margin collapsing would change, the red box in the digram
           could be pushed further down due to margin collapsing.
   fantasai: So you're saying it would normally be positioned here but
             there being no margin between them there would be no space
             between them and the margin would not be in between. I
             think that is a pretty good point, arguing for leaving it
             up here.
   rachelandrew: It is a little weird, if that was one line of text up
                 there it is still odd.
   iank: Effectively the spanner is treated as out of flow positioned?
   Rossen: Yes, pulling it out of flow is getting tricky. We're there
           already.
   iank: That would mean that margins would collapse though it.

   [something from jensimmons that was missed]

Scribe: TabAtkins

   fantasai: I think rossen's argument about the margin collapsing
             behavior is critical. Normally, the <section>'s margin top
             is never going to be between the section's header and its
             first paragraph. If we go with the behavior where the top
             fragment doesn't exist then the margin is between the header
             and first paragraph. It should be above the header.
   fantasai: That for me is the compelling argument to not do anything.
   jensimmons: I can see a use-case where <section><h2/>content is the
               proper markup for content, and for small viewport sizes
               it's styled one way, and for large it's done in this
               diagram style.
   jensimmons: I think it's fine if we let it break the section box.
   rachelandrew: I think so too. Just need a resolution for that so
                 it's tied to the spec.
   fantasai: I think this is a common situation, just question of where
             to draw top mbp; it goes above the column-span header.
   rachelandrew: Happy with that.

   RESOLVED: If the fragment before the spanner is empty, nothing
             special happens; the top mbp is above the header, and it's
             just an empty fragment.

Interaction between column-span and column-fill
-----------------------------------------------
   github: https://github.com/w3c/csswg-drafts/issues/1075

   rachelandrew: The multicol spec doesn't define the interaction
                 between column-fill and elements with column-span
   rachelandrew: Says content is auto-balanced across columns.
   iank: So this is - if you've got a bunch of text before the spanner,
         does it just fill the first column, or does it balance?
   TabAtkins: Examples show it balancing.
   dholbert: Not sure that's what's being asked, it's something about
             pagination...
   fantasai: So column-fill takes auto, balance, and balance-all
   fantasai: Balance means the last page is balanced, all the rest you
             fill the first column, then the second, etc. When you run
             out of content that'll fit (a forced break, or a big
             chunk that won't fit on the page) you just stop, don't balance.
   fantasai: balance-all means you *do* balance on all pages.
   fantasai: Auto means you don't do any balance at all.
   fantasai: column-span says if you have content before the span, the
             span is a break (like a page-break), but you always
             balance the content before the spanner.

   fantasai: So question in issue is, if you have a span in the middle
             of a page, the content after the span is balanced
             depending on the column-fill property.
   fantasai: But if there's another spanner two pages down...
   fantasai: The rule "balance the content before the spanner", does
             that apply to the previous pages ?
   fantasai: I don't think that makes sense - a page break should limit
             how far you balance.
   TabAtkins: Agree.
   fantasai: The row of boxes that get terminated by the spanner is the
             row that is forced to balance. Previous column rows don't
             balance by default (that depends on column-fill)

   Rossen: ...
   TabAtkins: The concept you're talking about is the column row
   Rossen: But not previous page
   TabAtkins: By definition those are previous column rows.
   fantasai: You can have multiple column rows per fragmentainer.
   fantasai: Generated by spanners and page breaks.
   Rossen: So autofill rebalancing applies to the immediately preceding
           column row of a spanning element.
   <dbaron> ^^ I agree

   RESOLVED: autofill rebalancing applies to the immediately preceding
             column row of a spanning element only.

   dholbert: [gives a questionable example, we're trying to figure it
             out]

How does abspos work in a containing block split by a spanner
-------------------------------------------------------------
   github: https://github.com/w3c/csswg-drafts/issues/1894
   <Rossen> https://codepen.io/rachelandrew/pen/rYeagj?editors=1100

   rachelandrew: It's not clear how abspos works when the containing
                 block is split by a spanner.
   rachelandrew: I built an example, we don't have interop, it's all
                 very strange.
   rachelandrew: How should we resolve this?
   TabAtkins: My first instinct is that the containing block is
              generated by the fragments.
   dbaron: That's the easiest to implement for us, and what we were
           planning to do unless someone disagreed.
   Rossen: It's not what we do.
   iank: We were looking at multicol and abspos; dunno if
         webcompatible, but would be nice to have the fragment that
         contains the abspos do it.
   dbaron: What's hard about that is the only case where you don't know
           the abspos cb at the time you construct it.

   TabAtkins: Situation iank was talking about earlier, a large
              containing block at the end of a column, part of it is at
              the top of the next column.
   TabAtkins: What happens there?
   dbaron: That happens during fragmentation, and this happens during
           frame construction
   dbaron: fragmentation happens during layout
   TabAtkins: CSS doesn't treat those two separately...
   TabAtkins: per spec
   dbaron: In ours you have to duplicate the logic then, in each place.
   iank: Ah, we do some layout.

   dbaron: The other two options are (1) always use first fragment, (2)
           union the fragments
   TabAtkins: Don't union, that's bad
   dbaron: I think the "per fragment" is the sanest thing. Did the
           tests show something else?
   rachelandrew: I think authors would prefer what grid does, unsure
                 what tests show
   rachelandrew: In grid, if you have an abspos grid item, the grid
                 area generates the containing block.
   rachelandrew: Unsure about usage in multicol right now.
   TabAtkins: (because multicol sucks on the web)
   iank: Is there use-cases for wanting an abspos to span across a
         spanner?

   dbaron: There's another set of issues we haven't resolved yet; if
           you have an abspos whose cb is part of a pagination
           sequence, and it has a large negative or positive top that
           pushes it up or down into a different fragment, I don't
           think we've defined that yet.
   iank: It would be nice if a box has fragmented, and the abspos is in
         that fragment, we consider that fragment as the cb
   fantasai: What you want is that if you have a web page in screen media
             and it's laid out all as abspos, you want it to paginate in
             a sane way--in a way that approximates the screen layout--
             and you can't get that with such a proposal.
   fantasai: We want a page that is laid out with abspos to print out
             well for the user.
   dbaron: The other model that gets you something in that direction is
           you consider the cb to be the entire fragment chain.
   TabAtkins: What's meant by that?
   dbaron: Pretend all the fragments are together; top is relative to
           first frag, bottom is relative to last, etc...
   fantasai: Yes. This is all defined in css-break-3

   florian: Can I ask what we're trying to solve here? If we want to
            solve printing pages as they exist, I think Fragmenting
            gets it right; something else, what?
   dbaron: Less about that, more figure out what engines should do for
           a feature that's already been specced for a decade.
   fantasai: I'm okay with that behavior (spanner causing the break)
             being different form the general fragmentation behavior. I
             think that's a weird case.
   fantasai: Important to make regular fragmentation make sense, though.
   dbaron: I think it makes sense to make this agree; I just didn't
           think about that when I filed the issue, because impl-wise
           it's separate in our code.

   [dbaron draws an example]
   [There are three columns, split by a spanner]
   [there's an element which starts in the second column above the
       spanner, then continues into the third column above the spanner,
       then finishes partway through the first column after the spanner]
   dbaron: If an abspos is in the element, and you say "top:0;
           bottom:0", it'll start in the second column, span across the
           third, and across the first after the spanner.
   rachelandrew: Are we happy to resolve on that behavior?
   [general agreement]
   florian: I think most of these use-cases are best solved by page
            floats, not abspos, but if you have a use-case not solved,
            please bring it up.

   RESOLVED: Behavior already defined in CSS Fragmentation; reference
             that and file any further issues there.

Received on Saturday, 23 December 2017 15:02:54 UTC