[CSSWG] Minutes Virtual F2F 2020-07-27 Part III: Pseudo Elements, CSS Cascade [css-pseudo-4] [css-cascade]

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


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

  - RESOLVED: If a property applies to text and has no dependency on
              box geometry it can be set on ::marker and inherits to
              text of marker (Issue #4568: Which properties to reset
              in ::marker)
  - RESOLVED: Other properties which are not explicitly listed as
              apply to ::marker must not have an affect when set by
              author. UA MUST treat as not applying or treat them as
              set at UA important level but either way author should
              not be able to effect rendering (Issue #4568)

CSS Cascade
-----------

  - chrishtr introduced the proposals for a simplified first version
      of Cascading Layers which starts with a set of defined layers
      (Issue #4969: What are the proper "levels" for managing Cascade
      Layers?).
  - There was support for looking at a simplified first approach to
      Cascading Layers but also some concern that the full scope
      originally envisioned hasn't been fleshed out enough to begin to
      simplify.
  - There are several people that either have or are working on draft
      proposals for Cascading Layers. A taskforce will meet and
      discuss the ideas, make sure they're detailed, and bring the
      discussion back to the group.

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

Agenda: https://wiki.csswg.org/planning/virtual-summer-2020#monday

Scribe: dael

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

Which properties to reset in ::marker
-------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/4568

  oriol: Related to discussion 2 weeks ago where resolved
         text-transform applies to ::marker and set to none by default.
  oriol: Same question for other properties
  oriol: Text-indent property. Seems clear inheriting seems bad
  oriol: Only applies to block container so can affect markers with
         outside position
  oriol: May not be obvious to authors because they're not explicitly
         setting a display value to generate block. It's done by UA
  oriol: Should follow rec in Tables which says if you set
         display-inline:block to element you reset text-indent to 0.
         Since UA gives inline block behavior to outside markers makes
         sense to reset text-indent to 0
  oriol: fantasai went further and proposed to do so with an important
         flag so until we have clear model of outside marker layout we
         prevent authors from changing.
  oriol: Also works for me.
  oriol: There are other properties but let's discuss this
  <fantasai> https://drafts.csswg.org/css-lists-3/#marker-properties

  fantasai: We have a short list of properties that apply to ::marker
            and makes sense to be clear what we're talking about.
            Properties that apply to box/linebox and those that apply
            to text. Not clear distinguishing
  fantasai: Any property that applies to text should inherit through
            ::marker and apply to text
  fantasai: Those that apply to box or linebox- because we don't have
            a layout model these properties should not apply. If they
            do apply they should be forced to particular value
  fantasai: When we have a proper box model we can make those that
            make sense apply.
  fantasai: I would change to list properties that apply to ::marker
            explicitly, and then list properties that inherit to text
            and say you can set on ::marker, don't apply there but
            can still affect contents. If we take that as principle
            these questions become more obvious

  AmeliaBR: You argue color doesn't affect marker as a special thing
            it affects anonymous text box
  fantasai: yeah
  AmeliaBR: If it affects inline text spans you can set on ::marker
            and it goes through. Anything for layout box has to be on
            allow list
  fantasai: I think that's the principle. There's fun with fill and
            stroke where rely on geometry of box
  AmeliaBR: We don't have implementations of that
  fantasai: Fair but still got to be careful
  AmeliaBR: At some point will need to be defined

  fantasai: Proposal: Properties that apply to text with no dependency
            on geometry of boxes can be set on ::marker and inherit
            through to text
  fantasai: Properties that apply to boxes and line boxes do not apply
            yet
  oriol: But text-align Firefox sets to end so if you have multiple
         lines in outside marker with different widths they will be
         aligned to r in ltr
  fantasai: text-align doesn't apply to text, it applies to line
            boxes. So it would not apply to ::marker. Position of text
            I believe is undefined. If an implementation supports
            text-align that's fine but need to make sure it's not
            changeable by author such that they can get different
            results
  fantasai: Either done through magic or through text-align but forced
            to that value and can't be changed by author. Once there's
            a layout model we loosen the restriction

  faceless2: What about when have replaced content with ::marker we
             have to propagate properties which allow you to resize
  fantasai: Replaced content is replaced content that's a child of the
            box. For list-style:image there's sizing rules that are
            particular and size the image to 1em if it doesn't have a
            size, something like that. Would continue to apply
  fantasai: If we want to do something special for images that are
            list markers we can think about that.
  fantasai: Not sure
  faceless2: I think was difference between setting content and
             setting string of content. Bit scratchy on terms. Does
             seem to vary across implementations but a lot of print
             lets you use image and content. Height is propagated to
             image rather than box.
  faceless2: Agree in general with you
  fantasai: On marker set content to URL that's an image. Then marker
            is replaced element and width and height applies
  faceless2: Yeah, I think that's how it works with marker-content:url
             Does vary cross implementations
  TabAtkins: Yeah, WebKit based engines treat the pseudo as replaced.
             Spec requires anonymous element.
  <dbaron> There was a spec draft of css3-content at some point
           defining that behavior.
  <fantasai> yeah, and I think there was some interesting questions
             around web-compat... but if WebKit is able to ship that
  AmeliaBR: But it is something to define to be similar to how list
            style with an image would work to make ::marker case more
            logical if can have it same as content with image. But
            neither is well defined
  emilio: I think Gecko always wraps it in an inline. But content URL
          on element implementations disagree
  fantasai: I think we should dig more into content url becoming
            replaced, but let's file a separate issue
  <faceless2> +1 to that.
  <emilio> fantasai: https://github.com/w3c/csswg-drafts/issues/2889
           is open for `content: url()` already, fyi

  Rossen: With that issue are we ready to resolve?
  Rossen: I see heads nodding
  Rossen: fantasai can you give us proposal ideally with a list of
          properties or a term of art?
  fantasai: I think that's something we need to clean up. Two
            approaches is we reference...the entire fonts spec and
            subset of css-text.
  fantasai: We can also audit all our properties and spec in the
            "applies to" whether it applies to text or not.
  fantasai: For this I think the proposals will be 2: 1) If property
            applies to text and no dependency on box geometry it can
            be set on ::marker and inherits to text of marker
  Rossen: Similar to set of properties for ::first-letter?
  fantasai: No because that can take initial-letter and other fun stuff
  AmeliaBR: Might be to selection or highlight
  fantasai: No, those can't change layout, and this can
  fantasai: Might be similar to ::first-line though
  fantasai: Rule is if property applies directly to text and no
            dependency on box geometry you can set it on ::marker and
            it will inherit to text
  Rossen: Thoughts or objections?
  <dbaron> There might be two parts to this resolution: what we want
           to happen, and at what level the spec needs to define it?

  heycam: Will we define in a ua stylesheet in a spec or make it clear
          what computed style is?
  fantasai: Compute on ::marker and inherit through
  heycam: So it's about if they apply
  heycam: Does that mean text-align:end is not correct?
  fantasai: That's the second resolution.

  Rossen: Objections to if a property applies to text and has no
          dependency on box geometry it can be set on ::marker and
          inherits to text of marker

  RESOLVED: If a property applies to text and has no dependency on box
            geometry it can be set on ::marker and inherits to text of
            marker

  <emilio> faceless2: I don't see the webkit / blink quirk you
           mentioned in
