14:53:58 RRSAgent has joined #css 14:54:02 logging to https://www.w3.org/2024/09/25-css-irc 14:54:02 RRSAgent, do not leave 14:54:03 RRSAgent, make logs public 14:54:04 Meeting: Canvas place element 14:54:04 Chair: Khushal Sagar, Fernando Serboncini 14:54:04 Agenda: https://github.com/w3c/tpac2024-breakouts/issues/43 14:54:04 Zakim has joined #css 14:54:05 Zakim, clear agenda 14:54:05 agenda cleared 14:54:05 Zakim, agenda+ Pick a scribe 14:54:07 agendum 1 added 14:54:07 Zakim, agenda+ Reminders: code of conduct, health policies, recorded session policy 14:54:07 agendum 2 added 14:54:07 Zakim, agenda+ Goal of this session 14:54:09 agendum 3 added 14:54:09 Zakim, agenda+ Discussion 14:54:09 agendum 4 added 14:54:09 Zakim, agenda+ Next steps / where discussion continues 14:54:09 agendum 5 added 14:54:09 tpac-breakout-bot has left #css 14:55:31 Francis_Storr has joined #css 15:01:41 nigel has joined #css 15:05:39 nigel has joined #css 15:06:36 nigel has joined #css 15:24:19 cbiesinger has joined #css 15:29:07 alice has joined #css 15:31:12 kizu has joined #css 15:33:27 giacomo-petri has joined #css 15:34:25 ZoeBijl has joined #css 15:35:28 Masakazu has joined #css 15:35:53 siye has joined #css 15:36:04 MJ has joined #css 15:37:10 Notes doc at https://github.com/WICG/canvas-place-element/issues/13 15:37:48 sanketj has joined #css 15:40:19 nigel has joined #css 15:40:46 RobKochman6 has joined #css 15:41:02 Are there slides somewhere? 15:41:12 Bert has left #css 15:43:44 ydaniv has joined #css 15:44:23 nigel has joined #css 15:49:28 bkardell_ has joined #css 15:52:40 Is there a queue? 15:53:21 schenney has joined #css 15:55:16 xfq has left #css 15:56:39 hypebeatsmagazine has joined #css 15:58:10 past has joined #css 16:01:56 davidleininger has joined #css 16:02:27 Jamie has joined #css 16:03:57 davidleininger has left #css 16:05:35 sefeng has joined #css 16:13:11 q+ smfr 16:17:25 ack smfr 16:23:44 (this is why we use IRC for scribing and queue control, instead of one-off docs and such) 16:27:46 smfr has joined #css 16:31:19 kizu9 has joined #css 16:34:36 Aren't we out of time? 16:37:39 Francis_Storr has joined #css 16:38:43 nigel has joined #css 16:42:07 Jamie has left #css 16:42:13 lea has joined #css 16:48:35 past has left #css 17:00:58 karlcow has joined #css 17:02:52 oriol has joined #css 17:02:56 emeyer has joined #css 17:03:10 emeyer has left #css 17:03:48 nigel has joined #css 17:04:17 tantek has joined #css 17:04:23 nigel has joined #css 17:04:49 nigel has joined #css 17:05:44 gsnedders has joined #css 17:16:33 florian_irc has joined #css 17:17:46 fserb has joined #css 17:24:39 fserb has joined #css 17:28:34 Domenic has joined #css 17:33:30 kzms2 has joined #css 17:33:31 fserb has joined #css 17:38:32 fserb has joined #css 17:47:48 fserb has joined #css 17:58:10 florian_irc has joined #css 17:58:49 fserb has joined #css 18:00:57 kizu9 has left #css 18:06:47 florian_irc has joined #css 18:12:18 emeyer has joined #css 18:12:25 mustaq has joined #css 18:12:26 emeyer has left #css 18:13:41 florian_irc has joined #css 18:14:01 florian_irc has joined #css 18:14:56 florian_irc has joined #css 18:18:55 fserb has joined #css 18:20:41 jfkthame_ has joined #css 18:22:13 tantek has joined #css 18:23:27 gsnedders has joined #css 18:34:42 Penny has joined #css 18:39:38 jfkthame_ has joined #css 19:07:58 emeyer has joined #css 19:08:01 emeyer has left #css 19:17:33 Francis_Storr has joined #css 19:30:47 Penny has joined #css 19:32:56 Linux_Kerio has joined #css 19:33:06 projecto- has joined #css 19:33:36 nigel has joined #css 19:33:37 leaverou_ has joined #css 19:34:38 Rossen- has joined #css 19:35:08 shans_ has joined #css 19:35:38 sylvaing_ has joined #css 19:46:13 Francis_Storr has joined #css 20:12:43 khush has joined #css 20:13:23 noamr has joined #css 20:16:00 kizu has joined #css 20:17:48 scribenick: vmpstr 20:17:55 github-bot, take up https://github.com/w3c/csswg-drafts/issues/10945 20:17:55 Topic: [css-view-transitions-*] TPAC breakout session 2024 20:17:55 OK, I'll post this discussion to https://github.com/w3c/csswg-drafts/issues/10945. 20:17:56 present+ 20:17:57 karlcow has joined #css 20:18:02 present+ 20:18:11 present+ 20:18:49 tantek has joined #css 20:18:58 vmpstr has changed the topic to: Breakout: View Transitions 20:19:53 fserb has joined #css 20:19:58 ntim has joined #css 20:20:03 florian_irc has joined #css 20:20:03 present+ 20:20:04 present+ 20:20:05 Adam_Page has joined #css 20:20:07 ydaniv has joined #css 20:20:07 present++ 20:20:12 present+ 20:20:20 mmocny has joined #css 20:20:21 noamr: welcome to the future of css view transitions 20:20:23 moonira has joined #css 20:20:34 noamr: previously on view transitions 20:21:01 ... we have shared element transitions, things that transition into other things that are not the same element. here we have an icon transitioning to a cover 20:21:03 florian_irc has joined #css 20:21:26 ... what we did in the last few years and apple webkit did we did same document and cross document view transitions, SPAs and MPAs work with same experience 20:21:36 ... we don't want the people to change their architecture for the experience 20:21:42 ... the constraint is that it's same origin 20:22:01 ... things we have in the oven right now: current view tranisiont are flat 20:22:27 ... they create a pseudo element tree with snapshots old and new states. this tree is flat. it's a bunch of things stacked on top of each other. so we're working on nested transitions 20:22:42 ... the other thing is that they are for the whole page, so we're thinking of scoped transitions that are more modular 20:22:46 ... that's not the topic for today 20:22:59 ... the story of navigation is incomplete in two ways 20:23:12 ... first, it's limited to same origin navigations, and the world is not the same origin 20:23:20 ... second it's gesture driven 20:23:50 ... you define the transition by defining an image on both things and we use pseudo elements to style what's happening in between 20:24:04 ... this happens in the new document 20:24:38 ... in cross document view transition, all the authors can do is slap a rule and it magically works 20:24:49 ... and the new document runs the transition 20:24:54 ... why should this be only cross origin 20:25:15 ... we have requests for this, you saw album to cover transition. what if it's a recommendation to a music provider. this is about a spacial relationship 20:25:29 ... that allows you to navigate 20:25:40 ... what about same owner and different origin 20:25:50 ... origin is the security barrier on the web, with only a few exceptions 20:26:15 ilya: commerce has a distinct page, where you want to navigate from ecommerce to a wallet provider 20:26:30 ... when you finish the wallet, you want to transition back to the site. both of those are janky 20:26:34 ... cross origin would do wonders here 20:26:47 noamr: this is about the sense of orientation not specific to the app 20:27:10 ... this is an example syntax, maybe we can say "to: any" to just allow the transition 20:27:17 ... so why not then? 20:27:27 ... because security 20:27:43 ... this is an easy way to kill projects 20:27:53 ... we were a bit more curious to understand what this means in practice 20:28:11 ... so the main security thing is ancillary data leaks. this is data that isn't directly related to the request 20:28:23 ... for instance if you ask for geolocation and you get it, it's not ancillary 20:28:38 ... here you ask for a visual effect, but you need geometry style information and you can gather whether the user is logged in etc 20:28:53 nigel has joined #css 20:28:59 ... even timing whether the page allows the transition and how long it took, all of this is ancillary data and we don't want to expose any of this 20:29:08 ... is this reasonable to expose something, but let's assume not 20:29:21 ... second it's about miscoordination, think about stale links on the web 20:29:36 ... where it leads to information that is no longer there and you can have buggy looking effects 20:29:49 ... if it's cross ownership the other side may look bad 20:30:10 ... third is spoofing, you can start a view transition and bind it to a scroll timeline or pause it 20:30:12 nigel has joined #css 20:30:28 ... the old side can do a bad image like call 1800 givemeallyourmoney and the user will think it's part of the new site 20:30:32 ... so we can't do it 20:30:49 ... so we look it at as a tradeoff triangle 20:31:04 ... first is the expressiveness and then complexity 20:31:16 ... with security i think of it as constraints 20:31:26 ... the first is about the spoofing part, the transition needs to be brief 20:31:37 ... this transition can't be seconds or scroll timeline, it needs to be 1/2 second or less 20:31:44 ... it needs to look like an animated transition 20:32:04 ... the other one is isolated, so unlike same origin transition, here the constraint is that neither document can interrupt or observe the transition 20:32:12 ... neither document can know if the transition happened 20:32:26 ... this is a one way street for one document say it wants to transition and the rest is invisible 20:32:30 eemeli has left #css 20:32:32 ... this is what makes it possible security wise 20:32:46 ... so let's say we have these principles, now we have 2 dimensions to explore 20:32:55 ... we have root-to-root element-to-root and element-to-element 20:33:10 ... this is root to root, the relationship is the whole page not per element 20:33:21 ... this is still interesting as this is still an opener relationship 20:33:34 ... this could be something that the page says without each elements 20:33:48 ... but it's less inspiring than other stuff 20:34:05 ... like if the opener wants an opacity style animation and the browser can run it by itself 20:34:14 ... why do browsers control it? maybe there is some relationship there 20:34:32 gsnedders has joined #css 20:34:34 ... element-to-root, this is from material design. UXR found that users love this type of transition 20:34:45 ... from list or from grid open to the whole thing. this is a common usage pattern 20:35:09 ... this doesn't require coordination since only one page gives us interesting information. the first page gives us geometry etc, but the second page only gives us a surface 20:35:22 ... we could have a special view transition name that oculd be the new root 20:35:32 ... and the icon could transition to that name (new-root) 20:35:49 ... the old page decides what is animation and it needs to brief, but it can do an opacity animations 20:35:55 fserb: what do you mean by types? 20:36:04 noamr: it's not important for this 20:36:12 fserb: and the two is the list of domains? 20:36:14 noamr: yes 20:36:21 q+ 20:36:26 noamr: the last is element to element as the last examples 20:37:10 ... we have an interaction ... you still need to define all your animations in advance, and it allows you shared element 20:37:24 ... and we need to avoid a way to avoid miscoordinations 20:37:35 q? 20:37:41 ack dbaron 20:37:50 q? 20:38:10 q? 20:38:23 ack lea 20:38:28 q+ 20:38:35 q? 20:38:42 oops sorry 20:38:44 wrong room 20:38:53 np :) 20:39:03 noamr: we have the following implementation options 20:39:19 ... we can run it on the browser, or run this in a special document 20:39:35 ... the third one is that we precompile the animation, compute all the keyframes, and then run them one at a time 20:39:53 ... none of these are simple, this allows interesting UI. security wise it's achievable 20:40:09 q+ 20:40:10 ... we're not sure if the expressiveness and complexity trade-off is worth it 20:40:11 q+ 20:40:17 ack flackr 20:40:32 q+ 20:40:42 flackr: you mentioned that element to root the style comes from the old page. is that also true for element-to-element? if you're running in the new document you can get the styles 20:40:49 noamr: 20:40:56 ntim: can you go over impl options 20:40:58 q? 20:41:16 noamr: one is to run in the browser, one is to do a new document 20:41:22 ntim: what is browser mean 20:41:24 aaj has joined #css 20:41:37 khush: same as what the browser UI would do, and make it part of the browser UX 20:41:41 ntim: like swipe animations? 20:41:44 q+ aaj 20:41:48 q? 20:41:50 flackr: this is defined by css though right? 20:41:54 noamr: yes 20:42:01 ydaniv has joined #css 20:42:05 noamr: another is to have an anonymous document, and that's what's running the animation 20:42:20 noamr: the third is precompile the animation all of the keyframes in advance to something like display lists and send them over to play 20:42:22 ack fserb 20:42:45 fserb: first, because i don't know how it works. for the same origin, how does javascript interact with this. does it execute on the new page before the transition starts 20:42:53 noamr: when the transition starts, the new page is already active 20:43:04 fserb: doesn't it break the assumption to be as fast as possible 20:43:20 noamr: it would be in a different renderer process and only deals with the surface 20:43:27 fserb: so kind of like loads int he backhground 20:43:41 khush: what you're saying is an existing problem when you're navigation across the two pages 20:43:57 ... we just don't want to add more bad things like allowing an inifnite bad animations 20:44:19 fserb: follow-up -- in the case where we're doing root-to-root or element-to-root, then a lot of time when you use motion to hide loading time 20:44:28 ... as in you start animating before it's ready so that it looks instance 20:44:39 ... in the element to element you can'yt do that, but in the element-to-root you could do that 20:44:52 noamr: yeah, you can animate to an empty surface before it's ready 20:44:57 ... it's an option vs render blocking 20:45:02 fserb: both cases exist 20:45:07 noamr: we'll need to research this 20:45:16 q? 20:45:30 fserb: and the only other question: do you have because it needs a coordination that is hard 20:45:42 noamr: we have requests for same origin and there is an ask for it, and it's a question we need to answer 20:46:07 khush: the use case is you share a link and you get an image in there but when you click that image expands to an image on the new site 20:46:17 fserb: but those htings don't track where that image was 20:46:30 noamr: yeah we'd need to do something with opengraph maybe, and not rely on viewtreansition names 20:46:33 ack mmocny 20:46:36 q? 20:47:07 mmocny: for element-to-element, i envision that the coordination has to happen ahead of time. would it help if ifrmes are involved like if you have an embed and then it's a same origin navigation 20:47:14 noamr: this is portals 20:47:18 q+ 20:47:28 ... this would be a different architecture that would be a different set of use cases, we didn't want to go there 20:47:48 mmocny: can i ask for shoppify, when you do check out do you see the preview of the card are there iframes 20:47:57 ilya: no 20:48:13 mmocny: but you might only need element-to-root or root-to-root 20:48:27 ilya: yes, element-to-root is a better experience 20:48:38 ack Adam_Page 20:48:41 q? 20:49:10 Adam_Page: i'm on the aria working group, and only know css superficially, but i have two accessibility related questions: could there be anything that can disruptive to the mechanics of unloading a page 20:49:25 ... when you're having something across the new page 20:49:48 khush: this would be the same with cross document transition 20:49:59 ... all of this animation happens on the new dom 20:49:59 q? 20:50:15 emeyer has joined #css 20:50:20 Adam_Page: the second question is that accessibility was sensitive to the motion 20:50:31 emeyer has left #css 20:50:37 q? 20:50:42 noamr: all of the things we are there in css to do prefers-reduced-motion 20:50:52 noamr: we might have different defaults 20:50:55 ack aaj 20:50:57 q? 20:51:24 aaj: i had a question about what the perceived benefit is, since there is increasing complexity. does the root-to-root use-case, can we estimate how much of the problem that solves 20:51:33 ... is that enough to be happy or do we go beyond that 20:51:47 ntim: it would be weird an dinconsistent if we only did one of the use cases 20:51:55 q? 20:52:04 noamr: it would be something we need to take a look 20:52:24 aaj: you start with a simple implementation and go beyond that 20:52:40 ntim: for developers it's confusing if you only cover cross origin but only have same origin it's confusing 20:53:03 noamr: you can have a long animation or something else 20:53:16 noamr: none of these are all shared element transitions 20:53:32 khush: we haven't decided what page we are running this on 20:53:56 q? 20:53:58 ack flackr 20:54:12 flackr: if we have element-to-root then going back would be weird that you can't do the opposite (shrink page) 20:54:18 s/shrink page/shrink back/ 20:54:25 noamr: it's an open question 20:54:28 fserb: good point 20:55:00 khush: the other thing we want to talk about what's in the works, and talking about in view transitions next 20:55:15 ... most users use gestyures to navigate and view transitions aren't supported there 20:55:54 ... this is an example of cross document view transition and you click and you see the animation, when you do the back arrow it navigates you back 20:56:22 ... this is something we're working on, and this is in other browser. the interaction when you clicked a link is the same, but when you did the swipe gesture and we're doing a animation when we do the swipe 20:56:29 ... so we can't run the view transition there 20:56:39 ... so we gave the users an ability to customize and took it away 20:57:18 ... i wanted to mention that the way this is done is we capture a screenshot of the page, so when you swipe back, you can get the peek of where you're going and choose to go there or not 20:57:31 ... here, we have a couple of example of other transition where customixation might be helpful where the browser can't do it automatically 20:57:43 ... one is grid of items where you want the animaiton of detailed item to collapse to where it came from 20:57:56 ... the browser can't do it, but the browser can't do it 20:58:00 ntim: how is it related 20:58:33 khush: if we didn't have gesture then the browser can run the transition but if you're running it with a gesture, then we can't do the view transition for that customization 20:58:45 ... the browser isn't doing a job as good as the author could 20:58:51 ... the second example is we're dealing with two tabs 20:59:05 Penny has joined #css 20:59:06 fserb: we're talking about gestures, but you're only mentioning back gestures 20:59:15 khush: yes, we're starting with back gestures 20:59:37 noamr: thinking of dismissing dialogs, there are other gestures that exist and we were discussing whether to call it swipe to back or a gesture problem in general 20:59:54 flackr: the tab switch is going forward as well 21:00:10 khush: so i'm diving deep into how to solve this problem 21:00:24 ... the red and green part is showing you whether you're on the old or new part of the navigation 21:00:31 ... most of the interesting stuff happens on the green side 21:00:49 ... on the old state all we do is do the navigation and do captures, but everything else including animation happens on the new page 21:01:16 ... this is what the box tree/pseudo tree looks like you have old pseudo that is static images, and the new pseudo is content that is coming from the current document and that's why it's live 21:01:33 ... this model doesn't work, because by design you would need to run the animation before you've navigated 21:02:03 ... just to mention why that's bad: there's a lot of state we can undo accidentally, like if you swipe a page and that cancels a payment page without committing to the back gesture 21:02:11 ... this is why we need to do it on the old pahge 21:02:41 ... the model we're proposing, we construct the pseudo tree on the old page, and now the line is red since all of the interesting stuff is happening on the old page 21:02:51 ... if the user decides to cancel and we snap back, nothing happens 21:03:02 ... if they decide to invoke we flip to the new state 21:03:20 ... the pseudo tree looks the same, but now the old pseudo is live content from the old page and new pseudo is static content 21:03:34 ... so where is that content coming from, since we haven't navigated there 21:03:39 ydaniv has joined #css 21:03:44 ... if it's a new navigation we don't know what we can do other than prerender 21:04:04 ... for the history navigation, we have a few options. first is the UA screenshot, which is what we're doing for browser ui 21:04:14 ... let's wrap it up as a pseudo and give it to the page 21:04:43 ... the other option is when you went from page A to page B, we broke down the page and captured all of that state, we currently discard it. maybe we can persist it which gives you more interesting information 21:05:11 ... the last one is back-forward cache. if it's already there, maybe we can ask it to produce one frame and that gives you a high fidelity content 21:05:19 q+ 21:05:32 ... we're proposing starting with UA screenshot 21:05:58 ... mostly this is what we already have but changing how we do this, but something that is missing is that we don't have a notion of gestures that navigate 21:06:03 ... for this feature we need this 21:06:11 ... we're thinking of introducing these concepts 21:06:31 ... one nice thing is that we're not eh first ones to do this 21:06:38 ... scroll driven animations solved that problem 21:06:52 ... so the idea as far as CSS is concerned, this gesture can be introduces as a timeline 21:07:18 ... the one we're htinking of is similar: the first block customize-ua-gestures, is the author saying that i want to run a custom animation, so suppress your own (browser's) 21:07:28 ... and the second part says this animation is driven by that timeline 21:07:37 ... so far this is nothing view transition-y going on 21:08:00 ... for same document navigations, you don't have use view transitions so maybe you can do something simpler 21:08:00 ... the goal is modularity 21:08:21 ... the other thing is important: we're not giving developers power of what the gesture does, back gesture still navigates back 21:08:26 ... all you get to do is customize the back gesture 21:08:36 ... this is how you would glue it into view trnasiitons 21:09:01 ... you give it a navigation component that says gesture(--back-timeline) and how UA css will automatically use that timeline 21:09:15 ... the ideal goal is you defined a transition and it doesn't matter if the user clicked a button or swiped 21:09:22 q+ 21:09:28 ... i'm happy to hear question 21:09:43 ack fserb 21:10:06 fserb: there are two things: gestures to the timeline, and automatically creating back transitions depending on the forward transitions 21:11:23 khush: so distinction if you go back, then you load the last page 21:11:29 fserb: this. might be nice to have without gestures 21:11:41 ack flackr 21:11:42 q+ 21:12:10 flackr: one thing you mentioned it has to run on the old page.. if we have a bfcache, you might unload the page and bfcache it and then reload it 21:12:24 khush: yes and no, since we still run pagehide and things like that, and the page can cleanup the state 21:12:58 flackr: it may not be that bad, but setting that aside: at hte point when you're capturing the screenshots, you can capture all of the info that you want to execute targeted transitions with captures and named elements 21:13:07 khush: it has some intersection state 21:13:09 ack ntim 21:13:30 ntim: what if the website puts a vierw transition that is completely incompatible with the gesture 21:13:32 ntim: where it doesn't makes sense with it 21:13:49 khush: the site can do weird things with click based animations as well, it's all withint hte context of that 21:13:55 ??: the site can scroll up when you scroll down 21:14:07 fserb: the back one is decided by the ua 21:14:24 khush: the action decided by the UA but the visuals are up to the author 21:14:45 ntim: what if the page decides that we swipe from the right instead of from the left 21:15:07 khush: if the site decides, and some of the semantics we have to decide 21:15:23 ??: does that change if the page is RTL 21:15:40 khush: yes, as a browser we change the direction of the UX 21:15:51 noamr: you'd have the coordinates that are relative to the gesture and relative to the history 21:16:16 fserb: have you thought of the next step, you're presenting as a linear timeline, but that doesn't work in 2d gestures 21:16:35 noamr: you can have several coordinate systems, you can have two additional ones that are relative to teh gesture and to the historuy 21:16:52 ... are you going in the direction of the browser history or finger direction. 21:16:57 ... this is the type of thing to figure out 21:17:17 khush: we went into a lot of thinking in browser UI so authors don't have to think about it 21:17:30 fserb: the expressiveness is a complex problem 21:17:34 q? 21:17:55 ntim: i'm concerned that you have a different platform that you want a different gesture to go back 21:18:06 khush: you can start without exposing this gesture to this platform 21:18:19 noamr: it's a progressive enhancement, if you don't support it nothign breaks 21:18:31 fserb: have you thought about naming the gestures and then having those 21:20:39 q? 21:21:24 tim: i was going to say that there is a case either way, being able to hook into the intent of the gesture is likely more good (but can make arguments for both) 21:21:39 ... if you're hooked into the gesture itself 21:21:46 ... history back is history back 21:22:07 ntim: if you're hook into intents and you assume a certain visual effect, the gesture doesn't make sense 21:22:17 khush: yeah you need a combination of both 21:22:24 noamr: these are all the great questions 21:22:40 topic: end 21:24:34 Penny has joined #css 21:24:41 karlcow has joined #css 21:29:08 florian_irc has joined #css 21:31:12 ScribeNick: TabAtkins 21:31:27 nigel has joined #css 21:33:17 TabAtkins has changed the topic to: Carousel 21:34:19 karlcow has joined #css 21:35:03 TabAtkins has changed the topic to: Carousel https://www.w3.org/events/meetings/38e6f53c-458a-484e-b2f0-c85f7dd7d968/ 21:35:28 mmocny3 has joined #css 21:36:17 mmocny has joined #css 21:36:25 github-bot, take up https://github.com/w3c/csswg-drafts/issues/9745 21:36:25 Topic: [css-pseudo-4] Enabling carousel design patterns in CSS 21:36:25 OK, I'll post this discussion to https://github.com/w3c/csswg-drafts/issues/9745. 21:38:22 sabidussi_marco has joined #css 21:44:29 florian_irc has joined #css 21:45:03 wendyreid has joined #css 21:45:11 present+ 21:45:29 jarhar has joined #css 21:45:39 tantek has joined #css 21:45:41 florian_irc has joined #css 21:45:51 fserb has joined #css 21:47:04 present+ 21:47:27 Adam_Page has joined #css 21:47:30 present+ 21:47:30 BrianE has joined #css 21:47:32 flackr: [introduces self] 21:47:48 present+ 21:47:49 flackr: I've been doing a lot of exploration into new UI patterns on the web, one of which is carousels. 21:48:10 flackr: if you look up "should I use a carousel", the common answer is no 21:48:13 flackr: session complete 21:48:23 gsnedders has joined #css 21:48:30 Penny has joined #css 21:48:42 flackr: this website goes into a bunch of pitfalls people often run into when they write carousels 21:49:02 flackr: This particular example is a bad carousel too, it auto advances, I can't swipe, etc 21:49:22 flackr: despite the fact that they're often done poorly, there are many many carousel components 21:49:29 nigel has joined #css 21:49:56 [tech issues] 21:49:59 jfkthame_ has joined #css 21:50:01 present+ 21:50:01 cyns has joined #css 21:50:15 present+ 21:50:30 karlcow has joined #css 21:50:49 MJ has joined #css 21:51:00 Present+ 21:51:06 smfr has joined #css 21:51:18 giacomo-petri has joined #css 21:51:29 ydaniv has joined #css 21:51:40 present+ 21:51:44 flackr: this is bootstrap, for example 21:51:57 flackr: OpenUI has done a long exploration of carousel pattern 21:52:03 cyns has joined #css 21:52:10 present+ 21:52:11 flackr: Adam created a demo showing all the different "shapes" for a carousel 21:52:31 flackr: dots, thumbnails, no page markers, no arrows, previews of the next item 21:52:37 flackr: you can have shopping carousels, where you move be3tween *pages* of items 21:52:48 flackr: whether we like them or not, devs create carousels, so we should make them better 21:52:55 flackr: looking at most of these, there's some common features 21:53:11 flackr: CSS today comes pretty close to letting you build something like this in a scrolling elmeent 21:53:24 flackr: with Scroll Snap you can make something that slides from pane to pane, supports touch 21:53:36 flackr: because eit's just a scroll, any scrolling mechanism works, better than explicit event handlers 21:53:42 flackr: you just have to roll a few pieces yourself 21:53:52 flackr: that's what Adam did on his site, making a few extra bits in JS 21:54:08 flackr: so I looked into what we can do better, so it's just scrolling, we can accelerate that, and navigate it in the browser so it's more accessible 21:54:21 flackr: I have an explainer where I touch on these features 21:54:26 flackr: you have scroll-snap, as mentioned 21:54:32 flackr: you often have buttons to scroll between items/pages 21:54:41 demo: https://gui-challenges.web.app/carousel/dist/ 21:54:42 Patrick_H_Lauke has joined #css 21:54:42 flackr: there's often a progress indicator 21:54:52 present+ 21:54:54 flackr: the progress updates as you scroll 21:55:11 flackr: and if you have all of these things, you can make a carousel 21:55:13 flackr: you can change where these things are positioned, you can make vertical carousels, any combo 21:55:18 janina1 has joined #css 21:55:22 flackr: breaking these down, I think we can make it possible to express in css 21:55:38 nigel_ has joined #css 21:55:40 flackr: i've outline a set of features i'd like to dive into, to explain what part each is offering and how it's used to build a carousel 21:55:44 flackr: first, some form of stylable fragmentation 21:55:49 flackr: to create automatic pagination 21:55:58 flackr: if you use multicol fragmentation, columns:1 21:56:05 flackr: you'll get a layout with one page of content per fragment 21:56:12 flackr: you'll get a long list of columns, split up into "pages" 21:56:21 flackr: if we let yous corll-snap to that, you get a paginated experience 21:56:30 flackr: scroll markers if about those progress indicators 21:56:48 flackr: skipping the "flow into Grid areas" temporarily 21:56:54 flackr: scroll buttons are the next/prev buttons 21:57:02 flackr: You can roll them on your own, but it would be convenient to auto create them 21:57:07 flackr: finally, inert 21:57:39 flackr: the ARIA authoring guidelines for carousels recommend that tonly the onscreen content is present in tab order, and the next/prev buttons are used to bring up the next slide 21:57:47 flackr: so you don't trap people in a long list of slide contents 21:57:59 flackr: currently authors have to do this manually, updating the inert attribute on each slide 21:58:09 flackr: but you could imagine updating this automatically as you scroll or click the buttons 21:58:30 flackr: so that's a quick overview, I want to dive into some of them 21:58:52 github-bot, take up https://github.com/w3c/csswg-drafts/issues/10720 21:58:52 Topic: [css-overflow-5] Scroll-markers 21:58:52 OK, I'll post this discussion to https://github.com/w3c/csswg-drafts/issues/10720. 21:59:04 flackr: you can imagine this like a ToC for a scrolalble element 21:59:18 flackr: in my example, one way to do it is create a set of anchor links to your content 21:59:34 flackr: I'm proposing you add `focusgroup` to get the input semantics you expect - can arrow between them, only one is active at a time 21:59:45 flackr: And the browser has some tracking to update which one is "active" at a time 22:00:04 flackr: if your page only contains top-level sematnic items - a list of items - you can create pseudo-elements for these 22:00:19 flackr: this is crucial for autoamtic pagination, like columns, so you can have one marker per page, not one per item 22:00:24 https://github.com/flackr/carousel 22:01:06 flackr: here's a simple live example, three sections, declared that each creates a scrol lmarker, and they've been flowed into the scroll marker group on the left 22:01:34 BrianE has joined #css 22:01:46 q+ 22:02:04 flackr: [showing source] roughly speaking, you add a pseudo-element for each thing that needs a marker, and a scoll-marker-group pseudo is automatically created to hold them 22:02:19 hdv: what are the a11y semantics of something that becomes a scroll marker? 22:02:41 q+ 22:02:46 flackr: shoudl be whatever makes the most sense for these use-cases. given that we upgrade links, i assume it woudl ahve the same sematnics as an anchor link 22:02:59 Di has joined #css 22:03:04 q- 22:03:19 link with aria-current="true"... 22:03:40 ack me 22:03:43 TabAtkins: and note that in this example it's *generating* fresh anchor links, they can be whatever. if reusing elements on the page, they have to be links already 22:04:05 flackr: this example reuses existing links. The ToC links are in a focusgroup, and we track sc roll progress to indicate which is active 22:04:22 q+ 22:04:23 flackr: I also have a separate scroll marker group on the right to track the top-level sections. 22:04:35 flackr: each group has its own "current" marker 22:04:49 flackr: inline links, not in a focus group, dont' get considered in this, they're never marked as "current" 22:04:59 https://drafts.csswg.org/css-overflow-5/ 22:05:01 flackr: This is the most mature of these specs, it's currently in the CSS Overflow 5 spec 22:05:15 dholbert has joined #css 22:05:21 https://codepen.io/flackr/pen/MWMLPpP 22:05:30 flackr: what i've shown so far is a polyfill, but we have an impl in Chrome Canary with experimental web paltform features turned on 22:06:06 flackr: the only content on this page is a bunch of items. they're automatically grouped into pages, with scroll markers for each page, and next/prev buttons, and it's all automatic from CSS 22:06:13 flackr: any questions about scroll markers or move on? 22:06:30 bkardell_: This is dependent on the focusgroup attribute? what's the progress on that right now? 22:06:44 flackr: to make a scroll marker group from link elements, that's dependent on focusgroup 22:06:57 flackr: we implicitly have the semantics for the pseudo-elements, but it doesn't depend on the attribute 22:07:10 bkardell_: does the implementation support focusgroup? 22:07:33 q? 22:07:44 flackr: the pseudo-element impl has an implementation of focusgroup semantics, by hand. we do have a `focusgroup` impl behind a flag in Chrome, but not shipping yet. 22:07:52 q+ 22:07:57 flackr: The use of it in my earlier demo used the polyfill 22:08:03 ack bkardell_ 22:08:03 q- 22:08:14 jarhar: i'm not super familair with the pseudo-element API shape 22:08:24 jarhar: kinda seems like these are more element-like than other pseudos 22:08:36 jarhar: we had to make some changes to make them receive events in ways other pseudos can't 22:08:55 jarhar: we have, in blink, a pseudoelement class that's a subclass of Element so it kinda works 22:09:06 jarhar: talking with Tim, he said their pseudos are more strictly different. might be difficult for them to implement. 22:09:14 jarhar: wonder if there are any webkit folks around to talk about 22:09:41 flackr: good question. pseudos *can* be targeted by clicks and other events. we hide that the pseudo was targeted (use the owner element instead), but i fyou click on a ::before you can listen for the click event 22:10:11 jarhar: and you can use like hover pseudoclass? 22:10:18 TabAtkins: Yes, and :focus/:active if they're focusable/etc 22:10:20 maybe we can tag ntim so they can find it when there's time and let us know :) 22:10:43 flackr: the CSS pseudo spec has a full definition of PseudoElement interface, subclassing Element, so there's a route to them being full-blown event targets 22:10:56 jarhar: okay, probably less crazy than i thought it was 22:11:14 ack jarhar 22:11:40 github-bot, take up https://github.com/w3c/csswg-drafts/issues/10722 22:11:40 Topic: [css-overflow-5] Scroll button pseudo-elements 22:11:40 OK, I'll post this discussion to https://github.com/w3c/csswg-drafts/issues/10722. 22:11:50 present+ 22:11:51 flackr: scroll buttons are conceptually simialr to scroll markers 22:12:01 flackr: they are focusable, they hang off the scroll container 22:12:17 flackr: and they scroll that element in the indicated direction, as specified by their selector 22:12:44 flackr: here i used ::scroll-down-button, but we have syntax alternatives like ::scroll-button(down), this would better let authors specify logical or physical directions, dpeneding on which is appropraite 22:12:53 WebKit does want to move away from the PseudoElement class that extends Element 22:13:08 https://flackr.github.io/carousel/examples/scroll-button/ 22:13:21 flackr: so i have a demo built on the polyfill - you also saw them in the Canary live demo 22:13:32 flackr: Here's a terms of service agreement or something, page down buttons to go down 22:13:41 WebKit only uses that for ::before / ::after. The other pseudos that generate boxes are hooked to render tree building 22:13:42 flackr: they should implicitly become inactive when you can't scroll further 22:13:51 flackr: and they scroll equivalent to one page, like pressing PgDn 22:14:02 smfr: is that the equivalent of a smooth programmatic scroll 22:14:27 q+ 22:14:41 TabAtkins: I assume it's basically a PgDn press (possibly in other directions) 22:14:42 CurtBellew has joined #css 22:14:49 q- 22:14:54 smaug: maybe a little tricky, maybe not scrolling a full view of height 22:15:00 jfkthame_ has joined #css 22:15:06 flackr: my understanding is most browsers scroll 85% of the optimal viewing region of the scroller 22:15:12 flackr: so you can still see osme of the previous content 22:15:20 flackr: of course, with snap areas it'll align as necessary 22:15:42 dbaron: I think some may avoid letting the overlap get too big relative to the default font size, you don't want too many lines repeated 22:15:57 smfr: so this is independent from carousels, right? basically a generic "fake scroller" control 22:16:00 flackr: yes 22:16:07 smfr: and you could have one for the root scroller? 22:16:09 flackr: yes 22:16:17 dbaron: is it problematic for pseudos to be focusable? 22:16:20 flackr: i don't think so 22:16:24 q+ 22:16:40 TabAtkins: we presumably want to make psuedos focusable 22:16:43 TabAtkins: i hope it's fine 22:16:51 dbaron: I think there's a bunch of things taht assume the curently focused thing is an Element 22:17:00 flackr: my thinking is that .activeElement 22:17:06 q? 22:17:06 dbaron: that's one of the pieces, yes 22:17:18 flackr: it'd give you an actual element, in the case of these buttons its the scroll container 22:17:32 flackr: this is similar to having focus in a shadow dom, the host element is the activeElement 22:17:39 dbaron: that seems like a reasonable model 22:17:45 dbaron: it does need to define tab order and such 22:17:51 bkardell_: what's the role? 22:18:00 flackr: depends on the pseudo, but needs to be well-defined for each. 22:18:05 flackr: for scroll buttons, presumably a button 22:18:23 cyns has joined #css 22:18:23 flackr: i definitely want feedback on things like "what is the focus order" 22:18:38 flackr: i think general guidance is buttons for navigating should be together in a group, so they hit the buttons, then into the contents 22:19:11 bkardell_: right now scrollers don't have focus behavior, right? you focus the area. 22:19:16 ??: it depends! 22:19:27 flackr: notaby this is not reproducing the scrollbar, it's adding new scrolling affordances 22:19:42 hdv: is there a precedent for gencontent to have their own roles 22:19:56 TabAtkins: there hasn't been yet as so far they haven't been given focusability 22:20:39 q- 22:20:42 github-bot, take up https://github.com/w3c/csswg-drafts/issues/10715 22:20:42 Topic: [css-overflow-5][css-scroll-snap-2] Snapping and generating scroll-marker pseudo-elements from fragments 22:20:42 OK, I'll post this discussion to https://github.com/w3c/csswg-drafts/issues/10715. 22:21:03 karlcow has joined #css 22:21:09 flackr: Final thing that really helsp make this fall together is being able to use fragmentation to automatically create the "pages" 22:21:23 flackr: So if you specify that you have columns:1, that'll make one fragment per page 22:21:33 flackr: You could do multiple columns 22:21:40 flackr: we want to support some styling on these columns 22:21:51 flackr: scroll-snap-align is a notable one, to align the columns itself 22:22:00 flackr: not useful to stop a scroll halfway between columns, would rather it snap 22:22:01 demo of columns: https://jsbin.com/modewaj/edit?html,output 22:22:15 flackr: the other use is generating a scroll marker 22:22:28 flackr: if a column is a destination you want to get to, you might want a scroll marker for it 22:22:31 https://codepen.io/flackr/pen/yLmyPEV 22:22:34 flackr: combining these features, you can make this demo 22:22:48 flackr: note snap alingment isn't working yet 22:23:04 flackr: you can see the number of scroll-markers i generate changes as i chagne the container size, since different number of items fit on a scroll page 22:23:17 flackr: with snap-align support it would automatically snap to pages, arrows would work properly 22:23:30 flackr: this lets authors just write a list of content, and have it present in a full paginated experience 22:23:34 florian_irc has joined #css 22:24:15 TabAtkins: while this is fully generated, all of this can be done with real elements 22:24:26 TabAtkins: allowing additional structure / semantics 22:25:04 syns: This really excited me, as someone who's lead a dev team thru a carousel 22:25:18 TabAtkins: our exploration revealed that there were basically *zero* correct carousels on the web 22:25:22 gsnedders has joined #css 22:25:23 q+ 22:25:27 syns: but there are more correct ones ^_^ 22:25:32 github-bot, end topic 22:26:00 wendyreid: I noticed in a lot of examples - and i've also struggled with this for devs - I haven't seen a lot where each item in the carousel contains a bunch of other content 22:26:08 wendyreid: Like say each has an image, text, and a call to action button 22:26:23 wendyreid: but you also want item-by-item interaction as well as interaction in each 22:26:37 florian_irc has joined #css 22:26:50 present+ 22:26:57 wendyreid: so in this example (image with label) what if there's a button inside of each, too 22:26:58 MJ has joined #css 22:27:06 q+ 22:27:07 flackr: this is just content inside a scrollable element, we're not treading new ground 22:27:30 polyfilled demo: https://flackr.github.io/carousel/examples/carousel/image/ 22:27:51 s/syns:/cyns:/g 22:28:03 TabAtkins: the only particularly new thing here is the auto-inerting. only the visible stuff in the scroller show up in the tab order, until you scroll pages 22:28:20 wendyreid: in this example I might have expected focus to move to the next button at the end, rather than past 22:28:31 q+ 22:28:37 flackr: we've seen both. the APG example has the buttons together in tab order, but they're visually together there. 22:28:45 Agree with Wendy here ... APG pattern may not be the be all/end all 22:28:47 wendyreid: Yes, it depends on the visual placement 22:29:15 flackr: I haven't mentioned this yet, thinking of having invokercommand to let you make your own buttons that scroll; you can put them anywhere 22:29:27 flackr: maybe for generated content, we could use reading order to change where they are 22:30:06 TabAtkins: except those are abspos usually, so they "wont' participate" in reading order. but we could build on the machinery. 22:30:07 ack me 22:30:25 cyns: we were talkinga bout that in aria, having to go thru the entire slide to get to the next button can be annoying 22:30:50 bkardell_: I have now twice tried to tackle tabs 22:31:01 bkardell_: panels and panelsets 22:31:03 https://github.com/openui/open-ui/issues/559 22:31:06 bkardell_: most recently in openui 22:31:17 demo showing scroll-marker based tabs: https://flackr.github.io/carousel/examples/scroll-marker/tabs/ 22:31:43 bkardell_: got far, then got feedback that a bunch of the cases, Sarah higgley and I discovered that sometimes things that look like tabs shoudlnt' be ARIA tabs, but what should they be instead? 22:31:46 bkardell_: this might be the answer 22:32:07 bkardell_: these look a lot like tabs, but they're actually panels in a document, a kind of scroll 22:32:09 s/Higgley/Higley/ 22:32:10 bkardell_: I like that 22:32:18 s/higgley/Higley/ 22:32:28 bkardell_: especially since with a MQ you could change how it's displayed, maybe on your phone it's just a long scroll of content 22:32:46 bkardell_: it's kinda a design affordances sometimes, different from browser tabs. those aren't design, they're a doc manager 22:33:05 bkardell_: I'd love to hear from more a11y people if you think this might be a decent pattern for attacking this kind of tabs 22:33:12 florian__ has joined #css 22:33:35 q+ 22:33:36 flackr: that's also one of the benefits that semantically it's just a list of content. you can just change the way it's presented based on form factor 22:33:42 ack bkardell_ 22:33:50 cyns: would you change the a11y mapping based on that? 22:33:54 bkardell_: that's the question 22:34:10 bkardell_: maybe we already have things sorta like that, like collapse the menu up 22:34:19 bkardell_: but it seems more known-quality and subtle 22:34:25 cyns: the browser can do it in this case 22:34:45 bkardell_: yeah, and this is like scrollbars. we don't say "this is a scroll area" like in Java, you just get a scroller if you need it 22:35:15 bkardell_: here we can see "if you have the real estate, show them in panels" but if it's small make it just scrollable 22:35:22 cyns: I like how simple the code is, especially compared to other carousels 22:35:35 hdv: so this example wouldn't be ARIA tabs? 22:35:49 bkardell_: I think so, I think just having it be a scroller would be a better solution 22:36:07 bkardell_: ARIA tabs are cases where they're app-style tabs, more like browser tabs. those should be tabs. 22:36:14 bkardell_: but they're also not likely to change, they're not a style choice 22:36:29 florian_irc has joined #css 22:36:44 q- 22:36:56 dbaron: I spent an hour talking to Brian and Sarah Higley a year or so ago. I'm rereading my comments, from the long issue Brian linked. 22:37:18 dbaron: One thing - do you want find in page to find things in the other tab? do you want all tabs to show in a printout or all? 22:37:40 dbaron: I think suggestion was if find-in-page shouldn't switch the tab, and user only wants one tab in the printout, it's probably aria tabs. if it's the other way around, probably the panel-set tabs 22:37:51 dbaron: I haven't internalized it enough to be sure I believe it 22:37:58 dbaron: especially that those two things correlate well 22:38:22 bkardell_: i'm not sure *I* believe it. but enough people I respect have articulated it in a way that makes me think we need to take it seriously 22:38:30 bkardell_: if we find something that lets us make that distinction, we should do it 22:38:45 bkardell_: but yeah, I don't think everybody has the same feelings 22:38:58 bkardell_: not everyone agrees on the breakdown, or even that there should be a breakdown 22:39:05 bkardell_: but I think we've articulated differences that do make sense 22:39:44 hdv: user research about whether they prefer panel-sets vs aria tabs, doesn't seem to be a clear preference 22:39:53 bkardell_: does seem to likely be a user preference, people can prefer either 22:40:01 hdv: we saw people who liked either, makes it hard to choose 22:40:20 florian_irc has joined #css 22:40:22 wendyreid: also it's not always semantically easy to express "going to different place on this page" vs "going to different page" 22:40:32 wendyreid: sometimes "tab navigation" is doing either 22:40:45 wendyreid: not clear to the user 22:40:52 wendyreid: and not really a semantic way to indicate that 22:41:20 ydaniv: wild idea, if I put overflow:clip (and rest is inert) it would be tabs? 22:41:51 overflow:hidde (hdv) 22:42:02 flackr: one idea that came up in ARIA, could have a role on the scrolling element that determines the generated content role 22:42:22 (https://github.com/openui/open-ui/issues/559#issuecomment-1585043874 was the summary of the discussion that I mentioned above) 22:42:50 smfr: I had questions about the real ARIA tabs, presented today was high-level functionality 22:42:59 bkardell I'm neutral on this. users often...don't care, as long as it works correctly and makes semantic sense 22:43:01 smfr: for scrolling carousels, wonder if we should do it for tabs too 22:43:16 q+ 22:43:17 smfr: you can do tabs today with radio buttons and :checked 22:43:23 smfr: do we want this to work better in this interface? 22:43:34 smfr: id' probably want non-visible tabs to be display:none for perf reasons, for example 22:43:54 flackr: so something similar to scroll markers, but display:nones the non-active content 22:44:16 there's definitely something good in there 22:44:32 smfr: also, you said the scroll buttons are siblings of the scroller, how does that work for the root scroller? 22:44:45 flackr: they're children in that case, you'd use fixpos to position them 22:45:23 Patrick_H_Lauke: heard about some devs doing this with radio buttons/etc 22:45:30 Patrick_H_Lauke: that's obvs semantically very dubious 22:45:36 Patrick_H_Lauke: much more positive with what i'm seeing here 22:45:47 Patrick_H_Lauke: more bespoke, rather than a perversion of CSS 22:46:08 Patrick_H_Lauke: explaining to a screen reader that, yes, there are radio buttons but they actually switch visual tabs, it's bad 22:46:08 Patrick_H_Lauke: so this is a good step forward 22:46:23 flackr: We're at time, wrapping up 22:46:31 (in answer to brian's earlier question, i hid in my hotel room for the session) 22:47:17 great stuff, thanks all 22:48:53 Patrick_H_Lauke has joined #css 22:53:12 janina1 has joined #css 22:56:27 karlcow has joined #css 22:59:56 jarhar has joined #css 23:00:11 dholbert_ has joined #css 23:00:12 ethanjv has joined #css 23:00:23 topic: Styling form controls 23:00:29 scribenick: dandclark 23:00:30 aardrian has joined #css 23:00:35 alisonmaher has joined #css 23:00:37 present+ 23:00:42 present+ 23:00:56 tantek has joined #css 23:01:11 kbabbitt has joined #css 23:01:11 present+ 23:01:13 present+ 23:01:21 present+ 23:01:24 kschmi has joined #css 23:01:34 vmpstr has changed the topic to: Breakout: Styling form controls 23:01:42 present+ 23:01:48 estelle has joined #css 23:02:05 wendyreid has left #css 23:02:17 present+ 23:02:23 present+ 23:02:34 JJ has joined #css 23:02:36 present+ 23:02:58 Adam_Page has joined #css 23:03:04 moonira has joined #css 23:03:04 ntim: 23:03:15 ...I've given this presentation in joint csswg-openuicg meeting 23:03:25 ...I've heard many haven't seen it 23:03:36 giacomo-petri has joined #css 23:03:37 ...It's presentation on how we want to make form control styling easier 23:03:48 gsnedders has joined #css 23:03:56 ...It's gathering of ideas from what's already been discussed in csswg/whatwg and some ideas from webkit team 23:04:18 ...Problem is consistent styling of form controls is a pain 23:04:40 ...If you've worked with form controls before you may have faced inconsistent default styles, or different parts are inconsistent 23:04:44 present+ 23:04:54 ...webkit-prefixed pseudos, others in different browsers 23:05:06 ...The way we want to address this is address incrementally 23:05:18 ...But it's also important to look at this holistically, look at all controls 23:05:25 ...Important to not repeat past mistakes 23:05:37 ...One of the main ideas from CSSWG is appearance:base. 23:05:46 ...`appearance` is prop with 2 other values, `auto` and `none` 23:05:59 ...`base` is new value opting you in to nicer interoperable mode 23:06:07 ...Gives you consistent pseudo elements for styling 23:06:19 ...for UA stylesheets we want to base ourselves on a few principles. 23:06:26 khush has joined #css 23:06:28 Rain has joined #css 23:06:36 present+ 23:06:37 present+ 23:06:54 present+ 23:07:25 ...Needs to be identical cross browsers. Controls need to be recognizable. Styling needs to be accessible (e.g. contrast). Styling should be consistent across controls; like a design system. Need to be able to customize appearance easily without needing to reset a bunch of properties. Styling needs to be comprehensive, cover all states. 23:07:54 ...appearance auto is native control styles. appearance: none is basically random. appearance: base is more consistent. 23:08:10 zcorpan has joined #css 23:08:11 ...Note sizing is inconsistent, maybe appearance:base can solve some of this. 23:08:14 present+ 23:08:28 ...Can't really apply styles on appearance: auto, it's a non-starter for form control customization 23:08:48 ...appearance:none is a mess. Sometimes use system colors. Checkboxes and radios just vanish. 23:08:55 ...So not usable as starting style. 23:09:05 ...pseudo-element tree is inconsistent 23:09:18 janina1 has joined #css 23:09:29 ...For appearance:base UA stylesheet we inherit fonts and text colors. 23:09:47 tantek has joined #css 23:09:50 ...background is transparent. Border is currentColor. 23:10:22 ...Want to hear feedback from you all about this proposal. What do you think the pain points are with styling form controls, what defaults you're annoyed about 23:10:29 chrishtr: Do you have screenshots of the rest? 23:10:31 q+ 23:10:35 ntim: I just have these but can make more 23:10:35 estele has joined #css 23:10:36 q+ 23:10:43 q+ 23:11:16 q+ 23:11:22 ethanjv has joined #css 23:11:24 emilio: I think it's good we're focusing on a few simple properties that make the control look like that without adding extra stuff. Focusing on border, background-color and pretty much that is great. I think the different sizing you fixed by just inheriting font. That's because textarea and input have different default fonts. But looks reasonable to me. 23:11:33 ...The other controls may be a lot harder but for these looks pretty good 23:11:33 q? 23:11:46 ntim: Pitch for this is when you style from control it's as easy as styling div. 23:11:56 ...Very simple properties, everything else inherits by default 23:12:06 q+ 23:12:08 q+ 23:12:15 q? 23:12:21 ack giacomo-petri 23:12:32 q+ dbaron 23:12:53 florian_irc has joined #css 23:12:59 giacomo-petri: It's great. I have concern with placeholders for the color. Browsers provide min high-contrast area. If I can decide text color by default, contrast ratio might not be sufficient 23:13:11 ntim: Right now I use currentColor at 50% capacity but that might not be ideal default 23:13:15 CurtBellew has joined #css 23:13:27 gregwhitworth: Important part is you are getting the same styles without us doing computation heavy stuff 23:13:49 ...Complexity can grow quickly if e.g. you have background image 23:14:01 ...At least with this all browsers are now rendering the same stuff 23:14:11 ...Shouldn't be on UA to handle this 23:14:21 ntim: If there's a better default 23:14:26 ack aardrian 23:14:29 gregwhitworth: sure but that's can of worms 23:15:08 aardrian: I love what I'm seeing. Bring in a bunch of props using inherit. Would also bring in letter-spacing and word-spacing. Both those cases inherit. 23:15:14 ack estele 23:16:05 estelle: My concern is the contrast ratio. Considering a new value named mask. I'm also wondering about width. Did you make it display:block? 23:16:20 ntim: In my prototype I did but may not need to force it 23:16:22 JJ has joined #css 23:16:32 emilio: These are inline blocks by default 23:17:01 s/I did/I used `stretch`/ 23:17:05 estelle: If you put width would it listen to that or to appearance:base? 23:17:11 q- 23:17:16 emilio: We shouldn't change defaults 23:17:43 estelle: My concerns are not just the color contrast but if someone declares yellow or orange which has hard time meeting contrast ratio, if you put placeholder in there, what happens? 23:18:14 ...The placeholder is text but has to be different color because it's lighter. E.g. orange on blue and ratio is already below AA generally. 23:18:36 Di has joined #css 23:18:40 ...Those are concerns that if you inherit and you have placeholder text, need to ensure there's contrast so user can tell it's placeholder 23:18:58 ...Mask is new thing presented yesterday. An HTML attribute 23:19:09 emilio: Still very under construction 23:19:11 chrishtr: If added, need to take that into account in appearance:base mode? 23:19:14 estelle: Yes 23:19:34 gregwhitworth: Is this the end of your presenttation? 23:19:36 ntim: no 23:20:02 https://github.com/salesforce/standards-explainers/blob/master/indicator-psuedo/explainer.md 23:20:09 estelle has joined #css 23:20:12 xiaochengh has joined #css 23:20:20 Francis_Storr has joined #css 23:20:23 q? 23:20:32 another thing to consider: ::focus ring style 23:20:32 gregwhitworth: Was going to ask what Chris asked. I want to hold off on having strong opinions because you can just introduce UA stylesheet we can review. My questions are about, e.g. with checkboxes and stuff, how do you guys aim to approach this? Not straightforward to solve given all the use cases for checkboxes 23:20:46 ...Problems with details/summary, range, datetime, get really complicated 23:20:53 ack emilio 23:20:56 ack dbaron 23:21:18 dbaron: I wanted to point out one of the concerns with complexity of stylsheet and complexity of overriding is also the states. 23:21:26 q+ 23:21:32 ...E.g. button has hover style, focus style, combinations of these things 23:21:39 ...Does appearance:base have all that complexity? 23:21:48 ...When the author overrides, must they reproduce all that? 23:22:00 q+ our current ua css for placeholder is opacity: 0.54 - https://searchfox.org/mozilla-central/source/layout/style/res/forms.css#172 23:22:12 ...One of the issues there is if we limit stylesheet, then it's easy to override those styles 23:22:13 q+ to say our current ua css for placeholder is opacity: 0.54 - https://searchfox.org/mozilla-central/source/layout/style/res/forms.css#172 23:22:19 ...I think there are tradeoffs there 23:22:29 emilio: That's fine. It's the current state with appearance:none 23:22:33 gregwhitworth: We're overthinking this. 23:22:45 present+ 23:22:55 present+ 23:23:10 ...The whole purpose of this is everybody is doing block/flex/inline...I don't have a strong opionion, I just want to see unified UA stylesheet 23:23:19 q+ 23:23:25 ...and to review that 23:23:30 Agreeing with gregwhitworth that I want to see a massive UA stylesheet. 23:23:52 ntim: Re: dbaron's question, this is UA styesheets and those have lowest pri/specificity in cascade, so authors override anyway 23:24:12 dbaron: The point is partly that the moment you set anything on the control for ignoring states you've overwritten all state specific styling 23:24:25 gregwhitworth: The second you've opted into base you've said you don't like the native styles 23:24:43 dbaron: Goes back to list of 6 principles. Points out how that list conflicts with itself 23:24:51 q? 23:25:08 ntim: Re: states, we had that convo internally about styling disabled elements. As soon as author overrides, they forget to define :disabled. 23:25:22 ...So you define in UA stylesheet for :enabled 23:25:42 ...Once they have disabled one on screen, will see something's wrong 23:25:43 ack xiaochengh 23:26:03 xiaochengh: I'm wondering about the @@@ how much is going to style the internals of the form controls? 23:26:23 q? 23:26:30 ...Is this UA stylesheet also going to style internal pseudo elements or just the form controls? 23:26:40 q+ 23:26:44 ntim: Want to make sure styling on internal parts also applies to the principles. 23:27:16 xiaochengh: I feel like this is dilemma. Internal impl of form controls shouldn't be controlled by specs. By introducing this you force implementations to do it a certain way. 23:27:27 ntim: We also want to solve problem of inconsistent internals 23:27:32 ...Web devs also want to style internals 23:27:43 ... E.g. with input[type=range] they want to style those internal parts 23:28:00 dbaron: Lot of part of the plan here is that doing appearance: base is defining those internal pseudo elements 23:28:03 q- 23:28:03 ack zcorpan 23:28:04 zcorpan, you wanted to say our current ua css for placeholder is opacity: 0.54 - https://searchfox.org/mozilla-central/source/layout/style/res/forms.css#172 23:28:39 zcorpan: Placeholder uses opacity already in Gecko 23:28:47 q+ 23:28:52 emilio: Other browsers use hardcoded color 23:28:57 ...It's changeable 23:29:04 ack emilio 23:29:22 emilio: Don't know if you've considered -- if we use currentColor for all these, things like color schemes stop working 23:29:41 ntim: If you inherit color, normally the color from the scheme inherits too 23:30:02 emilio: If I want to make button dark, I say input color scheme dark, it works even if ancestor is light. With this approach it doesn't 23:30:19 chrishtr: So if you have div with currentColor and put color scheme it has no effect 23:30:22 emilio: Right 23:30:29 miriam: But you're opting into that 23:30:44 gregwhitworth: Point is you have a massive stylesheet we can all look at 23:30:57 chrishtr: If it's an issue you need some mechanism to fix 23:31:21 zcorpan: Common usage of color scheme is set on root. Then transparent still gives you a dark control. Wouldn't look different if you only set color scheme on input 23:31:24 emilio: Maybe it's fine 23:31:27 ack khush 23:31:51 khush: Implementation-wise how complicated do you expect set of pseudos to get? Tree-abiding or UA shadow DOM? 23:31:56 ntim: Chromium folks can speak to that 23:31:58 zcorpan: https://phabricator.services.mozilla.com/D223657 ;) 23:32:22 q+ 23:32:32 jarhar: Yeah, the select element for appearance base has a bunch of different elements. I'm tweaking it, some for appearance:auto and :base, exclude some for base to make it work 23:32:40 gregwhitworth: With new select there are new elements too 23:32:42 ack gregwhitworth 23:32:48 ...it's not just the pseudo elements 23:33:10 ntim: Next part of styling controls consistently is pseudo elements 23:33:44 ...Driving principle of designing pseudo element scheme is to cover reasonable use cases, consistency, inherit appearance from originating elements 23:34:03 ...Could do this by `appearance: inherit !important` 23:34:46 emilio: Depending on how we make this work, I agree we should aim for that. Appearance is not inherited property, if we make the psedudos such that they have elements in between it gets set to auto. 23:34:52 ntim: That's implementation detail 23:35:13 gregwhitworth: He's saying youi're calling it out as principle but maybe that's not always true 23:35:25 ntim: 23:35:42 ...Have consistent tree as soon as you use appearance:base 23:36:22 ... (for ``, or ``, `` 23:36:38 ...(shows tree for text-based input) 23:36:52 ...And there's more we are thinking about 23:37:01 ...Planning to take over form styling module level 1 doc 23:37:06 q+ 23:37:06 ...Hoping to make it an actual spec 23:37:13 astearns: Don't look at it now, we'll start fresh 23:37:19 ntim: Last part is about styling pickers 23:37:29 ...Like w/ customizable select 23:37:40 ...Pickers are the part of the control that pops out of the page 23:37:58 ...For this want to introduce `::picker()` pseudo with an element 23:38:15 ...Devs can check support. Once all supported, we'll add non-functional version 23:38:34 ...to opt-in for customization of select picker, add `::picker(select) { appearance:base}` 23:38:39 q+ 23:38:43 ...This makes it no longer exceed window bounds to prevent spoofing 23:39:04 karlcow has joined #css 23:39:06 ...For particular platforms like Apple Watch, UA might force picker to use native picker but that's up for discussion 23:39:15 ...As for status, we're waiting on approval to publish spec 23:39:29 q? 23:39:33 ...There's already spec work for appearance:base in CSSWG and we' re prototyping 23:40:05 gregwhitworth: I'm not necessarily opposed. Have seen use cases I've seen that pseudos don't cover. 23:40:23 ...We initially reached for psedudos because we were concerned about fricition, but people wanted new elements. 23:40:32 ...In new select there are two 23:40:49 q? 23:40:50 ...The thumbs, tracks, those shouln't be pseudos. But I'll wait for the stylesheet. 23:41:13 s/stylesheet/spec 23:41:18 ...I feel there's a lot going on that can't be covered by pseudos. But the value they bring is you end up with a spectrum of capabilities. 23:41:30 ...May not want to extend control, just adjust styles. That's the value of pseudos 23:41:37 ...But need to deal with that collision 23:42:08 ntim: Pseudos need to cover reasonable use cases. For more complex, might need HTML change to introduce new control 23:42:08 q? 23:42:09 ack gregwhitworth 23:42:12 ack emilio 23:42:34 emilio: I see args for both but if you don't plan to support picker on given platform, could just fail to parse the selector 23:42:40 ...Allows the dev to detect it 23:42:42 q+ 23:42:47 ntim: That's probably a better solution 23:43:00 gregwhitworth: I don't like the UA saying we don't care what you said 23:43:10 ntim: We'll do that regardless, at least this way you can detect it 23:43:16 ack xiaochengh 23:43:35 xiaochengh: Are we taking the openui approach of specifying anatomy of every form control? 23:43:45 ntim: What I've worked on is specifying tree for all form controls 23:43:59 astearns: Yes to form controls, maybe not for non form controls 23:44:41 astearns: This presentation, send it zipped to wwarchive. 23:45:01 janina1 has joined #css 23:45:02 q+ 23:45:07 ntim: Would love your feedback. Pain points I didn't address that I should? 23:45:07 q- 23:45:36 khush: Specifying the structure and the pseudos, that's only with appearance:base? Or also with appearance:auto? 23:45:46 ...When are we guaranteeing you get this structure 23:45:59 ntim: Prefer not to with appearance:auto. Not mixing native and non-native UI. 23:46:03 q+ 23:46:15 ...For appearance:none that would be nice but not sure we can because of compat 23:46:31 khush: So we'll have different stucture based on appearance? 23:46:35 emilio: We should aim to unify 23:46:50 ntim: I agree we should unify as much as possible 23:47:03 zcorpan: The compat prevents us from using appearance:none 23:47:08 emilio: Ideally we woulnd't have base 23:47:21 khush: The fact that CSS changes the tree... 23:47:30 q- 23:47:44 emilio: It's subtle. How I'd implement it is that you don't make it change tree, but change the layout tree by hiding/unhiding elements 23:48:02 emilio: HTML attribute would be saner 23:48:10 gregwhitworth: CSSWG told us not to do that, to use appearance 23:48:34 ntim: UAs could set display to hide/unhide based on `appearance` 23:48:44 khush: So it has to be change in structure 23:48:51 emilio: Not necessarily 23:49:08 dbaron: How much change depends on what you're doing. With select there's more changes required in the DOM to account the work happening here 23:49:22 ...Some of the stuff is enabled depending on what youi're doing so you can get hybrid cases 23:49:33 ...Aren't there different condiditions for when you enable the new stuff? 23:50:01 gregwhitworth: I think it's all conditioned on `base` now 23:50:02 chrishtr: And `::picker` 23:50:10 gregwhitworth: Great work ntim 23:50:25 RRSAgent: make minutes 23:50:27 I have made the request to generate https://www.w3.org/2024/09/25-css-minutes.html zcorpan 23:51:07 gsnedders has joined #css 23:57:53 nigel has joined #css