[CSSWG] Minutes Telecon 2023-02-15 [css-position] [css-align] [css-color]

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


Administrative
--------------

  - The team will have multiple two hour calls over several weeks in
      lieu of a F2F.

CSS Position
------------

  - RESOLVED: stickypos makes a stacking context, just like fixpos
              (Issue #1053: position:sticky should create a stacking
              context)
  - RESOLVED: Clarify that due to the box-tree re-parenting, an
              ancestor outside the dialog can't be a fixpos CB for
              descendants of the dialog (Issue #8040: Containing block
              of dialog fixed position children)
  - Diagrams and demos will be added to issue #8040 to help resolve
      what exactly is the CB of a fixpos descendant of the dialog.

Publications
------------

  - RESOLVED: Publish new WD of Position 3 and Align 3

CSS Color
---------

  - The group reviewed argyle's proposal for issue #7937 (Let's
      finally settle contrast-color() syntax).
      - There were parts that team members were interested in
          exploring more such as having short keywords to give some
          reasonable defaults.
      - The proposal would not allow for multiple algorithms which
          could be necessary to accommodate the current wcag
          requirements.
      - There's a desire to explore the syntax further as well as
          other functional algorithms.

===== FULL MEETING MINUTES ======

Agenda: https://lists.w3.org/Archives/Public/www-style/2023Feb/0007.html

Present:
  Rachel Andrew
  Adam Argyle
  Rossen Atanassov
  Tab Atkins
  David Baron
  Oriol Brufau
  Tantek Çelik
  Emilio Cobos Álvarez
  Yehonatan Daniv
  Elika Etemad
  Robert Flack
  Simon Fraser
  Paul Grenier
  Chris Harrelson
  Brian Kardell
  Jonathan Kew
  Peter Linss
  Alison Maher
  Eric Meyer
  Miriam Suzanne
  Lea Verou

Regrets:
  Daniel Holbert
  Chris Lilley

Chair: Rossen

Scribe: TabAtkins
Scribe's scribe: fantasai

Administrative
==============

  Rossen: As said on the private list, no actual f2f for now.
  Rossen: Instead the proposal is to have two 2hr calls for two
          consecutive weeks, spaced by a day. Wed 2hr, like today, and
          the same on Friday.
  Rossen: Unless there are alternatives or strong reasons to not do
          it, we'll schedule that.
  Rossen: Gonna be mid-March, either 8/10/15/17 or 15/17/22/24
  fantasai: Does it make sense to do Friday? That's late for Europe
            and Japan on a Friday...
  Rossen: Yeah, the alternative of not having a day between meetings
          would make it harder for more folks.
  Rossen: Other chance is not do Wednesday, do Tue/Thu instead
  TabAtkins: why not Monday Wednesday?
  TabAtkins: I don't have a strong opinion either way, but seems odd
             not to consider it
  <dbaron> I agree that Friday is problematic for many folks.
  <dbaron> (was going to raise that as well)
  Rossen: Let's agree on having two 2hr calls on two consecutive
          weeks. We'll dial in the exact dates asap on the private list

CSS Position
============

position:sticky should create a stacking context
------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/1053

  fantasai: Simon raised an issue a while ago that stickypos should
            make as tacking context, like fixpos
  Rossen: Is there a reason it's not already a stacking context?
  smfr: WebKit's been shipping that way for a long time
  TabAtkins: Previously, wasn't necessary
  TabAtkins: but now in chromium it is
  TabAtkins: Wanted to check that we're okay with the change to the
             spec
  <TabAtkins> Oh sorry, stickypos stacking context isn't in the spec;
              fixpos is. So we will still need to make an edit.
  Rossen: Objections?

  RESOLVED: stickypos makes a stacking context, just like fixpos