http://software.hixie.ch/utilities/js/live-dom-viewer/?saved=8312
           fwiw. All browsers behave the same
  <faceless2> @emilio If you set a height on that image, the spec says
              it should be "content-replacement" and the width/height
              should apply _to the image_. This is distinct from a
              list of more than one item, when it becomes a
              "content-list" - the distinction tab was making. That
              distinction is not made by the browsers, but if you're
              going to do ::marker { content: url(file.svg); height:
              1em } that's the only way you can adjust the size of the
              SVG.
  <faceless2> @emilio https://github.com/w3c/csswg-drafts/issues/4632
  <emilio> faceless2: uhhh, so the spec doesn't match any browser
           implementation of pseudo-elements? fun!
  <faceless2> Matches at least two print engines though :-)

  fantasai: Second: If a property that's not in the first category is
            not listed in the spec than it does not apply to ::marker
            boxes. If an implementation is taking advantage of its
            infrastructure to handle marker layout it needs to bake
            that its default value in as !important so author can't set
  fantasai: Example we specified that unicode-bidi does apply to
            ::marker. It can be set. We didn't spec that text-align
            does. Gecko uses text-align to position text and that's
            fine but it needs to set !important on that rule so that
            author can't set it and get different results.
  fantasai: When we define the box model we can release that
            restriction. Until then we need to make these so author
            cannot affect
  oriol: All inherited properties except the ones in the resolution
         should be set to initial using !important?
  fantasai: I don't know that...are there properties for the box that
            inherit?
  oriol: text-align chromium just inherits. Should we allow this?
  fantasai: If a property has an affect in an impl and we say it does
            not apply the property needs to be force set so it acts
            like it does not apply
  dbaron: Differences are observable in computed
  fantasai: Yeah. Ultimate goal is they do apply but we need to define
            marker box model for that
  Rossen: Hopefully not painting ourselves into a corner
  fantasai: I don't think we will. Force set will be UA initial
            values. Author might set it on ancestor and we need to
            make sure it doesn't inherit through in unexpected ways

  fantasai: Proposal: Other properties which are not explicitly listed
            as apply to ::marker must not have an affect when set by
            author. UA might treat as not applying or treat as set at
            UA important but either way author should not be able to
            effect rendering
  oriol: May or must on inheritence allowing?
  fantasai: Must. Must behave as no effect

  Rossen: Custom properties as well?
  fantasai: They don't affect layout, no
  Rossen: Those that can be used by custom layout?
  fantasai: I don't think it affects ::marker
  Rossen: I can have it inside and propagate a bunch of properties. If
          you stop from propagating to me I can't do custom layout
  fantasai: Can't do it without display property and it does not apply
            to ::marker or things within it
  Rossen: Same with custom paint?
  AmeliaBR: We can't do background image because that depends on
            layout. So for now probably
  Rossen: Making sure we're not in a corner
  AmeliaBR: Any reason to prevent custom properties from having a
            proper computed value on ::marker? No reason to not let
            read in JS
  fantasai: Only properties affected are those not in the previous
            resolution and not listed in spec but would have affect in
            impl for some reason. Custom properties don't fit into any
            of those categories
  Rossen: Objections to other properties which are not explicitly
          listed as apply to ::marker must not have an affect when set
          by author. UA might treat as not applying or treat them as
          set at UA important level but either way author should not
          be able to effect rendering
  oriol: Clarification. The might in the proposed text should be a must
  <heycam> (it also is impossible to stop custom properties from
           inheriting by setting things in the UA sheet, since all
           doesn't target them)

  RESOLVED: Other properties which are not explicitly listed as apply
            to ::marker must not have an affect when set by author. UA
            MUST treat as not applying or treat them as set at UA
            important level but either way author should not be able
            to effect rendering

  dbaron: Back to previous resolution.
  dbaron: Thing that might still make people unhappy is not substance
          but level of detail where spec desc.
  dbaron: Best thing to do is have editor apply it and bring back to
          group to see if we're okay with level of detail. There's a
          wide range of ways to do that. Seem reasonable?
  AmeliaBR: Qualify our resolution that spec text is subject to final
            approval?
  Rossen: We can always amend a resolution
  Rossen: dbaron's comments will go in the issue

<break type = 15m>

CSS Cascade
===========

What are the proper "levels" for managing Cascade Layers?
---------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/4969

  chrishtr: I can summarize the latest update
  chrishtr: Discussed at previous F2F. I proposed we start with
            simplest set of layers: 2. Base between UA and regular
            stylesheets and then regular stylesheets. Allows simple
            use case where you import a widget. You can define what's
            important to the widget and would break without and than
            use those customizable.
  chrishtr: 3rd part dev marks what's important and can't be
            overwritten. Then with normal cascade if they want to
            override not required they put in their own rule to change.
  Rossen: Allow library or component authors to provide sensible
          defaults and allow consumers...
  chrishtr: To customize properties that are appropriate to customize
  chrishtr: We tried to make this polyfillable so that existing
            websites like nextJS could with small dev effort translate
            existing layers into an ordering of stylesheets on the
            page and the specificities that are equivalent.
  chrishtr: Then sites could use right away in build steps until
            browsers finish implementing

  Rossen: How does multiplicity here have anything additional against
          this? More than 2 layers?
  chrishtr: How would that make it harder?
  Rossen: Yeah
  chrishtr: Maybe there isn't a good reason other than 2 is smallest
            number. Kind of a joke, kind of not. Good principle to
            find smallest solution. Also use cases I've talked to devs
            about seem completely solved. You have component and site
            and I'm not sure you have 3 people
  Rossen: Reasonable. Minimum and sufficient. We have lots of talk
          about how more layers can be used, but I buy this.

  TabAtkins: Me chrishtr and miriam discussed and drilled pretty heavy
             to predefined layers. It's an important aspect. At the
             time we thought we needed 3, but number isn't important.
             Important is one of the big issues about how to make it
             make sense if if you you have arbitrary names and
             ordering you can define those reasonable
  TabAtkins: But as soon as you add other libraries with custom layers
             if you're scoping and interoperate so either normals go
             with your normals then custom names become very
             difficult. If you have 1 library you can change but with
             2 libraries there are too many names.
  TabAtkins: It gets very complex
  TabAtkins: Whereas if we start with a small number of predefined and
             named layers it lets us solve those issues without extra
             problems. You know what default layer is for and you can
             import. Everyone using default will use in roughly same
             way
  TabAtkins: As long as people abide by what the layers mean you'll be
             able to integrate with 3rd party and they just work.
  TabAtkins: I think that's important aspect that needs to be
             considered and we should go with for v1 of custom
             cascade. Having a small number defined handles a lot
  chrishtr: Collapsing layers to 1 at run time is not trivial, miriam
            brought up. If you don't have polyfill offline it's not
            easy

  <dbaron> I thought TabAtkins said something above about an import
           mechanism that collapsed layers, but I didn't see it
           minuted, and I missed some of the detail of what he said.
  <TabAtkins> dbaron, being able to say "import this library's styles,
              but just treat all of them as living in layer X of my
              page (while respecting their own internal layer usage)"

  miriam: I'm interested in finding the simplest possible starting
          place. Agree a few named defined layers is good to start.
  miriam: A few concerns with this proposal where it's so focused on
          polyfill I'm not sure how it's helping. Offhand it supports
          use cases but doesn't do a lot toward them. Are we solving
          the problem or focused on polyfill. I don't know that's not
          solving the problem
  miriam: One feels to me like it could be a good place to start. The
          examples rely heavily on !important and where so I'm not
          sure I see how polyfill is simpler without extra steps.
  miriam: I also think there's a trade off when we go to predefined
          layers. It's that we don't get any modularization control
          which was another potential feature. Ability for final
          author to modularize by collapsing layers together and say I
          don't trust bootstrap to get this but can subsume it. It
          maybe can be handled separately but it's a trade off for
          same layers
  fantasai: +1 to miriam
  fantasai: I understand desire to make this polyfillable but I think
            we have not explored what it would look like concretely
            and take what miriam proposed in January and make that
            real.
  fantasai: What she proposed is a really powerful system that adds
            abilities to cascade and authors would find powerful.
            Simplifying to 2 layers is not that compelling. To try and
            design that would prevent us from trying to understand
            full picture
  fantasai: At this stage I'd rather explore full context miriam
            proposed. Then if there is a subset we want to ship first
            that's fine. But taking on this restrictive set I don't
            think gives us something to build off of to get where we
            want to go
  fantasai: Would rather explore original proposal from miriam, get
            that concrete enough to know what it looks like and have
            specific issues. Shouldn't restrict to polyfillable since
            the whole point is platform isn't capable of what we want.

  chrishtr: Which use cases are not satisfied?
  fantasai: Proposal is flatten out but when working with multiple
            systems you'll have all the problems with cascade. Point
            of this was encapsulate so you don't have specificity of
            selectors cross interacting. You lose that. If you're
            losing :where for everything you can't control specificity
            of selectors. Won't have real effect of cascade layer by
            flattening all selectors
  miriam: Answering it differently it doesn't break any of them but it
          doesn't go the full way in aiding complexity.
  miriam: Something like this scaled back may be useful but I want to
          see in context of how it would expand. I want to see the
          whole system and then what a scaled back impl would look
          like. What's the potential to grow and how are we designing
          first impl so growth is in mind
  chrishtr: :where is only to support polyfills
  TabAtkins: Using :where as polyfill you can do arbitrary layers. The
             details of that is not important
  chrishtr: You can have a build tool that sticks things in :where
            clause. Laying out what I thought of

  emilio: Most use cases I read about are things conflicting inside
          same cascade origin. Rather than inventing new ones, sorting
          order in cascade is specificity and then source. Would it
          make sense to add a 3rd so it's user defined, then
          specificity, then source.
  emilio: Multiple cascade explodes when you have shadow dom. With
          this you don't have the problem and solve use cases.
  chrishtr: Would that take care of non-override-able library rules?
  emilio: Potentially. You can define this number is sort of like
          cascade origins
  miriam: I think difference is only if layers exist above or below
          shadow dom in cascade which is still open
  emilio: Yeah. And I think this is more efficient to impl
  TabAtkins: I think for spec complexity we'd have to impl this as new
             specificity.
  <miriam> +1
  emilio: Okay, that makes me less scared about performance
          implications

  dbaron: I was trying to think about something TabAtkins said about
          an import mechanism that imports something with stuff from
          both layers and then collapses
  dbaron: 2 ways to do that and not sure which talking about. One is
          pretend the layer never existed. Other is sort them in there
          as though layers and then collapse to one layer
  dbaron: I guess that doesn't work. Now that I said it out loud.
  TabAtkins: My intention was there is a strong case to not interleave
             but still let the library use layers for code
             organization. Sort the rules specificity wise and then
             collapse to one layer to interact with your pages
  dbaron: Not sure how that works if you interleave with non-collapsed
          rules
  TabAtkins: I'm thinking it just lives on a layer. Then interoperate
             with other rules in that layer
  dbaron: So it breaks some author assumptions who put in 2 layers
          about what overrides what?
  TabAtkins: Shouldn't. Their layers respected in their own thing.
  dbaron: That's what I was starting to think but convinced myself it
          made no sense
  TabAtkins: Definitely need more thought time on this topic.

  Rossen: Going back to direction...2-layer approach vs continue to
          explore full set of options from jensimmons and miriam.
          Where are we swaying?
  Rossen: One thing I didn't grasp is would the 2 layer prevent us
          from expanding later down the path to get full set of layers?
  TabAtkins: I don't think it does. Particularly when we do it with a
             naming structure and we can distinguish between these
             defaults.
  Rossen: Same mental model as css properties then variables then
          custom properties? So we have properties now we're adding
          variables and we'll then expand
  TabAtkins: yes
  fantasai: I'm not convinced this requires naming. I would like to
            see us try and draft something more concrete.
  fantasai: If we have multiple proposals that's interesting, but I
            haven't seen one that represents what we discussed in Jan
            and until we have one I don't think locking down is a good
            idea
  TabAtkins: fantasai and I intend to put out a draft spec and will
             have miriam in that
  fantasai: florian has also drafted ideas so we can talk together and
            see if we align or we come up with multiple proposals
  <dbaron> I'm definitely interested in seeing more alternatives.

  Rossen: Last time we discussed we agreed to have a smaller
          taskforce. Is that forming?
  many: yes
  Rossen: fantasai are you willing to take this on and get it
          organized?
  chrishtr: miriam would you prefer to do it or have fantasai do it?
  miriam: Fine if you take that
  fantasai: miriam what's your time zone?
  miriam: Mountain
  astearns: So I think we're done with this issue

Agenda Setting
==============

  astearns: Only remaining issue is one we left off because tantek
            wasn't on and tantek still isn't on.
  astearns: We'll push that to tomorrow
  fantasai: One question. Inline and text is on Tuesday but Jonathan
            is only available half the day
  astearns: I did talk to him about choosing most important issues to
            him to put first part of day
  fantasai: Wouldn't it make sense to push to Thurs or Fri?
  * dauwhe is away Wed-Fri
  astearns: Thurs is full with constraints. Friday is Houdini. If
            there's overflow we can do that overflow on Friday
  astearns: If he has to leave before we get to everything he's
            interested we can push it out

  chrishtr: I think it would be nice for weekly calls to use system so
            anyone who wants to can turn on video. Maybe we can have a
            poll
  astearns: We can start. We did try all video on webex and it was
            terrible
  chrishtr: I think some other tech than webex
  TabAtkins: We can always use meet because it has call in
  Rossen: This is something astearns and I were discussing. Being able
          to take visual cues is helpful, but webex is not it.
  Rossen: We'll continue to work on it.
  chrishtr: Great

  Rossen: We're closed on previous, forming a task force. Anything
          else?
  Rossen: I think we're done. Thank you for calling in. Great to see
          you all.

Meeting: end

Received on Monday, 3 August 2020 23:44:06 UTC