21:00:35 RRSAgent has joined #css 21:00:39 logging to https://www.w3.org/2024/09/23-css-irc 21:00:39 RRSAgent, make logs Public 21:00:40 Meeting: Cascading Style Sheets (CSS) Working Group Teleconference 21:00:43 present+ 21:00:45 Present+ 21:00:50 present+ 21:00:51 present+ 21:00:57 tantek has joined #css 21:01:02 https://github.com/whatwg/meta/issues/326 21:01:03 present+ 21:01:07 noamr has joined #css 21:01:16 agenda? 21:01:27 Agenda here: https://github.com/whatwg/meta/issues/326 21:01:46 agenda: https://github.com/whatwg/meta/issues/326 21:01:57 ethanjv has joined #css 21:01:58 past has joined #css 21:02:22 kizu has joined #css 21:02:49 jfkthame__ has joined #css 21:03:10 astearns has changed the topic to: joint WHATWG/CSS agenda: https://github.com/whatwg/meta/issues/326 21:04:34 tantek has changed the topic to: CSSWG + WHATWG joint meeting: https://github.com/whatwg/meta/issues/326 “Topics for the joint session with the CSSWG” 21:04:53 ScribeNick: TabAtkins 21:04:53 present+ 21:04:57 present+ 21:05:04 present+ 21:05:20 lea has joined #css 21:05:28 khush has joined #css 21:05:32 present+ 21:05:32 present+ 21:05:33 Di has joined #css 21:05:37 jensimmons has joined #css 21:05:37 present+ 21:05:41 present+ 21:05:47 present+ 21:05:47 florian_irc has joined #css 21:05:50 andreubotella has joined #css 21:05:51 ydaniv has joined #css 21:05:52 present+ 21:05:52 past: First topic adding a new member to the "blocking" set 21:05:53 present+ 21:05:55 annevk has joined #css 21:05:56 present+ 21:06:17 github-bot, topic https://github.com/whatwg/html/issues/10513 21:06:17 TabAtkins, I can't comment on that github issue because it's not in a repository I'm allowed to comment on, which are: w3c/csswg-drafts w3c/fxtf-drafts w3c/css-houdini-drafts w3c/svgwg web-platform-tests/wpt WICG/animation-worklet WICG/construct-stylesheets WICG/scroll-animations WICG/custom-state-pseudo-class. 21:06:17 present+ 21:06:19 bkardell_ has joined #css 21:06:25 Topic: New "blocking" value for VTs 21:06:32 moonira has joined #css 21:06:36 present+ 21:06:47 noamr: When we started cross-doc VTs, we talked last year at TPAC that we'd be relying on the render-blocking mechanism of the browser 21:06:51 present+ 21:06:56 present+ 21:07:03 present+ 21:07:04 noamr: We added a while back a "blocking" attribute to control this better, so it's not just stylesheets. 21:07:04 present+ 21:07:13 noamr: When the page is unblocked from rendering, the VT starts 21:07:24 kbabbitt has joined #css 21:07:30 present+ 21:07:34 noamr: The main disconnection is that render blocking isn't just for VT, it's also for preventing a flash of unstyled content 21:07:51 noamr: So people can avoid doing tricks with hiding content and revealing withi script after it's rendered 21:08:08 noamr: There are situations where VT render blocking and document render blocking have reasons to be slightly different 21:08:10 noamr: one is timeout 21:08:16 s/withi/with 21:08:23 noamr: If what you're preventing is af lash of unstyled content, we can't reason about the correct timeout 21:08:34 noamr: say we ahve a render-blocked page, and we wanted to unblock it automatically after 5s 21:08:44 kschmi has joined #css 21:08:46 noamr: What'll happen is a flash of unstyled content until the stylesheet loads 21:08:57 noamr: did we improve the user experience? will people just go back to loading the css via js? 21:08:59 atrigent__ has joined #css 21:09:05 oriol has joined #css 21:09:07 noamr: in VT this is different, they're just a progressive enhancement 21:09:33 noamr: We can say if the page didn't unblock after a second or two, it doesn't matter for the VT. We don't have to unblock the whole page, but can skip the VT and unblock that element 21:09:43 noamr: The initial proposal we discussed is, this works with blocking=render 21:09:53 noamr: But blocking can accept mroe values, potentially 21:10:00 noamr: we can say a possible value is blocking=view-transition 21:10:07 present+ 21:10:12 noamr: that could have a different timeout, and wouldn't block if there wasn't a VT 21:10:26 noamr: would just give the browser a little time to prep the VT, rather than blocking for unstyled content 21:10:32 (seems good to me) 21:10:38 q+ 21:11:00 emilio: what are the specifics here? what do you mean by "it won't block when there's no VT" 21:11:09 emilio: When there's no incoming? or when there's none starting on the new page? 21:11:13 noamr: The former, incoming VT. 21:11:29 noamr: If there's no incoming VT, with blocking=view-transition we wouldn't block, there's no reason to 21:11:44 emilio: okay I think that's better than blocking for all VTs, yeah 21:12:04 zcorpan: what's the current timeout for render=blocking? 21:12:13 noamr: in the spec it's U 21:12:16 noamr: UA-defined 21:12:40 noamr: in Chromium we don't have one. we can't reason about whether unblocking will just give you unstyled content, and whether that's better or not for the user 21:12:55 noamr: If there's a network request for a render-blocking resource *taht* can timeout eventually and unblock 21:13:17 fserb has joined #css 21:13:41 q? 21:13:48 ack emilio 21:14:02 annevk: since websites currently use blocking=render in a way that's bad for VT, do we expect them to know which of these APIs to use correctly? 21:14:16 annevk: If they're already doing it wrong, i wonder if they have enough knowledge of which to apply to do it well 21:14:30 ntim has joined #css 21:14:35 present+ 21:14:46 noamr: I think people are already using blocking=render for VT, so they're using the tool they have. but it's too blunt of an instrument for them 21:15:17 noamr: So new people learning the blocking feature will be able to see that it has a view-transition value, that guides them. they won't need to use render 21:15:20 annevk: sounds reasonable 21:15:24 noamr: I asked Matt Woodrow about this issue and here was his reply: 21:15:24 21:15:24 > I guess I'd like to know more about the use cases they had in mind. If I'm reading this correctly, this lets the author say "if there's a view transition, then wait for this subresource to load, but if there's not, then it's fine to render without it". 21:15:25 It's not super obvious that that's a common thing to want? 21:15:37 annevk: just hope that next year we dont' have another case 21:15:53 noamr: in the design work for blocking=render it had a list of cases to jsutify it, if we have more cases it doesn't weaken it 21:16:07 q? 21:16:07 q+ 21:16:32 zcorpan: i thought document render blocking was mainly added for the VT use-case 21:16:48 zcorpan: if we want different behavior, what are the other use-cases we want to preserve the current behavior for? 21:17:02 noamr: there are people who use render blocking to avoid usntyled content 21:17:21 noamr: some people that were using popular libraries for JS-based render blocking - display:none and removing it in script 21:17:26 zcorpan: that's subresource render blocking 21:17:28 noamr: not only 21:17:38 noamr: there were people who didn't want gradually-rendered content to appar 21:17:50 zcorpan: okay, that's fine 21:18:08 zcorpan: was just wondering if we could redefined document render blocking to be better for VT, but seems like that's not the case. so a second value makes sense 21:18:23 noamr: Also from Matt: I also don't love yet another (shorter) implementation defined timeout. Seems like it'll cause confusion as sometimes VTs just won't run and it likely won't be consistent between browsers. 21:18:23 Hard to reason about all the different timeouts 21:18:43 ntim: I left some feedback from Matt Woodrow in IRC 21:19:19 ntim: [narrates previous comments] 21:19:23 s/noamr: I asked/I asked/ 21:19:37 s/noamr: Also/Also/ 21:19:50 noamr: I think the impl-defined timeout is a godo question 21:20:02 noamr: for regular render blocking we might not have one at all, or maybe a very long 21:20:24 noamr: we already have a delay for same-document VTs, so this isn't really a new concept, we're just applying it to cross-document 21:21:02 noamr: But yes, regardless of timing itself, having something that doesn't block if you don't have a VT is useful regardless of whether you have a timeout of not. Just coming to a page and blocking when there's no reason to isn't a good user experience. 21:21:33 past: Are you unblocked to move forward? 21:21:38 noamr: Yes, I think so. 21:21:55 Topic: reading-flow 21:22:11 past: there's a bunch of links 21:23:16 Di: from the agenda for this meeting, many issues are related to each other 21:23:20 github-bot, take up https://github.com/w3c/csswg-drafts/issues/9230 21:23:20 Topic: [css-display-4] Define how reading-flow interacts with focusable display: contents elements. 21:23:20 OK, I'll post this discussion to https://github.com/w3c/csswg-drafts/issues/9230. 21:23:25 Di: so i'm gonna focus on the proposal of how to implement css reading-flow 21:23:31 Di: I'm the Blink engineer working on this new property 21:23:41 Di: quick summary, the reading-flow property is in Display 4 draft 21:23:55 Di: This redefines the navigation order when the user presses Tab, and similar for a11y tree 21:24:03 Di: currently only works on display:grid and flex elements 21:24:16 Di: but with other proposals that touch on display orderring, like Masonry, it'll get bigger 21:24:34 Di: This is valuable because it helps authors choose the right reading order for their users, when it doesn't match the dom order 21:24:42 https://rachelandrew.github.io/reading-order-items-examples/ 21:24:46 Di: rachel has a video showing how unintuitive the current dom-based order can be and how this property can fix 21:25:06 Di: I want to talk about the impl of the feature, and some of the edge cases, like display:content or abspos/fixpos 21:25:21 Di: the goal here is to get more feedback on the HTML PR 21:25:22 siye has joined #css 21:25:22 https://github.com/whatwg/html/pull/10613 21:25:36 Di: any questions to start? otherwise i'll go into details 21:25:40 q? 21:25:52 ack zcorpan 21:26:12 Di: the current impl defines reading-flow relative ot eh "reading flow scope owner" 21:26:24 dholbert has joined #css 21:26:25 Di: it's either a container with a 'reading-flow' value, or a display:contents whose parent is a reading-flow container 21:26:27 s/ot eh/to the/ 21:26:29 present+ 21:26:42 we moved examples to https://chrome.dev/reading-flow-examples/ where there are a couple more, and there's a short video on the TPAC site https://www.w3.org/2024/09/TPAC/demo-css.html 21:26:46 Di: Within this, the order isn't normal dom order, it shoudl use the container's layout to sort the elements according to the reading-flow value 21:26:54 Di: Like it could be grid-rows or grid-columns 21:27:06 Di: some items are not sorted by the layout, like elements that are abspos 21:27:19 Di: in that case, they're visited after the ones that are sorted, in normal dom tree order 21:28:00 domfarolino: the ones that aren't aprticipating in reading flow, are they traversed in dom order, or still based on normal tab index from outside reading flow? 21:28:06 Di: tabindex takes priority over reading flow 21:28:36 Di: so we'll sort the elements and get a "next" element, so within a tabindex value we can cycle between elements with the correct sorting 21:28:43 q+ 21:28:46 q+ 21:29:15 ack kizu 21:29:54 kizu: so when we deffine inheritancce for scope, when you focus an element inside the scope, can you escape? do you always first go thru all elements in the scope before moving outwards, or can you mix and match? 21:30:07 Di: no mixing, within a scope you visit all the elements first 21:30:32 kizu: I think that's okay, but we might need an extra value like reading-flow:contain, otherwise people will establish scopes just for the scoping behavior 21:32:08 TabAtkins: I think there's some confusion, you always visit all the focusable elements in a given element anyway. 21:33:11 some discussion of scopes, tab index and other things not minutes 21:33:28 [will fill in later] 21:33:45 zcorpan: question on the general need for this property 21:33:53 ack zcorpan 21:33:55 zcorpan: the preivous sense of the csswg is people should use the dom order for correct reaading order 21:34:16 zcorpan: what changed? do we have more layout mechanism now, different layouts on different devices, etc? just inconvenient to reorder the dom 21:34:27 rachelandrew: we've got tons of dev feedback on the preivous issues 21:34:32 rachelandrew: loads of usecases where devs ask for this 21:34:52 rachelandrew: simple is you have a layout with grid where the ideal layout in mobile vs layout presents things in a differnet visual order 21:35:07 rachelandrew: we give people the ability to rearrang ethings with grid, then basically say don't do it because it causes this problem 21:35:21 rachelandrew: I'll link in threads later 21:35:33 +1 to rachelandrew, this is a very common pain point 21:35:33 rachelandrew: But pretty mcuh every workshop i've done someone has said "i want to do this, but you said I can't" 21:35:57 resolution to work on this: https://github.com/w3c/csswg-drafts/issues/7387#issuecomment-1690281298 21:36:23 Di: So the author issues is talking more about display:contents, it's all related tho for focus scope navigation 21:36:26 q+ 21:36:37 annevk: wonder why you decided tab index should win in the end? 21:37:12 TabAtkins: is that asked with the understanding about focus groups, which scope the tabindex behavior? 21:37:31 annevk: there's a scoping aspect, but there's also an element-by-element feature 21:37:52 annevk: we invented the css feature to win out, but then HTML wins 21:37:55 lots of cases in this issue https://github.com/w3c/csswg-drafts/issues/7387 21:38:09 masonf: our general feeling is using this feature in conjunction with tabindex would be a mistake, but we still have to define what happens 21:38:26 annevk: one thing you could imagine is tabindex just delegates to the css feature 21:38:32 also dense packing causes reordering, and the author can't control it, as will masonry. 21:38:33 annevk: then you could use CSS to further override it 21:38:46 annevk: so if you reorder the visual vs Dom, you can use CSS to fix that 21:39:19 annevk: it makes sense to me that CSS would win, so we could explain the HTML in terms of that 21:39:55 tabatkins: An earlier draft of this feature had a feature to specify an integer to give an ordering, but we removed it because it's not a great idea anyway. 21:40:21 tabatkins: also the tabindex already exists, even though it's bad, it works for this use case. This feature (reading-flow) does what you can't do - match layout predictably. 21:40:53 q+ 21:40:54 tabatkins: Otherwise, you'd have to use JS. We don't like explicit tabindex so we didn't want to copy it into CSS. So we're left with defining how tabindex interacts with this feature. 21:41:07 removing the index resolution and discussion: https://github.com/w3c/csswg-drafts/issues/8589#issuecomment-1721504153 21:41:12 annevk: I thought the CSS feature has a scoping mechanism, and the ability to say focus next 21:41:38 tabatkins: you can choose a few options, but not arbitrarily. 21:42:04 tabatkins: several examples where that happens. 21:42:09 q? 21:42:24 annevk: I don't have an answer as to why tabindex shouldn't just be ignored 21:43:06 annevk: Once you start using this, shouldn't we just ignore tabindex? 21:43:25 TabAtkins: We just needed to give an answer to how they work together. If you feel strongly otherwise, we can have an issue 21:43:39 annevk: Yeah, makes the most sense to me to have it be ignored 21:43:56 domfarolino: what do you think is better - making tabindex secondary, or ignoring completely? 21:44:09 annevk: I think ignoring completely, based on what I've heard. 21:44:26 q+ 21:44:26 annevk: probably woudln't want things moving around based on tabindex 21:44:35 q? 21:45:08 ack fantasai 21:45:09 fantasai, you wanted to react to zcorpan 21:45:12 fantasai: so tabindex is set on the individual items, while reading-flow is set on the container. tabindex has a higher specificity, in a way 21:45:35 fantasai: we might want equivalent functionality in CSS that operates on the individual items - there might be cases where reading-flow can't work automatically 21:45:42 fantasai: I'm guessing that's the logic behind the current behavior 21:46:00 fantasai: but I do think it needs a little more thought to how things work together, when it's not just simple content being reordered 21:46:24 fantasai: for example, a right-hand sidebar, versus an item around that sidebar, might want the sidebar read first 21:46:36 fantasai: so we have some mixed cases. I think tabindex is somewhat addressing that 21:46:50 s/an item/a collection of auto-positioned items/ 21:46:53 q+ 21:47:04 ack bkardell_ 21:47:30 bkardell_: I think Anne suggested that if we had a property in CSS equivalent to tabindex, then we could explain tabindex in HTML with the CSS mechanism. Is that right? 21:47:38 wow bkardell_ brings up nav-index 21:47:38 annevk: It was a thought, yes. Not a complete proposal. 21:47:57 annevk: but Tab made a convincing point that tabindex is a bad API, not sure we should just copy it 21:47:58 pretty sure we implemented nav-index in Tasman back in the day 21:48:11 bkardell_: I liked your idea about ignoring it, would you ignore all of it? 21:48:31 annevk: No, focus ability would be preserved, we'd just ignore the ordering. At some point we could introduce a property that more specifically lets you do that targeting. 21:48:31 q? 21:48:44 annevk: But the mix of the two doesn't make a lot of sense to me right now. 21:48:55 +1 , agree with what annevk just said 21:49:29 annevk: If you are using tabindex for one view, but then rearrange for another view and use reading-order, we'd still have a messed up order 21:49:47 q? 21:49:48 domfarolino: so then you'd have to stop using tabindex entirely if you wanted to use reading-flow 21:49:52 +1 to ignoring tabindex inside a reading-flow scope 21:49:56 annevk: Yeah, seems reasonable 21:50:30 zcorpan: Wanted to ask about the a11y mapping 21:50:39 ack zcorpan 21:50:44 Di: we have asked for feedback 21:50:55 Di: the reading-flow items that are sorted, we use that to present the items in the a11y tree 21:51:11 Di: normally the a11y tree follows by Dom order, so the unsorted items we keep in dom order 21:51:12 Inclined to also +1 to ignoring tabindex within reading-flow, the opposite seems very confusing, and also this provides a way to fix the issues with tabindex with a smooth upgrade path 21:51:35 zcorpan: So the plan is to spec that the a11y tree is reordered, good 21:51:51 ack fantasai 21:52:03 q- 21:52:19 dbaron: about the tabindex thing 21:52:46 dbaron: my understanding of this is - and maybe it's wrong way to think about it - is that when you're trying to find the next thing to focus, there's a process that's a tree traversal 21:53:01 dbaron: what reading-flow is doing, in my head, is it's changing the order you visit a set of siblings within that tree traversal 21:53:12 dbaron: but not really changing the whole tree traversal, just the visitation order of those siblings 21:53:42 (and their concepts) 21:53:50 s/cepts/tents/ 21:53:55 (was also going to say subgrid might be an exception) 21:53:56 dbaron: maybe subgrid has an exception 21:54:07 miketaylr has joined #css 21:54:13 dbaron: maybe that impinges on your point about tabindex working, this changes just the visitation order of the siblings 21:54:20 ethanjv has joined #css 21:54:24 q? 21:54:29 ack dbaron 21:54:34 annevk: I see what you're saying, if you use tabindex to change the visitation order and there's tabindexes inside of a part, it stays useful 21:54:44 annevk: so does the scoping happen at the parent level, or for each sibling? 21:54:49 masonf: the parent 21:55:21 annevk: so that does run into the problem. if two grid items each have a tabindex value, then they'll be followed numerically, rather than according to the reordered values 21:55:37 masonf: I see your point there, we might need more thought 21:55:39 TabAtkins: agreed 21:55:42 Penny has joined #css 21:56:09 I propose we ignore tabindex ordering *on the reordered children*, and then scope the childrne's subtrees 21:56:24 domfarolino: If we don't honor tabindex for the siblings, would we honor it inside the subtree? 21:56:39 annevk: I guess so, it makes sense with what David was saying 21:57:09 Di: So are there any questions about making display:contents a focus scope owner 21:57:49 masonf: in CSS if you have a flex or grid item that's display:contents, and that display:contents has tabindex, that item should be focusable and still be in the focus order. so the question is where in the sequential focus does it come up? 21:57:53 masonf: two current proposals 21:58:02 masonf: one is put all the display:contents children last 21:58:31 masonf: Other that feels cleaner and we think has fewer a11y issue, is you make display:contents children of these reading-flow containers focus groups themselves 21:58:44 rachelandrew: We asked devs if anyone is doing this, and couldn't find an example yet 21:58:51 discussion and resolution about reading order and display:contents interaction: https://github.com/w3c/csswg-drafts/issues/9230#issuecomment-2261469723 21:58:57 rachelandrew: I think it's an unusual case to solve, not something we're seeing everywhere 21:59:14 masonf: we also prefer option 2, because eit's better for a11y and easier to implement 21:59:50 tabatkins: because display:contents, they don't have a layout, but it's also safe to hold the layout, that makes sense. 22:00:34 https://developer.chrome.com/blog/reading-flow-display-contents the request for feedback I've been sharing, which explains the issue 22:00:45 s/hold the layout/pull the layout from the parent, and apply it to the children/ 22:00:59 Making flex items is not terribly uncommon fwiw 22:01:09 Making flex items display: contents* 22:01:19 TabAtkins: As if the display:contents element become a display:flex (or whatever) holding its children 22:01:35 panos: Di, are you unblocked? 22:01:46 Di: Yes. We ask for everyone to look at the HTML spec PR 22:01:47 I use it to conditionally hide a set of flex items sometimes 22:01:50 q+ 22:01:56 masonf: Everything should be in the Html PR, modulo the new tabindex question 22:02:13 annevk: So the display:contents thing is being resolved in this new property? Or only comes up in the context of this property? 22:02:18 masonf: Only comes up in this context. 22:02:37 annevk: Okay, it does sound like of your two options, putting the display:contents at the end was weird 22:02:51 Di: And is display:contents, which is why we spend so much time thinking about this 22:03:01 ack emilio 22:03:04 emilio: This is only an issue if the display:contents is focusable, yeah? 22:03:27 masonf: current proposal is display:contents children of these containers *always* makes them into reading order containers 22:03:50 emilio: Okay, and that prevents reordering across siblings 22:04:10 emilio: So for the purpose of focus, this sis only an issue if the display:contents element was focusable as well 22:04:21 masonf: Yes, the traversal algo would be a little more complicated, but that's it 22:04:31 example of what i use `display: contents` flex children for: https://jsfiddle.net/dk1Lryhj/ 22:04:36 s/this sis/this is/ 22:04:46 emilio: I think ideally, if you don't have a focusable display:contents element, you'd want the behavior of visiting children in the visual order 22:04:50 gsnedders has joined #css 22:04:58 masonf: I think yes, except the a11y tree becomes harder in that case. 22:05:06 masonf: And I think the tab order should match the a11y order 22:05:54 TabAtkins: Okay, so display:contents scopes the ordering, even if their items are visually interwoven 22:06:10 emilio: that seems a little confusing to me as an author, you're saying use the visual order, but you don't get that 22:06:24 masonf: Yeah, all the possible solutions aren't obvious 22:06:45 emilio: display:contents that's focusable is indeed rare, but display:contents that isn't focusable seems a lot more common. 22:07:06 emilio: that's the main use-case of display:contents, to let the parent take up the children 22:07:15 masonf: If focus order was all we had to deal with, I'd agree 22:07:24 emilio: Yeah, I understand the a11y tree makes it hard. 22:07:42 rachelandrew: It seems that people are generally using display:contents in mostly simplistic ways at the moment 22:07:55 rachelandrew: whenever I ask for example they're just removing a wrapper from an element 22:08:37 emilio: right, but I think it would break even simple cases. A control with a label, in a display:contents container. If I visually lay them out so multiple labels are together... 22:08:57 masonf: slots are *already* focus scoped, actually, so that "breaks" today already 22:09:09 emilio: Hm, the way I'd want to use this feature might override that behavior... 22:09:14 florian_irc has joined #css 22:09:22 masonf: Yeah, we're proposing to make display:contents act like how slots work today 22:09:49 florian_irc has joined #css 22:10:19 [discussion of the grid use-case] 22:11:02 rachelandrew: We have tried to design some friction into this property anyway, so people don't just apply it willy-nilly. 22:11:07 fserb has joined #css 22:11:28 emilio: so the main issue I guess is there's just no way to get the reordering use-case to work. maybe we're fine with that. 22:12:08 q? 22:12:36 emilio: So I think there are some realistic use-cases that would break under this behavior. 22:12:43 I think it would be useful to collect actual design use cases; the Google examples are quite simplistic and good for teaching but I think don't represent the complexity of what authors may need to do 22:12:50 emilio: two non-slots, forget the slot behavior 22:13:07 emilio: both display:contents, and use 'order' to put some elements of each at the top, you'd still get the weird order 22:13:51 masonf: It doesn't work in that it gives the wrong order, but at least it is focusable 22:14:58 annevk: So you couldn't find much cases where display:contents is focusable, but we thought it was important for display:contents to be focusable, how do those square 22:15:51 TabAtkins: Rachel has a lot of examples of *simple* display:contents use, just not complex ones that would run into this discussed issue 22:16:00 dbaron: I think there was a big discussion of whether display:contents should be in the a11y tree. 22:16:21 dbaron: there was a strong agreement that there should be, we all shipped it, *then* we had the trouble that the focus order didn't match the a11y order, and things were broken 22:17:11 lea: If authors need slots to be focusable, they'd also override display:contents, right? 22:17:25 annevk: I'm still confused that display:contents isn't more like display:none 22:17:42 TabAtkins: If you display:contents an , the contents are still clickable. They need to be focusable too 22:17:52 annevk: Becuase links are done via Dom structure... 22:18:09 [more discussion about links being display:contents] 22:18:26 florian_irc has joined #css 22:18:46 masonf: So this has been a good discussion. Dont' think anyone's come up with a better idea so far, but if anyone does... 22:18:59 annevk: Probably just doing what slots do today is fine, and if we need further overrides we can develop that. 22:19:13 annevk: Even if it comes up in practice for one person, we should probably wait a few... 22:19:28 lea: What if you call El.focus() on a display:contents element? 22:19:39 emilio: Under dbaron's proposed behavior, it does get focused. 22:19:51 i feel like the discussion is getting off topic from the original issue 22:19:59 emilio: today it's not focusable 22:20:04 dbaron: But we want to change it 22:20:59 [point of order, no more breakouts within the room] 22:21:40 scribe+ 22:21:45 TabAtkins: Sounds like conclusion is that [missed] 22:21:53 TabAtkins: although someone uncomfortable, nobody has a beter idea 22:22:01 ethanjv has joined #css 22:22:05 s/[missed]/thing currently marked option 2 in PR/ 22:22:30 TabAtkins: making `display: contents` work the same way as s do today 22:23:05 Di: So option 2 is make display:contents its own focus-scope owner, similar to 22:23:29 Di: What Dom is mentioning about putting display:contents last is a different part of the proposal 22:23:47 Di: And that other part is "everything not part of the layout just goes at the end, after all the visually-sorted options" 22:24:23 fantasai: So if I have a grid with a display:contents child, and *its* children are reordered by the parent grid, what happens 22:25:19 fantasai: so we have a flex with children A, B, C. B is display:contents with B1 and B2 children 22:25:49 fantasai: visual order is A B1 C B2 22:26:27 Di: So the focus order is currently A C B1 B2 - the display:contents is put at the end, as it's not visually sorted, and then its children are sorted visually 22:26:41 fantasai: okay new order A B1 B2 C 22:26:48 fantasai: But I've set reading-flow on this element 22:26:58 fantasai: As an author I'd expect reading-flow to not change the order of things 22:26:59 florian_irc has joined #css 22:27:06 gsnedders has joined #css 22:27:10 annevk: I'm also confused about thtis 22:27:17 masonf: two issues, one is whether display:contents forms a scope 22:27:26 annevk: Yeah, assume we do that to align with slot 22:27:37 masonf: Then we have a choice where to put the display:contents children 22:27:59 emilio: Put them where in the visual order the first sub-item shows up? 22:28:14 emilio: I think fantasai was hinting at this 22:28:15 florian__ has joined #css 22:28:33 emilio: when you're iterating the items, you can figure out "this item's layout parent isn't it's Dom parent, so it's display:contents" 22:28:47 emilio: so at that point you'd walk the display:contents subtree and do them in visual order 22:28:51 dbaron: so two options I think I heard 22:29:00 dbaron: one is when you hit the first Dom child of the display:contents 22:29:14 dbaron: another is when you hit the first *visual order* child of the display:contents 22:29:23 fantasai: the second one 22:29:37 emilio: I also think second, it allows more intuitive behavior when you reorder inside the display:contents 22:29:57 fantasai: I think it's important to make sure A B1 B2 C order stays as it is, you haven't moved *anything* 22:30:03 karlcow has joined #css 22:30:10 fantasai: Also would be good to have A B2 B1 C (with 'order') to work visually 22:30:18 fantasai: These are the most common by far cases of using display:contents 22:30:41 fantasai: the full re-ordering examples are much rarer 22:30:51 annevk: What if the visual order is C B2 B1 A, reversed? 22:31:08 fantasai: Yes, should still work visually. As long as the items are in contiguous visual order, it should still work 22:31:34 emilio: Say you flip the order in a display:contents. question is what tab order would you expect 22:31:41 emilio: I think ideal is what elika said, actually reorder them 22:31:49 emilio: I dunno how that interacts with the scope owner thing 22:32:07 s/full re-ordering examples/full re-ordering examples with interleaving/ 22:32:21 emilio: Unsure if we can go back up to the parent and look at that reading order 22:32:27 masonf: Layout's already happened, you know the order. 22:32:37 masonf: So it sounds like people agree that display:contents is a scope owner, regardless 22:33:15 masonf: Then the question of what order relative to other things, which it sounds like we're coming toward 22:33:37 annevk: So if the visual order is B1 A C B2... 22:33:46 masonf: order would be B1 B2 A C in tabbing 22:34:04 In https://jsfiddle.net/0x5yuLd2/1/, I would expect the order to be "first name, last name, credit card, cvv, expiration" 22:34:12 emeyer: I'm still not okay with the display:contents reordering, if visual order doesn't match even tho I asked for it, I think CSS is broken 22:34:14 florian_irc has joined #css 22:34:40 masonf: Problem is the a11y tree is also "broken" in that case 22:35:02 florian_irc has joined #css 22:35:09 chrishtr: We think the full-interleaving case is an uncommon example. It works fine if there isn't interleaving. 22:35:35 emeyer: Yeah, just giving the author-facing feedback 22:35:41 chrishtr: Okay so if it's a focus scope owner 22:36:21 chrishtr: What's the exact proposed ordering, to not put the display:contents at the end? 22:36:54 TabAtkins: You go thru the layout order, until you hit one that's in a different focus scope, then you recurse into that focus scope, then pop back out 22:37:14 annevk: The main reason it has to be a scope owner is that really the order is B B2 B1, not just B2 B1 22:37:57 chrishtr: Di, does that make sense to you, giving impl experience? 22:38:10 Di: Yeah, have a question since we don't actually see the B element in the visual order 22:38:43 emilio: You'd hit B1 visually, note that its parent is display:contents, then actually put B into the order, then B1, B2 22:39:04 annevk: [missed an example] 22:39:17 masonf: That makes the algorithm stateful, currently it's stateless 22:39:37 dbaron: It doesn't have to be stateful, but making it stateless is expensive, you have to crawl the Dom to see if we *would* have hit the element 22:39:51 fantasai: Here's an example of reordering' 22:39:57 fantasai: you have a number control, has plus and minus button 22:40:15 fantasai: So your control is some container, it's got a text input, and a plus and minus button. 22:40:30 fantasai: you want to lay it out with + on the left and - on the right. You use display:contents on the control wrapper 22:41:27 [I didn't understand the example actually, i'm confused] 22:42:13 fantasai: So the a11y tree should be able to see the "control" itself (as a wrapper) before we actually hit the + button 22:43:57 dbaron: So my question is when do we recurse into the display:contents 22:44:55 dbaron: Do we do it when we encounter the first visual child, or the first DOM child? 22:45:31 dbaron: In the second, if something else was interleaved, we'd do the interleaved first, *then* hit the first child of the display:contents and do the subtree 22:45:48 [everyone agrees that's bad, it should be the first visual child 22:46:01 ] 22:46:26 emilio: Is the "first visual child" thing different if you navigate backwards? 22:46:58 dbaron: If you care about first visual child when tabbing forward, you need to care about the last visual child when going back 22:47:04 masonf: agreed 22:47:31 annevk: Again we have the visual order of B2 A B1, the focus traversal would match but with the B wrapper, B B2 B1 A 22:47:42 (sorry, he said B B2 A B1) 22:47:57 masonf: No, that breaks the a11y tree. They're always siblings in the a11y tree, so it has to be B B2 B1 A 22:48:38 annevk: So B is a hard owner of its tabbing order due to the a11y tree 22:49:52 chrishtr: Rachel, any thoughts from a teaching perspective? 22:50:01 rachelandrew: I think it's weird whatever. But consistency with is useful 22:50:14 rachelandrew: I don't feel like there's a better solution. 22:50:25 rachelandrew: And I don't think the interleaving case is a common situation anyway. 22:51:40 Sanket: So there's focus scope owner, is it only slot and display:contents? 22:51:50 [no, there's several others, like dialog] 22:51:57 sanket: So those already behave this way? 22:52:02 chrishtr: For focus, yes. 22:52:21 annevk: The display:contents case is special because it's not actually displayed 22:52:29 emilio: Request, to make emeyer happy 22:52:42 emilio: The main thing that prevents us from doing splitting is making the a11y and focus order match. 22:52:56 emilio: Is it well-documented why they need to be the same? Is it better to break that for this case, or? 22:53:09 annevk: I was curious too, if that's really a hard limitation there's no future solution either. 22:53:19 emilio: Yeah, wondering if it's a hard blocker 22:53:28 masonf: We're not the experts, but we've been told it's needed 22:53:45 ???: Does tabindex rearrange the a11y tree? 22:53:48 chrishtr: No 22:54:47 dbaron: There's a difference between "here's a thing, and you can't get to it at all" and "here's a thing, and it's in a weird position". pretty big difference 22:55:24 TabAtkins: We're doing the whole scope owner thing because wanted to push to the end 22:55:32 TabAtkins: if we're adopting where it is visually, then might not need to 22:55:38 TabAtkins: B still needs to show up before its first visual child 22:55:48 emilio: Reason we needed it was so that it doesn't mismatch the a11y tree 22:56:00 TabAtkins: but you can currently use tabindex 22:56:08 emilio: Right, you can already mismatch 22:56:21 annevk: maybe don't need to match tree, but [missed] 22:56:31 TabAtkins: if you use A and tabindex on A and 2 children inside the A, and on something else 22:56:36 TabAtkins: your order can flip back and forth 22:56:44 TabAtkins: if you display:contents the A, don't know where to put it 22:56:57 TabAtkins: but if we define "it goes just before its first visual child" then we're back to where we were before display:contents 22:57:12 TabAtkins: with this answer to where we put it, i.e. right efore first visual child, we don't need to do scope owner 22:57:19 emilio: right, and we have precedent for that 22:57:35 ?: do we need scope owner for then still? 22:57:56 emilio: My understanding was to avoid conflicting with a11y tree, but can already diverge with tabindex so maybe we can make Eric happy 22:58:03 s/?/Di/ 22:58:26 mfreed: an exmaple without tabindex, you have a mismatch 22:58:27 emilio: is that a problem? 22:58:42 ... 22:59:00 TabAtkins: tabindex is a bad *design*, but I'm not sure if it's actually a bad thing *for a11y* here 22:59:05 emilio: if we need to make 'display: contents' focus scope owner for matching a11y, if that's a hard block can we document vry clearly why? 22:59:51 domfarolino: So next step, talk to a11y people to see if it's *okay* to have another case, like tabindex, of tab order mismatching a11y order? 23:00:06 emilio: Yes. If we get feedback that it's bad, we have consensus on scope owner + first visual item. 23:00:24 fantasai: So we can resolve on first visual, and figur e out scope later 23:00:48 I just wanted to mention that it looked like the aria group was discussing some of these same things when we started in their group - it sounds like they had questions for us, and we have (if I understand) questions for them. We're in the same actual location, maybe we should get together and talk 23:01:04 fantasai: proposed resolution: display:contents focusable element occurs in the order immediately before its child that's first in visual order 23:01:36 dbaron: and when tabbing in reverse, it's still preceding it in the original order, so reverse-tabbing it's after 23:01:36 emilio: needs tweaking for nested display: contents 23:02:20 +1 23:02:24 RESOLVED: display:contents focusable element occurs immediately before its first child in visual order 23:02:38 🎉 🎉 23:02:54 🍾 23:03:05 (and probably an empty display contents goes at the end?) 23:03:21 proposed resolution: tabindex is ignored (for order purposes) on the items of a reading-flow container, but it *scoped* to those items if on descendants 23:04:23 proposed resolution not passed, we'll discuss in an issue 23:16:50 nigel has joined #css 23:27:03 Penny has joined #css 23:30:10 PaulG has joined #css 23:30:30 present+ 23:32:01 florian_irc has joined #css 23:32:41 florian_irc has joined #css 23:35:17 matatk has joined #css 23:35:19 kbabbitt has joined #css 23:35:24 Lionel_Wolberger has joined #CSS 23:35:31 khush has joined #css 23:35:36 present+ 23:35:40 Angela has joined #CSS 23:35:42 zcorpan has joined #css 23:35:43 present+ 23:35:45 janina1 has joined #css 23:35:49 present+ 23:35:51 present+ 23:35:55 present+ 23:35:57 scribe+ 23:35:58 present+ 23:36:10 present+ 23:36:15 CharlesL has joined #css 23:36:16 Topic: CSS Speech 23:36:29 present+ 23:36:48 present+ 23:36:54 rrsagent, make minutes 23:36:56 I have made the request to generate https://www.w3.org/2024/09/23-css-minutes.html Lionel_Wolberger 23:37:29 zcorpan has changed the topic to: CSS + APA joint meeting 23:37:50 janina1: Background: for several years we have been considering the challenge of having TTS on various platforms 23:37:55 ... to pronounce words in a similar way 23:37:57 subtopic: CSS Speech 23:38:00 rrsagent, make minutes 23:38:01 I have made the request to generate https://www.w3.org/2024/09/23-css-minutes.html matatk 23:38:07 ... We have a path to a solution 23:38:30 ... We propose two solutions split along a fairly traditional or classic divide 23:38:44 q? 23:38:55 ... We propose CSS speech, in a preliminary version 1.0 23:39:32 ... to divide out presentational aspects such as volume, from pronunciational aspects (such as the long i or short i vowel in wind) 23:40:24 ... Justification is the difficulties introduced by mispronunciations are huge and many, e.g., picture a blind person taking an LSAT by means of a screen reader 23:40:55 matatk: We have specific use cases from education where people require fine-grained control of pronunciation 23:41:06 For reference: Pronunciation Gap Analysis and Use Cases: https://w3c.github.io/pronunciation/gap-analysis_and_use-case/ 23:41:15 ... other use cases where the content provider wishes to determine the pace, quality of voice 23:41:35 Di has joined #css 23:41:54 ... We acknowledge that the idea of CSS Speech has been around for a while, we wanted to share these needs and find common ground 23:42:17 present+ 23:42:18 q? 23:42:18 https://www.w3.org/TR/pronunciation-gap-analysis-and-use-cases/#gap-analysis 23:42:26 rrsagent, make minutes 23:42:28 I have made the request to generate https://www.w3.org/2024/09/23-css-minutes.html Lionel_Wolberger 23:43:24 present+ 23:43:56 q? 23:44:08 present+ 23:44:16 ack fantasai 23:44:19 https://www.w3.org/TR/css-speech-1/#speaking-props-speak-as 23:44:29 PaulG: The gap addresses these qualities: Language, Voice Family/Gender, Phonetic Pronunciation, Substitution, Rate/Pitch/Volume, Emphasis, Say As, Pausing 23:44:47 ... this would be a new specification 23:45:50 fantasai: Sounds like a new specification with significant overlap with CSS speech 23:46:04 s/Sounds like/So you're proposing/ 23:46:10 s/speech/speech? I'm confused/ 23:46:37 janina1: Not quite. We think there are aspects that CSS Speech can handle very well, as they fit within the 'presentational' scope that is traditionally CSS's scope 23:46:45 q? 23:46:49 q+ 23:47:00 nigel has joined #css 23:47:16 fantasai: Agree, in CSS are things not tied to the specific words. 23:47:44 q+ 23:47:48 ... a test would be, rephrasing a sentence with a synonym changing the meaning should not require any changes to the CSS Speech 23:47:50 q? 23:47:54 q? 23:48:13 present+ 23:48:39 PaulG: This is a proposal that scales back the scope, in an effort to avoid the challenges we had 23:49:12 ack florian 23:49:13 ack florian 23:49:22 tink has joined #css 23:49:23 nigel has joined #css 23:49:26 florian: +1 dividing the scope between CSS and content 23:49:32 present + Léonie 23:50:05 ... Example: an tag with an acronym: Should it read individual letters, or read it as a word? 23:50:11 present+ Nigel_Megitt 23:50:31 ... Example: Ruby perspective: Japanese can have an ideograph content and the ruby lets you mark it up, 'this is how you should read it' 23:50:43 ... other times, the ruby offers a synonym or other related information 23:51:14 present+ 23:51:15 q+ to ask about use cases 23:51:18 ... If the Ruby is 'how you read this', then it should be followed for pronunciation; whereas if it is add'l information, then it is not 23:52:00 ack CharlesL 23:52:22 s/information, then it is not/information, then you need to read both/ 23:52:31 CharlesL: ePub sees use cases. Example: Books where you have two different speakers, a female and male speaking one to another 23:52:49 ... a read aloud system could follow those directions and make for a better read-aloud experience 23:52:53 ack tink 23:52:54 tink, you wanted to ask about use cases 23:53:14 tink: Is APA looking at all forms of synthetic speech, not only screen readers? 23:53:17 janina1: Yes 23:53:37 tink: Use case: an intentional mispronunciation as for example in a story 23:54:05 i/ePub sees use cases/So I think we need something in markup space to indicate, out of the various ways something could be read, what the correct way to read this particular content is, which is distinct from styling it 23:54:32 ack me 23:54:36 janina1: That use case would be handled by this proposal 23:55:22 PaulG: use cases: poetry. multiple characters. in the learning context, disambiguation and accuracy 23:55:24 q? 23:55:29 ack fantasai 23:55:29 fantasai, you wanted to ask what we're asking from CSSWG 23:56:06 q+ 23:56:11 fantasai: What specifically are you requesting from CSS WG? Implementations? 23:56:20 s/Implementations/Spec changes? Implementations/ 23:56:53 PaulG: We'd like to understand the status of CSS Speech, path forward 23:57:15 q? 23:57:18 q+ 23:57:35 ... hoping that CSS and revision of last year's spec could work in concert to cover the use cases mentioned 23:57:54 janina1: The problem was raised by ETS. 23:58:00 ack zcorpan 23:58:31 zcorpan: Took a look at the linked document-- I would like to see the use cases spelled out in more detail. 23:58:53 ... the use cases discussed today, spelled out more clearly in a document, would be useful. 23:58:54 q? 23:58:56 matatk: +1 23:58:59 ack florian 23:59:00 ack florian 23:59:26 karlcow has joined #css 23:59:27 florian: Overall, CSS WG sees CSS Speech as a good idea, that has not found an implementor. 23:59:33 user scenarios is probably the doc you want https://w3c.github.io/pronunciation/user-scenarios/ 23:59:36 ack fantasai 23:59:39 ... and have been in this state for a long time 23:59:46 q? 23:59:48 q+