Containing block of dialog fixed position children
--------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/8040

  smfr: If you have fixpos inside a dialog, and dialog is on top
        layer, what's the containing block of the fixpos?
  smfr: Dialog can be abspos *or* fixpos itself
  smfr: If dialog is abspos, what's the fixpos behavior when the user
        scrolls the document?
  smfr: If dialog has a transformed ancestor, does that affect the
        containing block for the fixpos descendant?
  smfr: Both of these are impacted by whether the dialog itself is a
        CB for the fixpos
  smfr: The top layer is kinda viewport-like

  chrishtr: Is there interop on this or not?
  emilio: I think we don't enforce dialog to be a fixedpos dialog, but
          we want to
  emilio: the containing block chain is pretty weird otherwise
  emilio: or at least we need to spec that any fixedpos inside the top
          layer are also in the top layer
  emilio: otherwise, breaks the assumption that the containing block
          ... the in-flow content is laid out before the fixedpos
  emilio: so unclear how the hypothetical positions work if you don't
          at least define that they go in the top layer as well
  emilio: in that case might want to make the dialog a containing
          block as well, much easier
  emilio: don't see the point to have a fixedpos and not want it in
          the top layer
  <chrishtr> I don't think chromium makes dialog a containing block
             either

  fantasai: I think making it in the top layer makes sense
  fantasai: I can imagine that you might not want the dialog to be a
            fixpos CB
  fantasai: because you might actually want something outside the
            dialog wrt the viewport, while having the dialog open. Can
            definitely imagine that
  emilio: At that point we've given a special way to put something in
          the top layer...
  TabAtkins: what's the concern about putting in the top layer? dialog
             is already there
  emilio: It might be fine, I need to think more about it

  chrishtr: Seems like it'll be okay to me
  chrishtr: The fixpos goes in the top layer, and if the dialog
            scrolls the fixpos won't scroll with it
  chrishtr: That seems doable and not problematic; I assume that's how
            browsers would automatically work
  smfr: What do you mean by "in the top layer"?
  chrishtr: z-order
  smfr: This is about CB, not painting order
  chrishtr: Right, if the fixpos has a transformed ancestor within the
            dialog, that'll trap the fixpos as normal. If the
            transformed ancestor is outside the dialog, it won't
            affect it - it's specified as re-parenting in the
            rendering tree.
  smfr: So if you have a nested set of position:fixed do they all go
        in the top layer?
  chrishtr: top layer is just re-parenting and stacking context, it
            doesn't affect the CB

  chrishtr: Maybe we should make some demos and come back to the group
  Rossen: Sounds reasonable
  Rossen: Ok let's collect some examples in the issue

  emilio: I think there's consensus that a transformed ancestor of the
          dialog isn't a CB for the fixpos, due to the re-parenting.
  proposed resolution: Clarify that due to the box-tree re-parenting,
      an ancestor outside the dialog can't be a fixpos CB for
      descendants of the dialog
  <emilio> +1
  <fantasai> wfm
  <masonf> +1
  <chrishtr> +1

  RESOLVED: Clarify that due to the box-tree re-parenting, an ancestor
            outside the dialog can't be a fixpos CB for descendants of
            the dialog

  (Still unresolved: what exactly the CB of a fixpos descendant of the
      dialog is.)

Publications
============
  github: https://github.com/w3c/csswg-drafts/issues/6900

  fantasai: We'd like to publish Position 3 with the stickypos change
            we just resolved.
  fantasai: Also publish Box Alignment
  fantasai: Some of the issues we fixed crossed between these specs.
  Rossen: Objections for new WD of Position 3 and Align 3?

  <fantasai> https://drafts.csswg.org/css-position-3/#changes
  fantasai: We did a substantial number of fixes to the staticpos
            section, I'd definitely encourage people to look at that.
  <fantasai> https://drafts.csswg.org/css-position-3/#abspos-insets
  fantasai: Right now we still have an old-style "two versions" of the
            spec - rewritten and non-rewritten. Probably want to drop
            the non-rewritten soon, so if people can review the
            rewritten is correct it would be great
  fantasai: Particularly #abspos-insets, most of the changes are in
            that section
  <fantasai> https://drafts.csswg.org/css-position-3/#abspos-layout is
             also a major part of the replacement (but less changes
             lately)
  fantasai: So requesting to repub, and hopefully in next repub we can
            drop the old section
  Rossen: Not hearing objections
  <astearns> +1 to publish

  <fantasai> https://drafts.csswg.org/css-align-3/#changes
  Rossen: no objectiosn to Align 3 pub

  RESOLVED: Publish new WD of Position 3 and Align 3

CSS Color
=========

