00:02:22 I am dialling in 00:03:23 murakami has joined #css 00:03:42 github-bot has joined #css 00:03:44 Florian has joined #css 00:12:37 astearns: is there also a webex link to connect directly (webrtc)? we are starting 9:15? 00:14:40 ChrisL has joined #css 00:16:28 Conference is not started yet 00:16:42 That is why, you only get noise from the room 00:19:54 trackbot, start meeting 00:19:57 RRSAgent, make logs public 00:19:57 Zakim has joined #css 00:19:58 Zakim, this will be Style_CSS FP 00:19:58 ok, trackbot 00:19:59 Meeting: Cascading Style Sheets (CSS) Working Group Teleconference 00:19:59 Date: 21 April 2017 00:20:07 myles has joined #css 00:20:07 present+ 00:20:08 present+ 00:20:09 present+ 00:20:10 present+ 00:20:14 tantek has joined #css 00:20:15 present+ 00:20:16 present+ 00:20:17 present+ 00:20:18 present+ 00:20:18 present+ 00:20:19 ScribeNick: Myles 00:20:19 present+ 00:20:20 present+ Surma, Google 00:20:21 present+ 00:20:23 present+ 00:20:28 present+ 00:20:33 present+ 00:20:36 present+ 00:20:36 present+ 00:20:38 Present+ 00:20:40 present+ 00:20:42 Topic: URL Discussion 00:20:44 present+ 00:20:46 present+ 00:20:57 Topic: Update on URL function discussions 00:21:17 plinss: url() - do they resolve to images or elements? 00:21:25 plinss: we had 4 options 00:21:43 https://dbaron.org/css/test/2017/mask-url 00:22:00 plinss: David looks into what Firefox does. But our resolution is contrary to that. We want to revisit to allow Firefox 00:22:23 dbaron: Firefox treats mask image with a URL. If it has a hash, we will look for a ref in it, whether its local or remote 00:22:29 dino has joined #css 00:22:29 present+ 00:23:02 dbaron: so, there are some cases where we will try to load it twice. If there is no hash, we don't attempt to look for a mask element, and load it as an image. If it's purely a local ref, we don't' attempt to load it as an image - we will only find a mask URL. But if it has a hash in the middle, we'll load it both ways. 00:23:10 fantasai: This is an optimization of loading twice in general 00:23:26 fantasai: a local reference is not going to be an image 00:23:29 dino: why not? 00:23:39 dino: it could be an SVG image, or a SVG root, or a canvas 00:23:45 dbaron: we dont' want infinite recursion 00:23:59 TabAtkins: pointing to canvases isn't allowed at all anywhere 00:24:08 dino: Someone might do it 00:24:27 dino: We could point as an image element in the document and using it as a mask 00:24:30 leaverou: that's not allowed 00:24:35 ChrisL: this is imaginary 00:24:53 dbaron: the mask property used to point to a mask element but we extended it to point to image 00:25:17 dbaron: when we do this, we ignore the other masking properties like mask-repeat, etc. 00:25:23 ChrisL: this is according to the spec, rights? 00:25:31 dbaron: i think so 00:25:44 leaverou: So, it's possible to have the Firefox implementation from the spec? 00:25:57 leaverou: We all agree that this is the most reasonable choice 00:26:07 Rossen: Can someone summarize what is going on? 00:26:23 plinss: You should know what's going on 00:26:44 leaverou: Hey tab, please type in the options again 00:27:00 https://log.csswg.org/irc.w3.org/css/2017-04-19/#e796988 00:27:23 1. Treat ambiguous cases as url reference into an SVG document, not treat as image and apply :target 00:27:28 2. Treat ambiguous cases as url, if it has a fragID treat as a reference, otherwise treat as an image 00:27:34 3. Treat ambiguous cases, load it twice -- first see if there's an appropriate reference, otherwise go back and reload as an image 00:27:39 4. Do something different per property 00:27:40 leaverou: ❤️ 00:27:53 dino: what does "ambiguous" mean? 00:28:08 plinss: if the property can handle both an element and an image, and the URL could be either 00:28:40 plinss: can we resolve to make this decision on whether it's a local or external URL? 00:29:03 myles: Firefox does 3, right? 00:29:17 leaverou: Basically. With some extra optimizations 00:29:33 plinss: Architecture says that you can only interpret what a fragment means until you get a content-type from the response 00:29:53 dbaron: The case where Firefox doesn't do the right thing is when there is a base URL and a url(#foo) 00:30:02 dbaron: This is probably not the only case where this occurs 00:30:21 dbaron: like scrolls within the current document 00:30:37 TabAtkins: CSS always treats a #url as a reference into the local document 00:30:47 plinss: That is a separate issue and an architectural violation 00:31:28 plinss: At the end of the day, I'm okay with browsers not handling everything exactly b/c of optimizations. What I'm not okay with is the spec stating you must violate architectural principles and Gecko must stop doing what it's doing 00:31:46 Rossen: Other thoughts? 00:32:10 Rossen: Proposed resolution: a mixture of #2 and #3 00:32:43 fantasai: By choosing to follow Moz behavior, you are deciding tha ta local reference will always be an element reference and not an image reference. Which is fine, but we should be explicit. 00:32:54 fantasai: We always have our image() and element() functions which can make the distinction 00:32:58 ChrisL: so you're not losing anything 00:33:09 TabAtkins: We know the content type of the current resource, so we can interpret the hash correctly 00:33:35 TabAtkins: I need confirmation from our loading people that this is implementable 00:33:41 TabAtkins: we will try 00:34:00 plinss: I'm okay with "should" or "must (but we know you won't)" 00:34:07 Rossen: "should" please. 00:34:20 Rossen: Proposed resolution: Option #3 with "should" 00:34:23 fremy has joined #css 00:34:31 TabAtkins: 👍 00:34:47 TabAtkins: (summarizes proposed resolution) 00:35:18 RESOLVED: Should treat ambiguous cases, load it twice -- first see if there's an appropriate reference, otherwise go back and reload as an image 00:35:21 RESOLVED: Implementations should treat 1ambiguous cases, load it twice -- first see if there's an appropriate reference, otherwise go back and reload as an image 00:35:52 Github issue: https://github.com/w3c/csswg-drafts/issues/383 00:36:13 RESOLVED: For ambiguous cases, UAs SHOULD first see if there's an appropriate reference, otherwise go back and reload as an image 00:36:33 Thanks leaverou 00:36:42 Rossen: RESOLVED: Let's stop resolving 00:36:58 Topic: split sessions 00:37:33 Florian: We found a number of places where we wanted to tweak the page floats spec 00:37:48 Florian: But then we spoke more, and alternatively to tweaks, we could do deeper changes, and that might be better 00:37:59 Florian: So we need a long deep session about page floats. 00:38:06 Florian: Otherwise, we should just take it off the agenda. 00:38:17 Rossen: What about rhythm? 00:38:39 Rossen: We need to break out. 00:39:30 TOPIC: Images 00:40:43 00:43:12 00:44:20 00:44:49 More like USB-C = beta-testing 00:45:20 00:45:28 https://drafts.csswg.org/issues?spec=css-images&doc=cr-2012 00:45:44 TOPIC: Images 3 Issues 00:45:50 1. Deprecating image orientation 00:46:38 leaverou: This isnt' about deprecating it. Someone said that angles in image-orientation are pointless. You'll never want to the same adjustment to all your images. So this is to fix the orientation of images which were taken eh wrong way. Proposal: drop all values except from-image 00:46:46 leaverou: and none 00:46:50 leaverou: which is now called 0deg 00:47:01 Is there a break out session on page floats and rythm or not, ultimately? If so; where is it minuted? 00:47:04 leaverou: the point is that the angles are pointless 00:47:05 that seems reasonable 00:47:13 leaverou: we agree but we need a resolution since it's in CR. Any objections? 00:47:28 fantasai: I'm okay with deprecating or obsoleting, but we need to keep them in the spec 00:47:39 fantasai: We have references coming into this from other non-W3C places 00:47:48 Florian: which ones? 00:47:53 fantasai: Printers. 00:47:58 I've been in favor of just from-image | none since "forever"... 00:48:10 fantasai: They have some idea of HTML & CSS because of their printers. 00:48:17 ChrisL: This is the XHTML print stuff 00:48:27 fantasai: These printers rely on this stuff 00:48:32 leaverou: angles? 00:48:34 fantasai: yes 00:48:39 wait was there a test case for angles? 00:48:46 fantasai: I don't know the details. I worked on testing this and it's used. 00:49:07 ok with "obsolete" 00:49:09 fantasai: From our perspective, browsers don't need to implement it. But it can't be removed. We can just say it's obsolete and not to implement it 00:49:12 TabAtkins: sounds good 00:49:22 https://www.w3.org/TR/xhtml-print/ 00:49:26 leaverou: resolution????? 00:49:36 dbaron: There needs to be a second piece which is to add "none" 00:49:40 dbaron: value 00:49:51 TabAtkins: Unless we want to say that it accepts an angle but only 0 00:49:57 four implementations in the implementation report https://www.w3.org/MarkUp/Test/xhtml-print/implementation/ 00:50:01 sounds good 00:50:06 RESOLVED: Deprecate in image-orientation and add a 'none' value 00:50:36 RESOLVED: Deprecate in image-orientation and add a 'none' value 00:50:53 leaverou: Interpolating percentages in cross-fade 00:51:10 leaverou: spec says if you do it that only differ by their percentage, then you just interpolate their percentage 00:51:54 The other cross-fade, the two arguments are not identical, so this would trigger the default generic interpolation 00:52:15 TabAtkins: theoretically you could detect this condition and fix it in the browser 00:52:21 leaverou: but there is arbitrary complexity here 00:52:54 TabAtkins: we could 1) resolve the current text is right, or 2) a more generic version where we interpolate the two argument images as well as the percentages 00:53:06 dino: this is 1 level or 2 levels but not n levels 00:53:32 TabAtkins: we interpolate the percentages, and the two first arguments and the second arguments, and it cascades down forever 00:53:45 dino: in the example, if instead of the first case said 1.png and the second case said 3.png 00:53:53 TabAtkins: then you would do a generic interpolation 00:54:03 dino: i don't mind what it is. Definitely 1 level is easier 00:54:05 TabAtkins: yes 00:54:17 TabAtkins: the "interpolate further down" case is more interesting but is more complicated. 00:54:23 TabAtkins: i can go either way 00:54:32 dino: how often will authors write nested cross fades 00:54:36 leaverou: it could come from variables. 00:54:43 leaverou: it's easy to get this with variables 00:54:54 dino: yes. This means that the variable itself might be animating, so you might be animating between two animations 00:54:58 Animations all the way down! 00:55:15 fantasai: we have other image functions in mind for the future, so introspection in general will be more useful for these future things. 00:55:29 fantasai: i have a variety of different ideas for extending this that it would be useful for 00:55:35 s/i/we/ 00:55:42 leaverou: introspection definitely yields the results the author wants, but it may be too hard to implement 00:56:07 fantasai: it depends on your internal representation. If it's simple, then matching it is easy. 00:56:24 dbaron: You could define the interpolation rules recursively 00:56:27 TabAtkins: that's the second options 00:56:49 TabAtkins: we interpolate the percentage, the first arg and the second arg separately 00:57:32 Leaverou: If you have a filter function and. You interpolate between a.png and a blur filter on a.png, you can interpolate between those. 00:57:51 TabAtkins: You could recursively interpolate between the two linear gradients in the first argument 00:58:26 TabAtkins: We need to decide which option. All in, or in 1. 00:58:35 dino: "all in" may require checking of many image types. 00:58:44 dino: the arguments may be interpolatable, other than a cross-fade. 00:58:49 TabAtkins: leaverou: yes. 00:58:59 dino: Do we already have a list of images you can interpolate between? 00:59:03 TabAtkins: leaverou yes 00:59:12 dino: implementation-wise, one level is easier, but meh 00:59:22 leaverou: Is there any implementations which have done it the other way so we can test it? 00:59:34 dino: we have a lot of bugs in cross-fade interpolation 00:59:38 dino: just random bugs 00:59:54 fantasai: we should do recursive, and if there are no implementations, we just mark it as undefined in level 4 01:00:14 fantasai: i mean, if we end up without implementations, then we push it out to level 4 and in level 3 say that it's undefined. 01:00:21 astearns: so we mark it at-risk immediately? 01:00:24 fantasai: yes 01:00:46 Florian: "at risk" means "for being pushed out" not for "being removed" 01:01:01 leaverou: If implementations care about it working by a cross fade and not other rules, then authors will depend on it. 01:01:05 fantasai: that's why we want recursion now 01:01:09 dbaron: how do they actually differ? 01:01:50 TabAtkins: in the example above, 1st argument stays as it is. Let's say the second argument is a linear gradient from black to wihite, and the next one is a gradient from black to white 50%, then it makes a difference 01:01:52 dbaron: okay 01:02:21 dino: The generic case means adding a cross-fade 01:02:34 dbaron: this example is confusing 01:02:42 dbaron: and uninteresting 01:02:50 binge has joined #css 01:02:55 leaverou: let's start with recursive and change it if there are no implementations 01:02:57 Rossen: ok 01:03:01 Rossen: any objections? 01:03:07 leaverou: it will be at risk 01:03:09 Rossen: yes 01:03:24 leaverou: cross fade is the only piece which isn't at risk 01:03:37 s/"at risk" means "for being pushed out" not for "being removed"/make it clear that it's "at risk of being undefined" not "at risk of being removed" (and therefore defined to do the opposite)/ 01:03:41 Dino: tabatkins: Chrome and WebKit implement image interpolation with cross fade 01:03:48 Rossen: no objections 01:03:50 (pre-fork, so one implementation) 01:04:10 RESOLVED: Do interpolations recursively on each argument, but mark it at risk 01:04:30 3! 01:04:38 leaverou: we have special rules for interpolation in gradients. 01:04:49 leaverou: 01:04:57 leaverou: do these rules apply to the color stops before or after fixup? 01:05:26 leaverou: you could have a gradient today that is white to black and a value of 0 gets fixed up to 20% 01:05:39 leaverou: color stops with no position get positioned between the adjacent ones 01:05:52 leaverou: color stops become equal to the previous one in some cases 01:06:03 leaverou: layout needs to happen because you need to compute some lengths to do the fixup 01:06:22 leaverou: so it's optimal to do interpolation to do on the fixed up positions, but it may be impossible b/c of layout 01:06:36 TabAtkins: 01:07:22 TabAtkins: if it's pre-fixup, then during the transition, the animation is not smooth 01:07:32 Post-fixup gives a more correct solution 01:07:59 TabAtkins: when you're making stripes, it's common to just put 0 as the position, because it forces it to be at the previous color stop's ending point. So fixing up is common. 01:08:09 TabAtkins: if we stick with pre-fixup, we break this content 01:08:18 fantasai: I'm not convinced that post-fixup is better 01:08:43 TabAtkins: but i just talked about the the 0 common technique (above) 01:09:03 leaverou: in the past, we needed layout. Today, we can use min() or max() 01:09:11 fantasai: min() doesn't exist today w/r/t images 01:09:28 dbaron: does "fixup" only mean positions of color stops, or elimination of redundant color stops 01:09:34 TabAtkins: elimination doesn't happen. This is well-defined 01:09:39 dbaron: that makes it easier 01:10:04 leaverou: many people use redundant color stops to force gradient interpolation instead of generic image interpolation 01:10:09 fantasai: they need it as a placeholder. 01:10:37 TabAtkins: dbaron, why do you think it's easier? 01:11:01 dbaron: there is extra complexity if you want to ignore the color stops. You need to know exactly which ones to ignore. But if the algo says to never ignore, then it's okay. 01:11:06 TabAtkins: yep. 01:11:10 w/r/t images -> as far as css-images-3 is concerned 01:11:22 TabAtkins: Both options are difficult 01:11:30 TabAtkins: We can represent the intermediate steps w/o layout by using max() 01:11:38 fantasai: we don't have that 01:11:41 leaverou: we will 01:11:41 Florian has joined #css 01:11:46 fantasai: there are 0 implementations. 01:11:52 fantasai: we can't rely on that here 01:12:07 fantasai: you can say "don't do any gradient color implemtnations until you implement min()" but that's a bad dependency 01:12:10 TabAtkins: or it may just be wrong 01:12:22 TabAtkins: you could just use calc() for the stops instead 01:12:42 fantasai: the goal is to get the spec to rec. min() won't be able to achieve this. So it's a bad dependency 01:12:52 TabAtkins: We should never do the bad thing because of process 01:13:07 fantasai: The existing behavior in the meantime is valuable 01:13:25 fantasai: Is it going to be okay to change the behavior of this property when browsers finally implement max() 01:13:27 ? 01:13:30 TabAtkins: nope 01:13:35 TabAtkins: but it shouldn't delay iot. 01:13:59 ChrisL: It's not process, it's that there are no implementations 01:14:06 TabAtkins: it doesn't matter when it gets implemented 01:14:06 Can someone test this in Edge 15? http://dabblet.com/gist/24224c83758444bf3be8b05fd7069a84 01:14:23 Florian: we can always change it, but it depends on the compat at that point 01:14:36 leaverou: if we say that interpolation happens pre-fixup, we will break things 01:14:45 fantasai: but we don't have a choice because there is no implemetnation of max() 01:14:50 leaverou: we should wait longer and get it right 01:15:01 fantasai: what will we do in teh meantime? 01:15:04 leaverou: we already waited 6 years 01:15:16 fantasai: what will the implementation do in the meantime until it implements max() 01:15:22 TabAtkins: it will be buggy 01:15:33 leaverou: this isn't the first tiem we've done this 01:16:24 fantasai: I want it to be deined what you do if you don't implement max() 01:16:42 TabAtkins: i don't want to have to cafrefully controll when we make a change to the spec based on when people implement min() and max() 01:16:49 fantasai: we need a definition for both cases 01:16:52 TabAtkins: soundsg ood 01:17:03 Florian: isn't it better that the intermediate behavior is buggy 01:17:08 TabAtkins: it doesn't matter 01:17:21 leaverou: why doesn't my example work in Edge???? 01:17:28 Rossen: i dunno 01:18:04 Rossen: fantasai: what resolution do you want? 01:18:14 fantasai: i dunno. I'm not convinced of what we're trying to do 01:18:24 leaverou: we could make max() required to implement this 01:18:38 fantasai: i'm not convinced that the theoretical best (if max() exists) is this behavior? 01:18:43 s/?/./ 01:19:02 leaverou: quick guess is that it uses explicit in one and implicit in other 01:19:23 fantasai: if we had color stops relative to the position of the previous color stop, we could do it 01:19:54 @leaverou: that one works: https://wptest.center/#/i4sli8 01:19:59 ChrisL: this would actually work with what authors want. When authors say "0" they actually are just using a placeholder. We could give them a keyhword 01:20:05 leaverou: Why would an author use a keyword? 01:20:26 leaverou: we could do the interpolation on teh declared list of color stops, but there is more existing content which it wouldn't work with 01:20:59 fantasai: walks across a curtain, or something???? 01:21:21 fantasai: Depending on what your goals are as an author, you might have different goals as an author 01:21:29 fantasai: both behaviors are valuable 01:21:49 s/valuable/reasonable/ 01:21:51 surma: most use cases will want to animate from whereve it is on screen 01:22:11 surma: rather than where it ought to be 01:22:36 leaverou: peopel can use whatever units they wnat in their color stops, and not worry about ordering. But now peopel will have to think about this stuff just to get the proper interpolation (and use min() or max()) 01:22:57 leaverou: content may do what UAs should be doing, themselves 01:23:04 leaverou: like a polyfill 01:24:11 leaverou: can we say that UAs that implement max() should do it according to these rules, but other ones should be abrupt? (So authors can fix it in the future) 01:24:23 TabAtkins: We can cut it down to things which would require layout (which is just percentages) 01:24:29 fantasai: percentages are common. 01:24:47 TabAtkins: if you're all percentages, you're fine. If youre none percentages, you're fine. THe only bad case is if you mix 01:25:14 leaverou: If you fall back to generic interpolation, which is cross fade, people will rely on it, because cross-fade looks nice. If its abrupt, people won't rely on it 01:25:18 fantasai: they could 01:25:28 leaverou: That's what happens now, so if you're right we shouldn't do this at all 01:25:43 fantasai: yeah but the point of the cross fade could be random, then they for real can't rely on it 01:26:04 Rossen: can we resolve? 01:26:20 Karen has joined #css 01:26:21 s/yeah but the point of the cross fade/then your cross fade vs abrupt transition/ 01:26:54 TabAtkins: Proposed resolution: In the one case where you need layout-time information to do fixup, if you don't implement max(), you must do an abrupt interpolation 01:27:00 leaverou: that works 01:27:06 Rossen: any objections? 01:27:09 TabAtkins: case is if you mix percentage and non-percentage stops 01:27:11 RESOLVED: In the one case where you need layout-time information to do fixup, if you don't implement max(), you must do an abrupt interpolation 01:27:50 leaverou: Backportin gradient midpoints to L3 because we have 3 ipmlementations 01:28:58 Ric implemented all the implementations so they are not independent so it doesn't qualify 01:29:36 s/Ric/Rik/ 01:29:57 Florian: independent implementations require independent authors 01:30:22 ChrisL: we have 3 impl., so edge will be pressured to do it. So edge will do it independently 01:30:51 Rossen: this will just hold up the level 3 spec for longer, to wait for another impl 01:31:03 fantasai: we don't know how to test gradeitns so we dont' have tests 01:31:11 Florian: we have some but not many 01:31:20 Florian: Opera has tests for gradients 01:31:47 Florian: they work by using a software implementation of canvas 01:32:17 ChrisL: Making a reftest for this is hard, becuse has to be pixel perfect 01:32:27 myles: +1 01:32:28 ChrisL: Can do a visual test, where a person says "yeah, that looks about the same" 01:32:41 Rossen: back on topic please 01:32:57 s/software implementation of canvas/software implementation in canvas/ 01:32:58 TabAtkins: we should reject b/c not independent 01:33:13 RESOLVED: Reject this proposal 01:33:49 TOPIC: Premultiplication in gradients 01:35:02 Fantasai: "transparent" keyword should compute to 2 color stops: one of the previous hue of the previous color, and the hue of the next color. 01:35:14 fantasai: currently transparent is just transparent black 01:35:33 s/Fantasai:/fantasai: Issue was saying/ 01:35:51 leaverou: instead of using premultiplied, we should special-case "transparent" since every case which needs this is due to transitions to or from transparent 01:36:05 leaverou: when you don't use transparent, you dont' want to lose the color information in your color 01:36:30 leaverou: there are gradients which are impossible to do in a premultipled RGBA space 01:36:37 TabAtkins: you are wrong. You can use dummy stops 01:36:56 TabAtkins: we do it in non-premultiplied, but we use dummy stops to emulate premultiplied 01:37:00 TabAtkins: b/c of Skia 01:37:35 TabAtkins: Problems! A) Transparent is equivalent to RGBA(0, 0, 0, 0) which disappears by computed value time. This changes that to make it special, whcih retains its identity 01:37:44 leaverou: or we special case RGBA(0, 0, 0, 0) 01:37:55 TabAtkins: this is worse beceause of rounding. Rounding could trigger this erroneously 01:38:31 ChrisL: this is an author convienience because people want ot go to and from transparent. We lumped together color and opacity together, which is unwise, and makes this hard 01:39:13 astearns: does special casing transparent as 2 stops makes transitions break becauuse the numberr of stops changes 01:39:22 ChrisL: so you would have to fix this up behind the scenes liek youd o now 01:39:32 TabAtkins: our internal data model retains the knowledge of the input number of stops 01:39:40 ChrisL: so yes, the implementation fakes the extra stops 01:40:03 TabAtkins: No, because you either have to keep transparent around longenough as independent value, to fake at paint time 01:40:15 TabAtkins: this requires a chagne to transparent across all colros which isn't good 01:40:21 leaverou: this also applies to transitions and gradients 01:40:27 TabAtkins: and the color: property 01:40:36 TabAtkins: because of serialization 01:40:57 TabAtkins: author code may depend on this (b/c they assume 4 tuples) would break 01:41:04 Florian: will this be fixed later when we switch the working color space? 01:41:13 ChrisL: the working colro space is independent of premultiplication 01:41:27 Rossen: proposed resolution: don't do this 01:41:34 Rossen: objections/ 01:41:34 ? 01:41:49 RESOLVED: Reject the proposal 01:42:18 skk has joined #css 01:59:07 rachelandrew has joined #css 01:59:29 Karen has joined #css 02:00:57 so we'll have the page floats breakout minutes on #houdini 02:07:14 ScribeNick: fantasai 02:07:20 Topic: CSS-SVG Box Correspondences 02:07:37 ScribeNick: flackr 02:07:48 tantek has joined #css 02:07:52 present+ 02:07:54 myles has joined #css 02:08:37 fantasai: issue is to have a standardized mapping between dash box keywords, bunch of properties take these kinds of keywords 02:09:06 present+ 02:09:27 s/dash box/*-box/ 02:09:52 Rossen: yesterday we partially covered issue, and agreed on mapping. content-box and padding-box map to fill-box. border-box maps to stroke-box 02:09:55 myles has joined #css 02:10:12 fantasai: we need something to go back in other direction 02:10:15 Rossen: for view-box? 02:10:44 TabAtkins: it's a box, but we don't have anything that let's you refer to it 02:10:47 murakami has joined #css 02:11:02 It seems we have three github issues on this: https://github.com/w3c/fxtf-drafts/issues/66 https://github.com/w3c/csswg-drafts/issues/999 https://github.com/w3c/csswg-drafts/issues/857 02:11:03 TabAtkins: we can map view-box to one of the element based boxes 02:11:33 Github issue: https://github.com/w3c/csswg-drafts/issues/857 02:11:40 fantasai: in fill and stroke module css ends up having all of these boxes, 02:11:47 Kitahara has joined #css 02:11:54 fantasai: are there places in other specs where we take these boxes? 02:12:35 TabAtkins: no, we only have these in fill and stroke because they talk about text, with geometry different than normal boxes 02:13:10 fantasai: fill-origin property, which takes these keywords can be set on any element. it's not applied to text, applied to an element and takes that object's geometry for settting the fill origin for images 02:13:35 fantasai: if we don't have transform-box or other box properties use that same definition, then if you set coordinates in transforms and set the same in fill or stroke, you would get different results 02:14:08 fantasai: we didn't run into a use case while working on transforms that we needed these text based bounding box concepts, but we should use this same concept in all of our boxes whereever fill or stroke appears 02:14:43 fantasai: for example for setting a mask image with the same origin when set to fill-box as a fill with origin set to fill-box 02:14:58 TabAtkins: possible 02:15:12 jensimmons has joined #css 02:15:14 TabAtkins: problem is that mask, transform, and shapes 02:15:19 fantasai: shape doesn't have fill and stroke 02:15:36 reading https://github.com/w3c/csswg-drafts/issues/999#issuecomment-277024658 02:16:36 dbaron: the notion that some of the properties are doign different things does make some sense because they can't reasonably map into the same property 02:17:12 fantasai: didn't discover we needed fill and stroke box until we did this module 02:17:23 s/this/fill-stroke/ 02:18:00 https://drafts.fxtf.org/fill-stroke/ 02:18:23 s/until/in CSS until/ 02:19:02 fantasai: view-box is on transform-box property? 02:19:14 TabAtkins: just on transform-box 02:19:38 ChrisL: the view-box declared on the closest svg element 02:19:45 Rossen: kind of like initial box of the svg 02:20:08 TabAtkins: I don't agree in general we should match fill-box and stroke-box to same meaning 02:20:26 TabAtkins: because these properties are dealing with text and these properties are talking about properly filling and stroking that text 02:20:46 TabAtkins: whereas for svg they are in a different context, it depends on the property you are interpreting for 02:22:36 fantasai: if you have element with some text, and the fill box is bigger, then when you draw an image and add a mask, these need to use the same coordinate system 02:22:45 fantasai: but if you're saying fill-box is not available for mask origin can't make these line up 02:23:16 TabAtkins: it's still a matter of which concept you're talking about, the box's geometry or the geometry of the text 02:23:28 fantasai: it should create the same coordinate system that it does if you set fill-origin on that element 02:23:48 Rossen: in css boxes internally, this is going to be an overflow box 02:24:04 fantasai: it's text only 02:24:22 fantasai: it's the outline of the glyphs, so not quite the inline text box 02:24:43 fantasai: i think we need consistent coordinate systems, fill-origin and mask-origin should have the same behavior for the same keywords 02:25:00 fantasai: if those have same behavior for same keywords, transform-box should too 02:25:25 TabAtkins: yeah, but other properties such as mask-origin, when using svg keyword on css stuff will have a changed meaning 02:25:29 fantasai: hopefully people aren't doing that 02:25:43 ChrisL: how much of a breaking change is this? 02:25:51 TabAtkins: might be minor, might be major, depends on content 02:26:12 fantasai: initial value might need to be some kind of auto keyword that depends on whether it's svg or css 02:26:19 ChrisL: i'd rather avoid making breaking changes unless we have to 02:26:31 fantasai: or a UA stylesheet thing 02:26:55 TabAtkins: initial value of border-box for svg is view-box 02:27:15 TabAtkins: transforms and svgs default to the top-left corner 02:27:36 TabAtkins: i guess i'm okay with this 02:27:47 TabAtkins: with fill-box used in css meaning what's defined in fill and stroke 02:28:24 Rossen: we don't care about view-box? 02:28:32 fantasai: this is another issue i think 02:28:50 ChrisL_ has joined #css 02:29:38 TabAtkins: think we added auto keyword 02:29:44 [confusion about what the resolutions actually were] 02:30:13 fantasai: if I specify transform-box: border-box on svg element what do i get? 02:30:49 fantasai: If i specify transform-box: view-box on a CSS box what do i get? 02:31:00 TabAtkins: maps down to border-box, it's the closest you can get 02:31:07 fantasai: what's the initial value? 02:31:18 TabAtkins: something different, forget what specifically 02:31:19 (answer to the previous question was border-box -> stroke-box on SVG) 02:31:47 fantasai: make initial value view-box to get behavior we want it to have 02:31:56 ChrisL: that seems fine 02:32:17 Resolutions from yesterday, presumably were 02:32:26 * border-box in SVG is treated as stroke-box 02:32:35 * view-box is in CSS is treated as border-box 02:32:40 * initial value is view-box 02:33:09 From today: fill-box and stroke-box for CSS are as defined in fill-stroke 02:33:59 for completeness, content-box and padding-box in SVG are treated as fill-box 02:34:47 Rossen: view-box and stroke-box resolve to the same as boxes defined in svg fill-stroke 02:35:18 RESOLVED Initial value of transform is view-box 02:35:27 RESOLVED: Initial value of transform is view-box 02:35:34 RESOLVED: view-box and stroke-bo resolve to the same as boxes defined in fill-stroke module 02:35:46 s/stroke-bo/stroke-box/ 02:36:10 Topic: Color properties 02:36:43 Karen has joined #css 02:37:06 Github Topic: https://github.com/w3c/csswg-drafts/issues/300 02:37:30 dino: idea is that document will have working color space, some kind of css syntax to say what it is, default is srgb 02:37:59 dino: there was some discussion as to what does the value if you specify background-color: rgb(255, 0, 0) what space are they in? 02:38:10 ChrisL_: this is in sRGB 02:38:44 dino: this didn't matter because everything was in sRGB. we think older style colors should be in working color space 02:39:01 ChrisL_: downside is if you view source and copy some of their style and document the colors become different 02:39:22 ChrisL_: also, one reason to change working color space is because you've got some bit of content you want in a different color space, like a video 02:39:41 ChrisL_: you don't want your existing colors to change because you have a new element needing a wider gamut 02:39:53 dino: adding the new element doesn't necessarily change colors 02:40:04 ChrisL_: if you then want to have a gradient you need to change working color space 02:40:18 dino: i propose we change default working color space away from srgb but to be the same as it 02:40:32 s/the same as it/extended sRGB/ 02:40:49 myles has joined #css 02:41:14 ChrisL_: in SRGB you've got 0-255 and we used to say you could theoretically go below 0 or above 255 but it was undefined what the transfer code was 02:41:41 ChrisL_: there was defined a transfer space called ?? which was a linear mapping which was tried in HTML context for a while but it didn't work well 02:41:55 s/??/scRGB/ 02:42:04 ChrisL_: you need a wider gamut. going for an older model which isn't compatible with color management systems isn't going to work well 02:43:51 dino: concern that ChrisL_ is bringing up is that you would end up with a band as you clamped at the edge of your color space 02:44:36 ChrisL_: what is complete gamut range? 02:44:38 dino: goes on forever 02:45:06 dino: it covers at least P3 02:45:45 dino: and should cover ?? (2020?) 02:46:37 dino: should we distinguish between linear, SRGB, etc 02:46:45 dino: we don't have any way to handle blending in linear space yet 02:47:00 dino: designers don't understand what it is, are very used to non-linear blending 02:47:20 s/??(2020?)/rec2020 02:47:47 q? 02:47:58 ChrisL_: once we're finished with this easy stuff we need to get linear for when we get onto HDR 02:48:14 dino: definitely do not want to block out linear, we could definitely add it now 02:48:27 ChrisL_: i'd like to see more details about your proposal 02:48:56 dino: I was hoping to implement it, do everything in extended SRGB and see what happens. and whenever doing an interpolation convert to the working color space and see how well this works 02:49:37 dino: we could make the default working color space extended SRGB, which should be lossless, not out of gamut 02:49:43 dino: I can do some experimentation and see if that's okay 02:51:08 RESOLVED: Interesting idea, dino will experiment and come back with results. 02:51:50 Topic: Interpolation between different color spaces 02:51:54 Github Topic: https://github.com/w3c/csswg-drafts/issues/883 02:52:23 dino: following on from issue 300, if experimentation pans out than I agree with ChrisL_, do interpolation in document color space which means you may get discontinuities at the ends 02:52:33 ChrisL_: you said earlier you wouldn't get discontinuities at the end 02:52:50 dino: I said if experimentation works out, then hopefully the working color space does something that does not result in discontinuities 02:53:09 Rossen: we can independently resolve on interpolating 02:53:41 linear-gradient(rgb(255, 0, 0), color(display-p3 1)) 02:53:58 dino: this will get a solid color, not a gradient in the working color space SRGB 02:54:19 leaverou: if the working space is SRGB, then the display color is clipped? 02:54:32 dino: it's clipped within a gradient, but not in the background color 02:54:52 dino: I'm trying to come up with a color space that's the same as what people are used to but allows interpolation outside of it 02:55:12 ChrisL_: explains something 02:56:41 Karen has joined #css 02:56:49 leaverou: We can't we interpolate in the union of the two working spaces or lab? The author intent is clear: I want to interpolate between sRGB red and P3 red. Those are not the same colours. 02:56:55 s/We can't we/Why can't we/ 02:57:02 chrisl: this is why the working colorspace exists. its npt possible to pick the 'larger' because they can intersect. for example p3 and adobergb 02:57:21 this is why we have working colorspace which can be set to Rec2020, or XYZ, or Lab 02:57:26 and will never clip 02:58:42 This is why I want to have lab as an option because apart from not clipping it also gives better results 02:58:51 http://dabblet.com/gist/1b1344c158bf599bfc1ad47cc1265e7a 02:59:30 dino: I don't know how expensive it is to use Lab 02:59:51 ChrisL_: when you have two things with different color profiles they'll get converted to XYZ or Lab 03:00:17 because those are the two profile connection spaces for ICC profiles 03:00:25 dino: I will provide feedback based on our implementation. We can always use Lab and this issue will go away - get no banding 03:00:46 dino: at which point you asked why do we need a working color space for the document? 03:01:06 leaverou: we still need to define what colors in the document resolve to 03:01:57 dbaron: when you're combining different stylesheets from multiple sources you don't want one stylesheet to change the meaning of things in another stylesheet 03:02:07 ??: variables? 03:02:10 dbaron: you know you're doing it 03:02:50 TabAtkins: we previously had issues where we didn't want to let other unrelated stylesheets mess with your colors 03:02:52 s/we still need to define what colors in the document resolve to/we still need to define what the rgb(), hsl() etc colors in the document resolve to/ 03:03:34 dino: if an imported stylesheet sets the document working color space we should come up with some rules for how its processed 03:03:49 TabAtkins: let's give colors all defined meanings 03:04:05 ChrisL_: let's continue to, they've always had defined meanings but the fidelity has ramped up 03:04:15 leaverou: if all colors have defined meanings, why do we need a working color space? 03:04:17 continue to, as has been fdefined since css1 03:04:24 dino: we only need a working color space for interpolation 03:04:42 dbaron: even if color A is defined and color B is defined, it depends on the color space what is half-way between them 03:04:54 leaverou: convert to Lab 03:05:03 TabAtkins: converting to Lab is *an* answer, not necessarily the answer 03:05:18 ChrisL_: that's an option, it's not compatible with what we have at the moment 03:05:23 leaverou: to be better 03:05:32 dbaron: but it would be a change 03:06:08 s/depends on the color space/depends on the working color space/ 03:06:14 Rossen: do we have a counter proposal? if not let's go with dino's proposal 03:06:40 Rossen: you'd interpolate between colors in the document working space 03:07:36 RESOLVED: Use the working color space for now. 03:08:14 ScribeNick: TabAtkins 03:08:24 s/Use the/Interpolate bweteen colors by converting them to the/ 03:08:45 Topic: Serializing color() values 03:08:50 Github Topic: https://github.com/w3c/csswg-drafts/issues/480 03:09:19 dino: If you did "color(srgb 1 0 0)", should it serialize as that, or as "rgb(255 0 0)"? 03:09:23 dino: Two problems. 03:09:41 dino: We lose a lot of precision sending it out to rgb() - only 8 bits of precision, vs doubles. 03:10:26 dino: That's impacted us in real impls - the touch bar in new macs, when in editting mode you can pick a color, and those colors are in a wider color space, then if we convert to srgb you lose precision; if we send that information back up, it's not what the author said. 03:10:52 ChrisL_: In general I've moved Color 4 to 0-1, because it's inherently bit-depth neutral, and we're seeing devices with 10 or 12 bits per channel now. 03:11:11 dino: So should a color(srgb) be output as rgb()? 03:11:29 ChrisL_: If anything, output it as %, that's higher precision. 03:11:34 TabAtkins: Or just keep it color(). 03:11:39 dino: That's what I do now. It's higher precisions. 03:12:17 TabAtkins: Does anyone suggest simplifying to rgb()? 03:12:25 dino: No, it's just not strictly defined. 03:13:07 dino: And now that we have the new rgb() syntax, should we serialize to that? That would probably break things. 03:13:15 TabAtkins: Yeah, I think we need to output in the old rgb(). 03:14:02 dbaron: Back to color(), we could output to % and keep it higher-depth. 03:14:09 dino: Yeah, but it would probably break content. 03:14:20 dino: No content expects %s in the serialized form right now. 03:14:48 dino: So maybe we can suggest that rgb() is always 8-bit? 03:15:18 ChrisL_: Absolutely not - rec2020 is only defined over 10 and 12 bit. It woudl be a syntax violation. 03:15:25 kaz has joined #css 03:15:30 dbaron: I think he was suggesting that the rgb() syntax, specifically, is 8-bit. 03:15:47 ChrisL_: Okay, that's fine. That then means that rgb() *must* be stuck in sRGB - it can't become rec2020. 03:16:19 dino: No, I really just meant that when we serialize rgb(), we round it to 8-bit. 03:16:52 kochi_w3c has joined #css 03:17:16 ChrisL_: So if a user inputs with rgb(%), then serializes, what do you get? 03:17:23 TabAtkins: integers between 0 and 255 03:17:37 dino: So I think we cna resolve that color() serializes as color(). 03:18:07 RESOLVED: color() always serializes as color(). 03:19:10 TabAtkins: Make sure to specify whether trailing 0 args are omitted or not in serialization. 03:19:21 dino: I think I always output all the args. I leave off alpha if it's 1. 03:19:33 Topic: API for converting between color spaces 03:19:38 GitHub Topic: https://github.com/w3c/csswg-drafts/issues/1248 03:19:48 rubberyuzu has joined #css 03:20:06 dino: So say you're writing an imaging tool and you want to have some code that converts between color spaces. 03:21:10 TabAtkins: we should. I don't like it when there's complicated math the browser can do, but there's no API for it. 03:21:22 TabAtkins: I've had to write this code in JS by looking up papers. 03:21:54 RESOLVED: Add an API for converting between the browser's known color spaces; dino will bring a proposal to the group. 03:22:01 Topic: Industry standard color names 03:22:05 Github Topic: https://github.com/w3c/csswg-drafts/issues/817 03:23:57 Karen has joined #css 03:24:00 TabAtkins: This already exists, no? color() accepts strings already, to refer to palette colors in an ICC profile. 03:24:24 ChrisL_: Yeah, crissov just needs to provide an appropriate ICC profile. 03:24:47 ChrisL_: And then you can do Pantone on your own as a user, rather than invoke licensing issues with browsers. 03:24:58 RESOLVED: close as invalid, as you can already do this. 03:26:20 Topic: Gamma errors in image downscaling 03:26:33 ChrisL has joined #css 03:26:36 Vlad has joined #css 03:27:22 leaverou: There's some further discussion linked from this issue. 03:27:42 leaverou: Depending on the scaling algo, particularly if there are stripes or thin patterns, the resulting downscaled image can be significantly color-warped. 03:28:13 ChrisL_: This is artifacts because they're doing arithmetic in a non-linear color space. 1+1 doesn't equal 2, it equals 1.6. 03:28:26 leaverou: So I was asking if we should change behavior, or have a switch for this, or what. 03:29:06 TabAtkins: Even in realistic images, you'll get noticeable darkening if you downscale. 03:29:24 leaverou: So one proposal: image-rendering:high-quality mandates a linear color-space for scaling 03:29:33 leaverou: Or we have a new value for image-rendering that does linear-blending. 03:30:16 ChrisL has joined #css 03:30:49 TabAtkins: The cost of this is time, of course. But Chrome already does a quick-and-dirty scale, then pops in a good scale a second later or so. 03:31:39 dbaron: Does anyone know the actual slowdown ratio of doing linear blending? 03:32:26 ChrisL_: Don't have numbers, but it's simple - you just use a lookup table to map them; a single lookup per pixel per channel to send it to linear, then you downscale, then those lookups again to send it back to gamma. 03:32:48 dbaron: In general we've had a disconnect between this WG and the graphics people, and I feel that making this decision without them will further that disconnect. 03:33:20 dbaron: So I think we should ping actual people doing the image scaling, to at least get the rough data on how much slower - big difference of 2% vs 400% slowdown. 03:33:55 TabAtkins: Heck, if it's small enough we could mandate it for "smooth" too. 03:35:20 Rossen: So would you like to postpone this until we get some numbers from graphics people? 03:35:24 dbaron: I think that would be useful. 03:36:29 rachelandrew has joined #css 03:37:24 RESOLVED: Get data/info first from graphics impls, then revisit. 03:37:52 Topic: Lea as Images 3 editor 03:38:14 leaverou: Since I've done work on Images 3, can I be editor on that too? (I'm already editor of Images 4.) 03:38:22 RESOLVED: Lea is also an Images 3 editor. 03:38:26 myles has joined #css 03:38:32 Topic: Koji as co-editor of Inline Layout. 03:38:43 fantasai: I'm pretty sure dave won't mind. 03:38:52 RESOLVED: Koji as co-editor of Inline Layout. 03:39:35
03:40:02
03:40:05 Topic: Floats 03:40:21 fantasai: We discussed floats, and decided that the logical keywords should be inline-start and inline-end. 03:40:51 fantasai: You'll often want to float in only one axis, and so to disambiguate, you need inline/block-start/end, and so left/right maps to inline-start/end. 03:41:46
03:44:04 github-bot has joined #css 03:45:35 rachelandrew has joined #css 04:21:16 rachelandrew has joined #css 04:24:25 Florian has joined #css 04:33:17 tantek has joined #css 04:41:11 so we should start back up in 5 mins or so 04:41:28 skk has joined #css 04:45:59 myles has joined #css 04:46:09 ericwilligers has joined #css 04:52:48 murakami has joined #css 04:53:08 Topic: F2F scheduling 04:53:14 Zakim has left #css 04:53:22 astearns: TYPO usually has Tues-Sunday sheduling 04:53:22 kawakubo has left #css 04:53:32 astearns: I suggest our 4-day meeting starts Monday 04:53:40 ChrisL has joined #css 04:53:42 fantasai: Suggest people get a break on Monday 04:53:57 vlad: First two days are more tech heavy than the rest of the conference 04:54:06 vlad: Could start with that, and then co-exist with the conference 04:54:11 vlad: have parallel events 04:54:25 astearns: So we could have our meetings Thurs-Sun as well 04:54:33 astearns: But then we're meeting on a weekend 04:54:35 Zakim has joined #css 04:54:43 present+ 04:54:47 vlad: Monday Houdini, break for TYPO labs, follow with CSSmeetings 04:54:50 iank_: Hosting us where? 04:54:56 vlad: Host will be Monotype 04:55:03 vlad: Traditionally in Berlin 04:55:28 Florian: I would prefer no gap between Houdini and th rest, because as Houdini stabilizes, might be possible to do Houdini as a breakout session in parallel with CSS 04:55:57 Rossen: That's a valid argument, bigger one for those who travel and don't plan to attend TYPO but do want to attend Houdini and CSS you have extra stay in the middle 04:56:09 Rossen: If you're sponsored, not too terrible, but out of pocket not so great 04:56:27 dino agrees 04:56:33 Florian: Who has problems with weekends? 04:56:38 dino waves 04:57:02 ... 04:57:18 vlad: Conference part is typographic, some interest to this group, bu tnot so much overlap 04:57:26 vlad: labs part is technology, more of interest to this group 04:57:49 vlad: labs is Tues-Wed 04:58:03 Rossen: So we can either set up CSS meetings before that so we don't overlap 04:58:19 Rossen: but we dont' want to do like Friday through next week through Monday, probably 04:58:28 Rossen: But then people who want to do labs can stay, others can go home 04:58:40 Rossen: Pushing after all of TYPO, if you want to go to labs, what are you doing 04:58:53 Rossen: So I think we either schedule right before or right after labs 04:59:00 Rossen: either way would go through weekend 04:59:16 Rossen: Anyone have problem with weekend? glazou tended to have hard problem with it 04:59:27 plinss: It was mainly if we did TPAC plus a weekend, then it gets really long 04:59:58 astearns: My preference is after the labs, so we're there simultaneously in case there's something interesting at the conference 05:00:06 astearns: We could even have a joint session with the conference 05:00:17 vlad: COuld have panel session, ppl interested in CSS technology 05:00:30 vlad: May be someone interested to present in the conference itself 05:00:46 fantasai: Or we could have a developer meetup after-hours 05:00:55 astearns: provisional idea is to coincide with conference, after the labls 05:01:05 astearns: Any concerns, speak up 05:01:45 antonp has joined #css 05:01:47 CSSWG has preference for earlier in April than later 05:01:53 because of summer meeting 05:01:58 and no winter meeting 05:02:27 [discussion of summer location] 05:09:29 Topic: Motion Path 05:09:59 ScribeNick: TabAtkins 05:10:11 https://github.com/w3c/fxtf-drafts/issues/51 05:10:35 rubberyuzu_ has joined #css 05:10:36 shane: 4 issues I"d particularly like to discuss today; we can do the rest of the 16 if we have time 05:10:50 shane: The four I'd like to discuss are relevant to our impl plans 05:11:01 Github Topic: https://github.com/w3c/fxtf-drafts/issues/78 05:11:35 shane: Interaction between for path, and offset-position specified. 05:11:45 shane: One suggestions is when using a , offset-position is ginored. 05:11:54 shane: Other is to apply to offset-position as the initial offset. 05:13:23 <4 engineers trying to operate a whiteboard> 05:13:34 Vlad has joined #css 05:13:45 fantasai: Don't have a strong opinion, but if you can do something useful with it, that's nice. 05:13:55 Florian: Any difficulty with that? 05:14:08 fantasai: Various shapes have a start position as a possible param. So what does it mean if you have that? 05:15:02 RESOLVED: offset-position offsets the shape when the offset-path is a geom/shape. 05:15:53 fantasai: So offset-position isn't an offset, it's a position. How do you turn it into an offset? 05:18:38 fantasai: [elaboration on this] 05:19:00 fantasai: positioning sysntax is a position wrt four sides of a box; it's not privileging the top left corner. Don't want to turn it into a description of an offset from the top left corner. 05:21:17 [circle(... at ) describes the center of the circle. offset-position is also a position. Adding them together is non-obvious.) 05:22:22 rubberyuzu_ has joined #css 05:22:42 astearns: What if we let offset-position *replace* the shape's position, when defined? 05:23:06 shane: Eh, that doesn't seem desirable. 05:23:57 TabAtkins: So core if points and points don't add together. 05:24:27 Florian: Unless you can turn them into a vector. 05:25:18 fantasai: What if you don't specify a psotioin in the circle? 05:25:22 TabAtkins: Falls back to center 05:25:28 fantasai: Why not use the offset-position? 05:25:31 TabAtkins: ... 05:25:39 shane: [revisits Alan's suggestion again] 05:27:03 [mumbly discussion of whether the box keywords are useful here] 05:28:03 fantasai: There's no use case afaict, adding it for completeness is excess implementation and testing work. 05:28:11 TabAtkins: But consistency! 05:28:31 back to original topic 05:28:44 shane: Suggestion to have offset-position overrides position in the shape 05:29:37 Rossen: Why use a separate position property? 05:29:40 fantasai: Because it's there 05:30:49 TabAtkins: What makes it special here, vs any other place that uses the shape functions? 05:34:11 TabAtkins: If we want to make path() easier to use, should do that generally 05:34:24 TabAtkins: It would be great to have coords in path via css box coordinates generally 05:34:40 shane: feels wrong, not sure how to explain why I think this... 05:35:08 TabAtkins: If I use offset-position to set the start coord, why not use it to set other coords? 05:35:32 shane: I think in general for the use cases here, the path doesn't need to be shaped wrt the box, but often you want the start position to be wrt box 05:35:58 shane: Usually you want the path to be absolutely sized 05:36:08 TabAtkins: Sure, they're all useful 05:36:15 TabAtkins: box coords are a superset of abs coords 05:36:34 In Blink's shipped implementation, if people use position absolute and set left/top, then path('m 0 0 ... ') starts from left/top. 05:36:35 TabAtkins: I think it's just weird that in this one instance of the path function, doing something special is weird 05:37:00 TabAtkins: Create a CSS-friendly version of path syntax, that takes with units and such 05:37:08 shane: Paths are hard to read and write 05:37:14 shane: You usually tkae it out of an authoring tool 05:37:25 shane: Paste it in... but then want to move the path around 05:37:31 TabAtkins: You alter the first to digits of the path... 05:37:42 shane: But if you're building a site where you're taking data from somewhere else, don't want a manual fixup 05:37:49 fantasai: I think shane's got a good point 05:38:02 TabAtkins: But if you want to use path elsewhere in CSS, then this is a problem 05:38:16 shane: What you're suggesting doesn't fix it for path(), but it's also useful and we should do both. 05:38:45 TabAtkins: Could say that path() takes an "at " after the path, just like other shapes do 05:39:10 TabAtkins: Should go back to offset position only offsetting ray 05:39:19 shane: then position should go into the ray function 05:39:25 TabAtkins: just what I was about to say 05:39:31 fantasai: That's not the only thing offset-position does 05:39:43 T_T 05:41:04 fantasai: So offset-position is not only for setting the position of the ray(), it's for positioning a box position-like (which you can't do with abspos). 05:42:24 So is the view that offset-position is to only be relevant for ray() and none, and not for path() and basic-shape? 05:43:17 TabAtkins: The purpose of offset-position is to give you a translte function that acts like a background position, so that 0% and 100% map to aligning to opposite edges of the container 05:43:19 ericwilligers: we're not happy with that 05:43:44 TabAtkins: That appears to be only necessary use of it here; shapes can just tkae an explicit position 05:43:58 TabAtkins: So maybe have a different feature for this 05:46:01 RESOLVED: Undo previous resolution, we're still thinking about this 05:46:30 See Figure 11 in https://drafts.fxtf.org/motion-1/#offset-anchor-property where offset-position and offset-anchor are useful with offset-path none. 05:46:31 (In other words, we could just move *all* the positioning functionality into the offset-path functions - path("..." at ), ray(... at ). Then there's nothing left for offset-position to do *in this module*, so we can address the fucntionality it still has elsewhere. 05:46:43 Topic: https://github.com/w3c/fxtf-drafts/issues/73 05:46:57 Github Topic: https://github.com/w3c/fxtf-drafts/issues/73 05:47:19 kaz has joined #css 05:47:19 ericwilligers, I think the proposal was to move inside the ray() fuction and delete offset-position or add the none-based positioning feature to something else? 05:47:45 jihye: offset-based positioning properties describe tehe path the element is on, various ways 05:47:58 jihye: ray() defines a line segment starting from the position, going in the defined direction 05:48:08 jihye: It has 3 params - angle, size, contain. 05:48:17 jihye: size is where the path ends. 05:48:30 jihye: When talking about size, have to know the path length 05:48:34 jihye: To resolve %s 05:49:22 jihye: So most important factor is in ray(); I want consistency with %s here, so if all you do is animate the angle, the % resolves to the same length the whole time. 05:50:53 fantasai: So question is what the behavior is when you *omit* the size keyword. 05:51:06 fantasai: Earlier you just draw the ray until you hit an edge, it's that long. 05:51:22 fantasai: Current spec it defaults to closest-side. 05:52:23 fantasai: So my suggestion is adding an option (or defaulting it) to get back the "cast the ray to the edge of the box" behavior. 05:52:28 Kitahara_ has joined #css 05:54:12 [explicitly unminuted discussion about whether it makes sense to be the default] 05:54:32 fantasai: It's not clear, fi the "measurement angle" is different from the angle you're actually using, why 100% stops at the given point. 05:55:17 shane: I think that's not usually the case - mostly it'll be used to position things around a circle around the box. 05:55:27 Can we make the non-optional? 05:55:59 ChrisL: I agree with shane - i think it's usually the case that you're using this feature for polar-positioning multiple things. 05:56:05 topic: ericwilligers we'd still need to decide the default 05:56:11 fantasai: That's *a* use-case yes, maybe the most common one. 05:56:28 Github Topic: https://github.com/w3c/fxtf-drafts/issues/73 05:56:59 ChrisL: Yeah, and why not make the most common use-case be the easiest thing to do? 05:57:59 tantek has joined #css 05:58:51 Florian: [gives example of putting the start-point in the corner instead, where closest-side will send all %s to 0.] 05:59:07 shane: I think the default of a polar-positioning feature should be a circle. 06:00:05 astearns: What about making size always required? 06:00:59 fantasai: [doesn't like requiring it] 06:01:18 No default would be needed for function ray( && && contain?) 06:01:23 TabAtkins: [heh, fantasai wants a default, but prefers a different default than anyone else] 06:01:34 shane: Straw poll? 06:02:22 fantasai: I'm against making it required, but won't oppose it. I will oppose defaulting it to closest-side. 06:02:40 fremy has joined #css 06:02:49 RESOLVED: argument of ray() is required. 06:05:09 [discussion of naming the keyword] 06:05:31 sidez 06:05:35 RESOLVED: Name the "cast to the side you're pointing at" value "sides" 06:05:39 Topic: https://github.com/w3c/fxtf-drafts/issues/69 06:05:44 Github Topic: https://github.com/w3c/fxtf-drafts/issues/69 06:06:37 shane: First, issue was opened because you thought offset-rotation duplicated 'rotate'. I don't think that's true, and we should reject it. 06:06:54 shane: Second, this is a minor issue happening well after we shipped; we'd prefer to not make non-essential adjustments. 06:07:14 s/minor issue// 06:07:41 shane: Final output transform comes from several sources. 06:08:17 shane: offset, translate, rotate, scale, transform 06:08:33 shane: The order these happen in is quite integral to the result. Re-ordering is not generally possible. 06:08:38 https://drafts.csswg.org/css-transforms-2/#ctm 06:08:56 shane: So a rotation that happens in offset is different from one in TSR, which is different from one in transform. 06:09:15 shane: In particular, a rotate in "offset-*" rotates the frame of reference that the TSR properties work in. 06:09:33 fantasai: Do we *want* to do that? 06:09:47 shane: Yeah, definitely cases where you want to; you might be doing something independent in TRS. 06:10:07 fantasai: [describes some example she wants help with] 06:12:37 [something about additive properties not being possible yet] 06:12:56 [i believe the point is that the example in question is gonna need more control, probably in scripting, than we can reasonably provide in simple CSS anyway] 06:14:22 The use case is that you have the little motion path plan along its path, and then you want it to have an :active { /* shift it down/right by 2px to react to cick */ } 06:14:48 This should not require scripting 06:15:17 RESOLVED: Close issue #69 no change. 06:16:00 Topic: https://github.com/w3c/fxtf-drafts/issues/51 06:16:06 Github topic: https://github.com/w3c/fxtf-drafts/issues/51 06:16:25 shane: Offset property names collide with logical props. 06:16:44 shane: We have offset-path/rotation/etc. Logical props has offset-block/inline-start/end. 06:16:55 shane: Question is what the 'offset' shorthand do. 06:18:32 TabAtkins: I'm okay with no shorthand for positioning offsets 06:18:44 fantasai: It's a PITA to have to set tbrl to zer 06:18:51 fantasai: So we should have a shorthand for them 06:19:06 TabAtkins: If we can agree that the logical props dont' need a shorthand, we can just let the logical props to stay as they are, and give 'offset' to the motion-path spec. 06:19:09 fantasai: And that shorthand should match the prefixes (although it doesn't have to but that would be silly) 06:19:22 TabAtkins: If that's the case, then one of the impls has to change. 06:19:28 dbaron: I'm okay with changing logical prop name. 06:19:56 RESOLVED: #51 won't cause motion-path to rename; the offset-* logical props will change name. 06:21:19 [naming brainstorming] 06:21:22 position-*? 06:21:25 bounds-* 06:23:14 leaverou: What were the motion-path ones renamed in the first place? They're not really about offsets. 06:23:27 Florian: They'r enot about motion either - you only get that when you animation offset-distance. 06:24:19 topic: Focus of custom textbox-like elements 06:24:41 shane: If you have a button-thing or a text-thing, native focus behavior differs. 06:24:55 shane: If you focus the text thing, it shows a ring whenever it's focused, regardless. 06:25:09 shane: But button things don't show a ring unles syou focused them via a non-pointer interaction. 06:25:20 shane: This behavior is hardcoded into our browsers with a list. 06:25:52 shane: So we have the :focus pseudo-class, which you can set an outline with. 06:26:19 shane: With a rule like ":focus { outline: ...; }", all you r button-things act like text-things. 06:27:00 shane: Alice has proposed :focus-ring, designed to help with outlines, which matches only when the focus ring would show on the element. 06:27:10 shane: This is all bckground - we already accepted :focus-ring. 06:27:30 shane: Now at the moment we have weird UA stylesheet focus stuff. Deep magic, we'd like to switch them to :focus-ring. 06:27:35 shane: So now we ahve a secondary problem. 06:27:43 shane: Sometimes people make button-like or text-like things. 06:27:43 We've also had :-moz-focusring for a while; see https://lists.w3.org/Archives/Public/www-style//2013Dec/0286.html 06:28:02 shane: It would be nice to be able to opt these elements into the appropriate behavior. 06:28:06 aboxhall has joined #css 06:28:18 shane: We have two proposals. We probably want to do both. 06:28:42 shane: First is a property on an element that sets it to texty or buttony behavior. 06:28:53 'shmocus-role' 06:29:18 Florian: Why default to button? 06:29:34 focus ring usually applies to everything unless that changed recently 06:29:49 TabAtkins: If you put tabindex on a
, clicking that div doesn't focus-ring. 06:30:07 http://jsbin.com/bujerufeca/edit?html,css,js,output 06:30:10 [looks like shane had it backwards] 06:30:20 shane: Okay, so texty is the default behavior. 06:30:22 clicking the div shows a focus ring 06:30:30 yes, texty is the default behaviour 06:30:41 kaz has joined #css 06:30:59 oh right, it shouldn't match ::focus-ring 06:31:04 dino: Why not just defer to the ARIA role? 06:31:07 I suppose this is important because right now people work around the undesired focus outlines with things like :focus { outline: none } ? 06:31:14 doesn't help that I can only hear about 30% of what's being said :) 06:31:29 dbaron: yup 06:32:38 aboxhall: why not trigger different behaviors via aria role? 06:32:41 dbaron: And general design with ARIA is that it doesn't influence outside the a11y space 06:32:50 +1 ARIA shouldn't affect anything other than the a11y tree 06:33:02 unless the author decides it should 06:33:15 [general agreement with this policy] 06:33:51 shane: So second thing we want is the ability to refer to the broswer's default focus styling. 06:34:34 Florian: outline-style: auto does this 06:34:56 dino: Our focus impl in Safari is slightly wrong - it should be slightly animated glowy outline. 06:35:04 Wait, earlier were we saying texty *should be* the default behaviour? 06:35:09 Florian: With outline-style:auto, it can even change the shape of the outline. 06:35:25 no we were saying it is the default behavior 06:35:27 yeah, aboxhall, because it's the default on all elements today, so it needs to be the initial value of the new property 06:35:31 omg no 06:35:33 Florian: Can, but not required to follow the outline-color 06:35:35 then we end up back where we started 06:35:39 buttony should be the default behaviour 06:35:55 ??? 06:36:09 if you want to always see an outline, use :focus 06:36:10 How does the "default behavior" send us back to where we started? 06:36:43 so you'll need to specify "not texty" on everything which isn't texty (which is most things)? 06:37:23 i didn't realise aboxhall was typing in IRC :( 06:37:44 me neither :-/ 06:38:00 shane: So, Alice, can you explain your preference 06:38:24 aboxhall: If we default to texty, we end up where we are today - 06:38:35 aboxhall: Most things aren't texty, right? 06:38:43 TabAtkins: Yeah, but also most things aren't buttony? 06:38:53 aboxhall: I think if it's focusable they're more likely to be buttony. 06:39:05 aboxhall: Today people take the focus ring off things because they don't want it to act texty. 06:39:47 aboxhall: So the buttony behavior, which people actually want, should presumably help prevent people from removing focus outlines from things. 06:41:18 [convo back and forth a bit over exactly how this would be applied] 06:42:18 TabAtkins: So if this affects :focus-ring, and we rebase our impls to use :focus-ring in the UA stylesheet, this'll be a behavior change for all tabindex elements. Is that ok? 06:42:25 aboxhall: I think it's a positive behavior change, yes. 06:42:44 [a bit of banter over why devs remove focus rings] 06:43:51 TabAtkins: So proposal is that the default of shmocus-mode is button-y, which has the knock-on effect that arbitrary tabindex'd elements will change behavior (no longer focus-ringing on click) 06:44:17 buttony not button-y 06:44:29 aboxhall: Yes. And remember that this won't affect anything that's currently outline:none, or using :focus. Just default elements, and things targeted by :focus-ring. 06:44:40 astearns: So does anyone have an objection to doing this? 06:45:14 astearns: I am not convinced at all this is a good thing 06:45:27 RESOLVED: Come up with a property name for this focus-ring property, ratify the CSS-a11y TF, put it in css-ui-4 06:45:46 aboxhall: One added thing - the way :focus-ring is specced, it leaves it open to the browser what heuristic to use to apply :focus-ring. 06:45:52 aboxhall: Obvi this property can be part of that. 06:46:05 @astearns: but ok, no strong opinion 06:46:14 thanks, fremy 06:46:26 aboxhall: But one feedback from a11y folk is that some people always want to see the focus ring, others find the focus ring always confusing. So there coudl be a user setting, similar to the Chrome Mobile setting that lets you force it to always allow resizing. 06:47:07 TabAtkins: Yeah, that's generally allowed. And if the user stylesheet exists, it can override authors with a !important rule. 06:47:39 Florian: I just checked out outline-style. By spec you have what you want, in Safari you have what you want. In Chrome you get a *different* fancy outline; in Firefox you get a plain outline; in IE you get nothing. 06:48:51 [discussion of how to test outline-style: auto in a reftest] 06:48:54
06:49:01 johanneswilm has joined #css 06:52:04 github-bot has joined #css 07:00:20 astearns: https://github.com/w3c/csswg-drafts/issues/825#issuecomment-295589205 07:00:43 Ahoy 07:00:57 What inspired https://twitter.com/csswg/status/855306526973612032 ? 07:05:37 JonathanNeal_: https://github.com/w3c/fxtf-drafts/issues/51#issuecomment-296089562 07:07:29 github-bot has joined #css 07:07:32 Thanks @astearns ! 07:07:51 ScribeNick: surma 07:08:05 Topic: CSS contain 07:08:22 kamata has joined #CSS 07:08:41 Florian: Last issue was what to do if contain is on table part 07:08:47 http://www.w3.org/mid/55BA836C.6060404@mozilla.com 07:09:32 Florian: We have different containment modes, each needs an answer for which tables parts. Style containment: should apply. paint containment: should apply. Size containment: should never apply 07:09:34 dbaron: including cells? 07:09:39 rachelandrew has joined #css 07:10:10 Florian: including cells! We could make it work, but it would be undefined behavior. We could define it, but probably not worth it 07:11:04 Florian: if we say size the call as if empty, and then do in-flow content is not an operation that currently exist 07:11:33 Florian: The use case for containment on cells is for spreadsheet-style sites. You could do the cells independently and place them on the grid 07:11:45 myles has joined #css 07:11:55 iank_: Does paint containment make sense on table rows? 07:11:59 Florian: why not 07:12:40 Florian: I’d be okay with allowing it on cells, but not rows 07:12:44 [general agreement] 07:13:05 dbaron: We need to define how paint containment works with collapsing borders 07:13:25 @Florian @iank_ Right now I doubt because the background color of the table row is clipped by the cells which can come from other rows due to spanning 07:13:30 Florian: As a general rule we should disallow containment if the implementation is not obvious 07:13:45 iank_: So paint containment on the table or the cells, but not on rows 07:13:47 Florian: yes 07:13:50 antonp has joined #css 07:14:00 Florian: the same for layout containment 07:14:23 iank_: same for size containment? 07:14:39 Florian: yes. only style containment on all elements 07:14:59 https://twitter.com/m_strehl/status/855318165923938305 07:15:38 proposed resolution: style containment works on table parts, size containment does not work on table parts, the two other kind of containments only work on table cells 07:15:44 fremy: OK with this? 07:15:54 yes 07:16:11 fantasai: fixed tables dont have any of this weirdness, right? 07:16:47 dbaron: Content can be bigger. I think it gets clipped, but it can be bigger 07:16:58 Florian: Are we interested in this nuance? 07:17:12 dbaron: I am not. 07:17:21 RESOLVED: style containment works on table parts, size containment does not work on table parts, the two other kind of containments only work on table cells 07:17:22 http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Ctable%20style%3D%22table-layout%3A%20fixed%3B%20width%3A%2010px%3B%20border%3A%20solid%3B%20height%3A%2010px%3B%22%3E%0A%3Ctr%3E%3Ctd%3Eaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%0A%3C%2Ftable%3E not clipped 07:18:05 RESOLVED: CSS Contain to CR 07:18:13 rrsagent, here 07:18:13 See http://www.w3.org/2017/04/21-css-irc#T07-18-13 07:19:02 Topic: TAG review of scroll anchoring 07:19:26 https://github.com/WICG/ScrollAnchoring/blob/master/README.md 07:19:52 github issue: https://github.com/w3c/csswg-drafts/issues/676 07:20:09 Video: https://blog.google/products/chrome/taking-aim-annoying-page-jumps-chrome/ 07:21:38 rbyers: gave a presentation on i t at TPAC 07:21:47 rbyers: wanted it to be opt-out, not opt-in 07:21:50 rbyers: This is a feature to avoid jumping while the page is loading. We talked about it at TPAC. We didn’t want it to be opt-in, so we needed to make sure the heuristics are good. We have written all the details in the spec. Shipped in Chrome 55. We see it used on 10% of pages views on Android. The pages that use it hit the heuristics 5 times poer page 07:21:50 load 07:22:28 rbyers: We wanted to check if theres other interest. We can still make changes. 07:22:59 [general signals of interest] 07:23:33 rbyers: People didn’t notice they had this problem. Now that Chrome corrects it, it might get worse in other browsers. 07:24:33 rbyers: Should we warn on console about hitting the heuristics? 07:24:50 rbyers: We are careful about spamming warnings 07:25:05 dbaron: I‘d want this to work when I resize a window, too. That shouldn‘t issue a warning. 07:26:10 [rbyers checks if it is tie to resizing too] 07:26:42 Rossen: Let say you have implemented snap points. How much can be built on top of this 07:26:50 TabAtkins: nothing 07:27:22 rbyers: This lets you customize what is considered an anchor. Snap points set the anchors. 07:27:46 Florian: Is this writing-mode aware? 07:27:49 rbyers: It should be 07:28:32 Florian: The interesting part is that the implementation is complex, but the api is small, so changes can be made in the future to the heuristic 07:29:31 fantasai: We should publish a FPWD through CSSWG(?) 07:30:26 TabAtkins: Since Google is a member of the group, any Googler can continue work on the draft, even if the person themselves is not a member of the group. Correct, ChrisL ? 07:30:29 ChrisL: I think so, yes 07:31:06 ChrisL: If they are not a member, tho, what if they start doing whatever they want 07:31:11 astearns: we take them off as an editor 07:32:01 fantasai: Its better for the editor to be a member of the group for access to all the tools etc 07:32:14 rbyers: we’ll ask him to join 07:32:32 fantasai: No expectation of him showing up to meetings etc. 07:32:39 Rossen: this is in WICG, no? What is the migration process? 07:32:48 Florian: We just did it 07:32:53 Rossen: not sure that is the case 07:33:14 bobbytung has joined #css 07:33:16 astearns: We dont have a clear handoff 07:33:29 Florian: We take the spec, put it in our repo 07:34:47 rbyers: We’ll ask cwilso how to migrate 07:35:18 Rossen: We’d like to know as well for future WICG migrations. There used to be a high bar, I don’t want to just ignore/circumvent that 07:35:50 TabAtkins: Worst case I’ll be co-editor 07:36:08 astearns: It could be nice to have the editor on calls to have their expertise 07:36:36 RESOLVED: Graduate scroll-anchoring from WICG to CSSWG 07:36:56 RESOLVED: Request to graduate from WICG to CSSWG 07:37:10 topic: testing user agent stylesheets 07:37:12 https://github.com/w3c/web-platform-tests/issues/5625 07:37:24 GitHub topic: https://github.com/w3c/web-platform-tests/issues/5625 07:37:35 astearns: Should we have tests for UA stylesheets? 07:38:14 dbaron: It’s a good idea. But some results might be an issue against the HTML spec rather than the UA 07:38:43 fantasai: Maybe the UA stylesheet tests should migrate to HTML 07:38:55 s/tests/statements/ 07:40:14 xidorn: test cascade level? 07:40:45 dbaron: There are a lot of known issues where what's in the UA level vs. the preshint level doesn't match the spec, since the reverse engineering didn't really consider that, I don't think. 07:41:32 astearns: so general agreement? 07:42:01 [yes] 07:42:02 topic: 'line-height: normal' definition should reflect reality of determining based on fonts 07:42:20 github topic: https://github.com/w3c/csswg-drafts/issues/1254 07:42:40 Florian: we were trying to do things that depend on normal and it didn’t match reality 07:45:04 dbaron: spec says that when you have glyphs from multiple fonts, where the fonts have different ascend and descend, the glyphs end up with different boxes 07:45:13 s/ascend/ascent/ 07:45:16 s/descend/descent/ 07:45:40 dbaron draws Chinese character and capital B, to represent glyphs from two fonts 07:45:57 dbaron: spec says that when you draw the background you use the lowest bottom and the highest top 07:46:05 dbaron draws misaligned boxes, representing the two different fonts that are triggered by fallback 07:46:25 dbaron labels height of tallest top to bottommost bottom as "content box" 07:47:12 dbaron: you add half of the ??? to each side (top/bottom) of the box 07:47:19 dbaron draws leading on each glyph; shorter glyph gets more half-leading on each side than taller glyph 07:47:43 dbaron labels distance from topmost edge of leading to bottommost leading edge as "line box contribution" 07:48:02 ScribeNick: fantasai 07:48:08 dbaron: Spec for normal says to use a value between 1.0 and 1.2 as normal line-spacing 07:48:21 dbaron: This is not the Gecko behavior 07:48:26 dbaron: This is what the spec says 07:48:30 Florian: Spec contradicts itself 07:48:56 dbaron: Spec describes this behavior, and then says "therefore you get X" where X is not what you get out of this behavior 07:49:31 [confusion about earlier resolution from yesterday] 07:49:52 Florian: The other option was to reduce this line box contribution to just the value of the leading 07:50:01 Florian: which was, iirc, what Safari does, 07:50:09 (which is what Florian and fantasai thought we had resolved on yesterday) 07:50:32 myles: We never add padding to individual boxes. We do ceiling and flooring and then add leading at the end 07:51:07 dbaron: I'm fine with resolving on this, does make this other issue simpler 07:51:11 myles: I thought we resolved already 07:51:18 Florian: dbaron and Alan thought we resolved the other way 07:51:53 kamata has joined #css 07:52:37 dbaron: 3d paragraph on 10.8.1 says to add half leading to each glyph. We're saying to add it to the content box 07:52:47 fantasai: Content box is not well-defined 07:52:53 dbaron: It's in 10.6.1. 07:53:02 dbaron: I guess it's not actually defined. 07:53:15 dbaron: So define that you add leading to union of ascent and descent 07:53:25 fantasai: What's an em box 07:53:47 dbaron: The thing we resolved gets you 15px lines, but only if you don't have a in your line 07:54:04 RESOLVED: add leading to union of ascent and descent 07:54:40 dbaron: What we're talking about is per inline box fragment 07:54:57 dbaron: Goal was to make lines 15px high 07:55:15 dbaron: This resolution will accomplish that given font fallback, as long as you have no markup whatsoever and every line is just a single box fragment 07:55:29 dbaron: The moment you have both markup and different font fallback in the different elements, it fails 07:55:54 dbaron: If you have for example 07:56:18 Get a taxi with 京B 07:56:31 rachelandrew has joined #css 07:56:37 dbaron: Now you're computing the line-spacing for first piece separate from second piece 07:57:22 koji: In Blink, we use primary font to resolve content box 07:57:38 dbaron: We decided not to do that because wanted to consider all the glyphs 07:57:51 myles: If you have an element ... your entire line is that element 07:57:58 myles: what's primary font vs secondary font? 07:58:07 koji: If this is the example and no stying on 07:58:17 koji: Then these two have same font family, then primary font is the same 07:58:29 koji: Even if this span starts from different font family, use the same font 07:58:35 dbaron: So you're saying you use the first available font 07:58:40 koji: If line height is not normal, yes 07:58:57 myles: Are you saying that you ignore the metrics of the non-primary font? 07:59:12 koji: yeah 07:59:16 myles: That's not what WebKit does 07:59:42 myles: At least I don't think so 08:00:26 koji: when we say we compute only once per inline box fragment, compute is based on which fonts? 08:00:31 Florian: Union of all the boxes 08:00:39 [more confusion] 08:00:51 dbaron redraws 08:01:29 lajava has joined #css 08:01:38 dbaron: Let's say these are 16px glyphs and you want 20px line height 08:01:52 dbaron: with union thing, we take the tallst top of glyph, and lowest bottom of glyph 08:01:56 dbaron: Distance here is 19px 08:02:07 dbaron: To get to 20px, we add .5px to top and to bottom 08:02:22 dbaron: In some ways this isn't great, because it gives you baseline jitter when you have font fallback 08:02:38 dbaron: If you use only the primary font and not the others, you will not get baseline jitter 08:02:43 Florian: But you may get overlap 08:02:49 Florian: I think baseline jitter is preferable to overlap 08:03:08 dbaron: Generally the variation is not a lot, so unlikely to get overflow in most cases 08:03:16 dbaron: Unless you push your line height really close to 1.0 08:03:23 astearns: ? 08:03:47 myles: If you a really big paragraph, many lines of text, and one line in the middle has a character from a fallback font 08:04:17 dbaron: That will push the baseline of that line down, because centering union within the line height (19px) rather than just the primary font (16px) 08:04:31 myles: Webkit does that; we just have a little bit of jitter 08:04:59 dbaron: One other factor here... 08:05:15 dbaron: If we did only primary font, line-height-step would give you evenly-spaced baselines 08:05:32 dbaron: But if we don't, then even line-height-step won't give you evenly spaced baselines 08:05:55 myles: So the problem then is that if you use line-height-step, this middle line with the character, might trigger a double-spaced line 08:06:28 astearns: Sounds like maybe previous resolution, we don't want anymore 08:06:37 dbaron: Also could consider whether content-box should use primary font 08:06:40 dbaron: Let me finish 08:06:46 explanation 08:06:51 dbaron: There's a value called normal 08:06:59 dbaron: In theory this is a number 08:07:04 dbaron: But actually this is not what Gecko does 08:07:14 dbaron: Font has a metric that says what they thing the line spacing should be 08:07:20 myles: field is called line gap 08:07:50 dbaron: You could get the metric from the font and apply it to the glyph in that font, and then do the same with the other font to the other glyph 08:08:12 dbaron: And that would be easy with the previous behavior with per-glyph leading instead of union leading 08:08:32 Florian: Could do per-glyph leading and union it 08:08:36 dbaron: What gecko does is more horrible 08:08:38 Karen has joined #css 08:08:40 dbaron: Gecko for line-height: normal 08:08:48 dbaron: Does per-glyph bounding box computation without external leading 08:09:08 dbaron: Then unions that with external leading of the primary font added to the glyph height of the primary font 08:09:16 dbaron: I don't think this was intentional 08:09:44 tantek has joined #css 08:10:03 dbaron: so Gecko will take union of glyph boxes, and then unions that with leading box of the primary font 08:10:55 fantasai: maybe not so bad, gets you more regular spacing line to line, while still trying to avoid overlap by considering union of all glyph areas 08:11:16 Florian: I thought Koji had brought up earlier that for some languages there are very tall glyphs, and you may have that kind in the fallback 08:11:35 Florian: So might have something very tall and has external leading to get that to look nice 08:11:44 Florian: In these cases glyph can go beyond ascent and descent 08:11:53 Florian: Are these font metrics reliable 08:11:57 myles: Let's not discuss that 08:12:06 astearns: So........... 08:12:23 Florian: So spec says "line height number is like a numbe,r you just get to pick the number". This is not true 08:12:39 koji: Says use value that's appropriate to the font 08:12:48 koji: ... 08:12:55 koji: Second sentence is very questionable 08:13:05 dbaron: The sentences might ahve been written 10 years apart, as we edited CSS2 08:13:15 koji: “font of the element” is not defined 08:13:24 koji: earlier paragraph says UA may take all the fonts 08:13:27 used in the element 08:13:40 koji: this sentence doesn't make sense to me (second sentence) 08:13:44 koji: so I ignored it 08:13:48 koji: you read second sentence 08:13:59 myles: Should be fonts, not font, of the element 08:14:05 Florian: That's an improvement, but still undefined 08:14:12 Indeed this has felt underspecified to me too 08:14:12 Florian: Based on it, but based how? 08:14:18 astearns: Vague is better than wrong 08:14:22 astearns: let's resolve to remove wrong parts 08:14:28 Florian quotes spec 08:15:08 discussion of prose 08:15:10 Spec is all wrong 08:15:13 murakami has joined #css 08:15:16 Need to replace the entire definition 08:16:06 alan asks where new prose goes 08:16:15 fantasai: Errata CSS2, define in css-inline-3 08:16:47 myles: The reason we're discussing all of these computations is because if they were to differ you might get double spacing with line-height-step 08:17:01 myles: Because font metrics differ between browsers *and* platforms, will still get differences 08:17:21 Florian: Because we don't have a foundational model from which to discuss issues 08:17:38 koji: Changing defintion for non-normal case is easier.. doesn't chnage layout 08:17:45 koji: Just changes glyph position within the line 08:17:52 koji: but if we change definition of normal, might break lots of sites 08:18:08 astearns: Well, we need to change the definition in the spec in any case, because it's not matching what browsers do 08:18:32 astearns: So proposed resolution is to remove wrong definition of normal, and replace with more accurate definition 08:18:41 fantasai: Will need to be vague 08:18:53 astearns: Any objection to a vague but not wrong defintion of 'line-height: normal'? 08:19:12 RESOLVED: Replace definition of 'line-height: normal' with vaguer definition. 08:19:41 dbaron: Basically need to say that 'normal' does something based on the font that overrides algorithm for number 08:19:57 myles: Say all the fonts may be consulted, and line gap of all the fonts may be consulted 08:20:11 ACTION fantasai: make wording 08:20:12 Created ACTION-849 - Make wording [on Elika Etemad - due 2017-04-28]. 08:21:02 Florian: Previous resolution, koji said it's not what they do 08:21:16 dbaron: Matches Safari, not blink or gecko 08:21:50 dbaron: Makes rhythm better wrt what spec previously said, but worse wrt blink/gecko 08:22:02 dbaron: Also only helps if you have no elements 08:22:31 discussion of what's better than what 08:22:41 dbaron: It could lead to glyph box overlap where there wasn't before 08:22:52 dbaron: You could end up now with negative half-leading 08:23:03 dbaron: Because before leading would definitely be positive 08:23:18 astearns: My understanding was that we were going to size on the content box 08:23:25 dbaron: content-box is should, not definite 08:23:33 astearns: need to discuss content box... 08:23:40 astearns: Does that affect the previous resolution? 08:24:46 dbaron: Other factor with content box 08:24:54 dbaron: tend not to have padding and border, but backgrounds is common 08:25:06 dbaron: Whether to include fallbak glyphs in content box... 08:25:17 dbaron: Do you want fallback glyphs to potentially overflow content box? 08:25:30 dbaron: Or do we want to make sure content boxes are consistent across multiple elements? 08:25:58 koji: I would really want to make heights of lines consistent. Don't care so much about positioning within the line 08:26:38 Florian: If we don't do the resolution we've just taken, the line height may be bigger than the one you asked for. With this resoution, if you say line-height: 20x, you always get 20px 08:26:49 koji doesn't believe this, so Florian is trying to explain it again 08:28:28 ... 08:30:13 There is an inevitable design tension between "do exactly what I said" and maintaining a strict rhythm, and avoiding overlapping pixels / text. Not sure how that tension can be resolved in a predictable way. Especially with cross-platform/browser font differences, font substitutions etc. 08:30:47 I don't have a specific suggestion, but I'm curious what methodology the group uses to try to resolve this tension. 08:31:54 tantek, in general we tend to go with "make it readable" over "make it pretty" 08:32:47 There are several diagrams on the board now 08:32:55 fantasai, I agree with that. I'm more wondering about the "[ CSS is Awe ] some" type problems 08:33:12 Blue one represents "use the primary font for size and position" 08:33:28 Black one is "apply leading to each glyph and take union of all" 08:33:40 Red one is "union glyph boxes and apply leading (could be negative)" 08:34:13 dbaron: Red and blue will both give consistent line sizes, but blue will give consistency even when you have s 08:34:17 fantasai, cool re: diagrams. I'll check the archives later for that. Thanks and good luck! 08:34:56 In blue and Red cases, could get overflow... 08:35:23 in blue case the overflow is all wrt primary font. Red case clips a bit from tallest and lowest bits of the combination 08:36:10 Florian summarizes and asks Rossen, who suspects they don't ignore fallback so probably black or red 08:36:25 dbaron notes this is for non-normal values 08:36:47 astearns: We should have description in CSS2.1 with what browsers do, so we're actually describing reality 08:37:40 ACTION Rossen Verify what is done by each browser (by checking Edge and putting on WG to-do list for everyone else) 08:37:40 Created ACTION-850 - Verify what is done by each browser (by checking edge and putting on wg to-do list for everyone else) [on Rossen Atanassov - due 2017-04-28]. 08:38:16 astearns: Anything else? 08:38:18 Meeting closed. 08:38:58 topic: no topic 08:42:20 Link to the diagram on the white board: https://lists.w3.org/Archives/Public/www-archive/2017Apr/0008.html 08:43:21 kamata has left #css 08:53:09 kaz has joined #css 08:55:06 Zakim has left #css 09:00:59 bobbytung has joined #css 09:02:43 Trackbot, end meeting 09:02:43 Zakim, list attendees 09:02:51 RRSAgent, please draft minutes 09:02:51 I have made the request to generate http://www.w3.org/2017/04/21-css-minutes.html trackbot 09:02:52 RRSAgent, bye 09:02:52 I see 2 open action items saved in http://www.w3.org/2017/04/20-css-actions.rdf : 09:02:52 ACTION: Florian to talk with gregwhitworth & fremy about how this interacts with table spec. [1] 09:02:52 recorded in http://www.w3.org/2017/04/20-css-irc#T00-27-32 09:02:52 ACTION: fantasai to make wording [2] 09:02:52 recorded in http://www.w3.org/2017/04/21-css-irc#T08-20-11