Let's finally settle contrast-color() syntax
--------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/7937

  lea: The primary problem we couldn't settle on was what to call
       foreground/background. We resolved to distinguish them in the
       syntax but couldn't decide on names
  lea: foreground/background too long, fg/bg too cryptic, others
       suggested front/back, fore/back
  lea: There's a table of the options
  lea: And should we have a default if the keyword isn't specified?
       Probably with bg as the base color, which'll be the most common
       case? Or should we require the keyword?

  fantasai: I think I'm strongly in favor of it being mandatory, so
            people will pay attention
  lea: Advantage of making it options is that only the fg word
       actually matters so we can just pick a good name there. can
       also be longer since it's not typed as much
  argyle: That's my proposal - make it optional and have the whole
          foreground keyword, since it's the exception.
  <argyle> https://observablehq.com/@argyleink/contrast-color
  argyle: This is the interactive explainer, syntax is right under the
          demo
  <argyle> https://www.irccloud.com/pastebin/mO4ENSCC/

  Rossen: If you need to present visually, our next zoom meeting will
          be next month
  [more presentation chatter]

  argyle: Bunch of examples in this observable document later
  argyle: The current spec isn't far off from excellent, I think, so
          my important bits in my counter proposal:
  argyle: First, doesn't require a color list
  argyle: Lot of presenting to devs and using it myself, I often don't
          care about the final color
  argyle: It'll find the first color that passes for you, in the same
          hue, in whatever contrast algo you're using
  argyle: Further my proposal builds in the contrast MQ pref
  argyle: So if the user prefers more contrast and the page is
          rendered without a color list, or an explicit contrast pref
          in the function, the browser will take the user's preference
          by default.
  argyle: This potentially eliminates several MQs for authors to have
          to worry about
  argyle: If an author *does* write a specific target score - "Weber
          2" or whatever - they're actually potentially excluding
          users.
  argyle: So if someone does want to handhold the contrast today, they
          have to write several MQs to set things correctly in several
          circumstances. My proposal folds it all in by default.
  argyle: Color list is still important, if you *do* want it, but you
          don't need it a lot of the time.
  argyle: As said earlier, it defaults to "background". You can click
          it to foreground and see it change the syntax to include the
          keyword.
  argyle: In most cases I've done I'm starting from a background, it's
          just the most common.
  argyle: Also have a "max" contrast target
  argyle: If I just pass a starting color it'll get the max-contrast
          color (white or black)
  <astearns> "color: contrast-color(#eee / max);"
  argyle: There's also options matching the contrast MQ - "more" or
          "less"
  argyle: Without having to specify exactly a contrast algo.
  argyle: The contrast algo is auto by default, I know that's
          controversial

  argyle: Here's a demo
  <argyle> https://codepen.io/argyleink/pen/RwgzJXV
  argyle: I'm writing a codepen with light/dark and low/medium/high
          contrast
  argyle: You should be immediately overwhelmed
  argyle: Just a lot to write
  <argyle> https://codepen.io/argyleink/pen/eYKmMmN
  argyle: This demo is what I've seen people instead already do
  argyle: Hand-managing oklch deltas in each MQ. Slightly automated,
          better than WCAG 2 but not perfect. But it works today and
          gets light/dark and low/medium/high contrasts
  argyle: My proposal today would make both of those demos a one-liner.
  argyle: Looks at user pref and auto-discovers what colors they
          should get
  <argyle> contrast-color(Canvas)
  argyle: This one-liner gives you light/dark and low/med/high contrast
  argyle: Current proposal requires authors to write a longer
          function, and repeat it several times.
  argyle: so "auto" as the algo complements the author's desire for
          not having to make a choice. browser can just do what's bet.
  argyle: If there's no auto target there's no way to give up choice
  argyle: So to summarize, my proposal doesn't require a color list,
          defaults to background, offers less/more/max contrast
          keywords, has an auto contrast keyword
  argyle: It starts simple, *can* do everything currently in the spec,
          but doesn't require all the complexity immediately.

  lea: We all like sensible defaults, but there were several issues
       with default algorithm that were discussed ad nauseam
  lea: WCAG 2.0, the current default, is just bad. There are better
       algos, but there are patent/licensing issues
  lea: In our experiments in Color.js the other contrast algos listed
       in the proposal don't actually give good results either
  lea: So I don't think they're needed
  lea: I like the idea of integrating this with the preferred
       contrast MQ
  lea: Unclear what it does exactly - same keywords, or does the MQ
       value actually affect the function?
  lea: minor comment - I find the identifiers side-by-side kinda hard
       to read, like "abca max"
  lea: Nothing making it clear that they're tied together - current
       syntax makes the algos functions so you're sure the args are
       related
  lea: Also not sure what "more"/"less" correspond to mechanically
  lea: I do like the idea of having background be the default
  lea: Not sure we need "background" keyword at all then
  argyle: yeah, wcag2 is bad, apca3 is still not producing good
          results yet, still a few years out
  argyle: If we wait for optimal it'll never ship
  argyle: I think auto sets it up to grow and for users, if they have
          a pref, they can specify it
  argyle: I think most people won't even look past wcag2 being bad
  argyle: so it's hard for us

  argyle: Say apca comes out and is stable, firefox flips to that, it
          would be neat to see it upgrade over time
  argyle: I just don't like baking in a bad choice
  argyle: I also agree nobody really knows about the other algos, yeah
  argyle: So MQ syntax, what is more/less? I had to invent this in my
          demo - what is more/less in each algo?
  argyle: I have a table in my proposal mapping them to particular
          values in each algo.
  argyle: we'll have to figure this out anyway, for the MQ
  <lea> Btw our experiments with these other algos (for black/white
        only): https://colorjs.io/apps/blackwhite/
  <TabAtkins> +1 to the simple keywords that correspond to *some*
              reasonable values for the algos, I really like that

  <argyle> contrast-color(#eee / max apca)
  argyle: You commented that this looks a little weird
  argyle: I think this reads really nice personally
  argyle: I want max contrast from apca
  argyle: If you do change the algo to something else, you're saying
          "here's my bg color, here's the target score"
  argyle: --and hopefully you always use auto, anything else can
          exclude users with particular prefs--
  <lea> I also like "more" or "less"

  <lea> just remembered, there's also the issue of allowing multiple
        algos (e.g. a good one + wcag for legal requirements), this
        syntax cannot grow to accommodate that since params and algos
        are on the same level
  lea: I wrote in IRC what I was gonna say
  lea: In prev discussions several WG members were skeptical about an
       auto algorithm that can change
  lea: We'll freeze in practice anyway
  lea: The other issue is that we might want to allow multiple algos
       that all need to pass - specify a "good" algo but also a
       "legally required" algo. Current syntax doesn't accommodate
       this, since the algo specifiers are on the same level as the
       algo name itself
  lea: I do like the more/less keywords fwiw
  <argyle> contrast-color(#eee / 60 lstar)
  argyle: You're right, I can't do multiple algos right now -
          "60 lstar, and 4 wcag"
  <lea> contrast-color(#eee / 60 lstar 5.4 wcag2) makes no sense

  fantasai: I think this exploration was very helpful
  <lea> +1 to this exploration being very helpful!
  fantasai: I do think there are problems with the proposal
  fantasai: Really do need to keep the target amount a functional
            argument
  fantasai: Both good for reading and for parsing
  fantasai: functional notation lets us extend the new algos with
            whatever we need without ambiguity
  <argyle> functional notation is an easy change
  <lea> (note that functional notation can also have an argument-less
        syntax, where we omit the ())
  fantasai: I have concerns about auto picking colors to minimum
            acceptable contrast
  fantasai: "pick the right contrast" is usually not the minimum
            acceptable
  <TabAtkins> (we can also have some simple args to the "default" algo
              not require mentioning the algo)
  [missed]
  fantasai: If we do color ranges, should probably have ability to do
            ranges of any color, not just the bg hue
  fantasai: maybe default it to the bg hue
  fantasai: Back to syntax, you're having a color, then a slash, then
            a list of colors
  fantasai: Some disagreement in earlier proposals about where the
            algo goes, I find your syntax choice interesting and think
            it reads nicely
  fantasai: wrt fg/bg I'm pretty strongly against allowing one of them
            to be defaulted. I do think that needs to be an explicit
            choice
  fantasai: but I think we can do that without being too wordy if we
            put it into the function name - contrast-foreground() and
            contrast-background()
  <fantasai> https://github.com/w3c/csswg-drafts/issues/7937#issuecomment-1431751840
  fantasai: And I think we need to tackle these problems individually
  fantasai: auto algo? No, we already resolved that.
  fantasai: function algos? etc. we can address those one by one.
  <lea> unclear if contrast-foreground(red) is declaring that red is
        the foreground or asking for a foreground color where red is
        the background
  <TabAtkins> Yeah I think that's confusing too

  Rossen: We'll continue discussing in issue.

Received on Thursday, 16 February 2023 00:07:52 UTC