- From: Dael Jackson <daelcss@gmail.com>
- Date: Wed, 7 Feb 2018 21:26:24 -0500
- To: www-style@w3.org
========================================= These are the official CSSWG minutes. Unless you're correcting the minutes, Please respond by starting a new thread with an appropriate subject line. ========================================= Typed OM -------- - RESOLVED: typed OM values are wrapped in calc and then serialized as normal calc rules apply in invalid cases (Houdini issue #574) - RESOLVED: Attempting to set any 3d attribute on a 2d transform will throw. (Houdini issue #610) Transforms ---------- - RESOLVED: In the 2d case a single value is in both x and y and in 3d the z is always 1 (option b) (Issue #2109) - RESOLVED: No change for issue #2126 with clarification notes from the issue - RESOLVED: Grammar is rotate: none | [ x | y | z | <number>{3} ]? && <angle> (Issue #2130) - RESOLVED: Specifying just an angle gives 2d, specifying any axis gives 3d (Issue #2130) - RESOLVED: % values of translate are serialized as percent for computed values. Add note making the behavior explicit (Issue #2124) ===== FULL MINUTES BELOW ====== Agenda: https://lists.w3.org/Archives/Public/www-style/2018Feb/0006.html Present: Rossen Atanassov Tab Atkins Amelia Bellamy-Royds Brian Birtles Alex Critchfield Elika Etemad Simon Fraser Dael Jackson Peter Linss Myles Maxfield Lian Quin Naina Raisinghani Melanie Richards Florian Rivoal Darren Shen Eric Willigers Regrets: Angelo Cano Tantek Çelik Chris Lilley Manuel Rego Scribe: dael Announcements/Agenda ==================== Rossen: It's a couple minutes past. Let's get started. Rossen: As usual, I wanted to call for any additional items or things people want to change about the agenda. fantasai: I have an announcement. W3C and Jefferson University Interaction Department are collaborating on a redesign of our templates. fantasai: Students are doing it as a semester long project and they're starting a blog where they're asking for feedback. fantasai: We should help them along and try and get them feedback early to help them. fantasai: Goal is to make a prototype by May and then work toward a deployment later. <fantasai> https://sites.philau.edu/dillardl/ fantasai: Here's the website link ^ fantasai: W3C will send an announcement soon. Rossen: That is cool. Thank you. <fantasai> Project scope / requirements at https://www.w3.org/wiki/SpecProd/Restyle Rossen: Anything else? Rossen: I have a quick one. Rossen: It is to draw your attention to the email from Vlad about the hotel in Berlin. They have a fairly reasonable rate. If you were considering staying there you might want to book now. Rossen: Details are in a member list email Typed OM ======== What does lack of range restriction imply about serialization? -------------------------------------------------------------- github: https://github.com/w3c/css-houdini-drafts/issues/574 TabAtkins: dbaron raised an issue we hadn't thought of. Typed OM allows certain values to enter abstract CSS value space. Specifically things that are invalid based on grammar. Like a width can't be negative value. It's rejected at parse time. TabAtkins: In Typed OM we say you can construct a numeric value that's negative and assign it to width and that's not invalid. That has implications on how to serialize based on old string based. getComputedStyle.width() what do you get? TabAtkins: I believe this is an issue for cssom to define, though typed om caused it. dbaron: It's more relevant to other serialization. Of specified style not computed. TabAtkins: Yeah. TabAtkins: So if you set attribute style map width to negative and ask for .style.width what do you get? TabAtkins: I am weakly of the opinion we should serialize as calc, but I don't have a strong opinion and can go with easiest for impl. xidorn: Can we do something like if we assign we wrap in a calc directly? TabAtkins: Very possible. You're saying we turn it into a calc in css value space immediately so when you read it back out you'd get a calc or a CSSMathSum with a -5px. Right? xidorn: Yeah. TabAtkins: That would also be fine with me. Rossen: In your current impl do you do anything at all? In your current version you'll serialize negative? TabAtkins: I have no idea. Rossen: I know you guys are ahead of impl. TabAtkins: But not publicly available. I think we do -5px and it's invalid but we're not attached to that. Rossen: I was just wondering if someone did something close to what xidorn suggested. shend: I'm doing Blink and I think currently we might reject the value, but I'm not sure. We have to check. <TabAtkins> (That's Darren Shen, our Typed Om implementor.) TabAtkins: That's violating another part of the spec that's more explicit. Rossen: Sounds like options are we wrap values in calc if they're not already a calc and let calc work as does today. Rossen: That sounds good to me. Doesn't require much custom code to handle this and it will be fairly easy to understand and teach to anyone that's used calc. I'd be good with that one. TabAtkins: sgtm Rossen: dbaron what do you think? dbaron: I'm fine with it. Is the plan to do what xidorn described? Rossen: Yeah. TabAtkins: Alternate the notion that when you pull it out if it's invalid at that point. it gets calc wrapped at that point. dbaron: xidorn's eager thing sounds easier. Might be worth a note asking for impl feedback. TabAtkins: Sure. Rossen: Seems like we're leaning toward spec as xidorn proposed wrapping a calc. Rossen: Other options or objections? RESOLVED: typed OM values are wrapped in calc and then serialized as normal calc rules apply in invalid cases Does the is2D design allow for inconsistent interpretation of CSSTransformComponents? ------------------------------------------------------------- github: https://github.com/w3c/css-houdini-drafts/issues/610 TabAtkins: The issue is that there's a lot of different ways we could represent 2d vs 3d split in transform functions. We settled on all are combined to a single form so expose the same api. TabAtkins: There additionally is a 2d boolean flag. It's set true or false and set via constructor but you can set yourself. TabAtkins: dbaron's complaint is you can still set the z value to something. If the 2d is set it'll serialize and the z axis does nothing. It seems weird, but we decided that's the way to do it. TabAtkins: Alternately we could blank out the values in 3d when you set the bool to true and fill them with null-ish things. <AmeliaBR> +1 for making is2D = true make the z/w columns and rows force to the identity matrix values TabAtkins: More extreme is to split into 2 interfaces, but we didn't want that because you can't write generic transform code. TabAtkins: Question is, is the current design choice where z value is ignored but can be set fine or should we go for a different design where we replace z with a null and ignore sets. dbaron: I'd add one options is ignore set and the other is throw. TabAtkins: Yes, sure. I had put them together because they're similar in my mind. Rossen: Is there impl experience in this area? shend: Yes. Rossen: Other opinions on this? <AmeliaBR> +1 specifically for the ignore option; consistent with how bad values are treated in most of the rest of CSS dbaron: I don't know if my opinion was clear, but I'm not happy with what's in the spec. I prefer ignore or throw with a slight preference for throw. I think AmeliaBR said on IRC she prefers ignore. dbaron: I think throw because it's a bit more like if you have an object that's just the 2d thing, but really you'd set an expando property so maybe ignore is the right analog. TabAtkins: I wouldn't treat js syntax as being necessarily informative here. We throw eagerly in other places in the OM when something is wrong. Rossen: I think throwing would be a little easier to surface up to devs and tools. It would give a little more ability for those trying to use typed OM to fix their code. So I think I'm with dbaron to prefer throwing or at least throw by spec it throws. If it's a pain point we can fall back to ignore. TabAtkins: I'm fine with that. smfr: Would you throw when you assign any values to z or any that makes it 3d? TabAtkins: Any value because any value makes it 3d when it's 3d. A 0 value in 3d doesn't make it not 3d. smfr: So the 2d rep it will serialize as 2d transform. TabAtkins: Yes. smfr: I could go throw or ignore. TabAtkins: I'm fine with throw. Rossen: Objections on throwing in cases when z index is spec on 2d transforms? TabAtkins: When you try and set any 3d related attribute of a transform set in 2d. smfr: Will you annotate 3d attr somehow? TabAtkins: Yes. TabAtkins: I'll have explicit setters for those attributes. RESOLVED: Attempting to set any 3d attribute on a 2d transform will throw. CSS Transforms ============== `scale` property behavior differs from `scale()` function --------------------------------------------------------- github: https://github.com/w3c/csswg-drafts/issues/2109 birtles: The summary is that the scale property takes 1 2 or 3 numbers. Question is what it should do when you spec 1 number. We have 4 possibilities. <TabAtkins> scale:2, what does it expand to? <TabAtkins> (a) scale: 2 1 1; <TabAtkins> (b) scale: 2 2 1 <TabAtkins> (c) scale: 2 2 2; <TabAtkins> (d) scale: 2 2, but add scale-3d:2 that expands into scale-3d:2 2 2; birtles: One is the remaining numbers become 1. That's current spec. Very simple from syntax and consistent if doing 2d or 3d. birtles: Disadvantage is it's inconsistent with scale from transform property where if you only do 1 number scales in x or y and it's quite unintuitive. birtles: 2nd is to make the second value match the first and last value be 1 so you don't scale in z. More complex for syntax and inconsistent between 2d and 3d. birtles: But I think it's intuitive in 2d case which is most common. birtles: 3rd which we dismissed is make all numbers the same so scale: 2 is scaling in x, y, and z birtles: 4th is to make scale property only take 2 values and possible introduce a scale 3d property. birtles: I lean options 2 but 4 might be interesting. Rossen: Can you expand on why #3 was ruled out? What was it introducing in 3d. If you set scale in a single value that's in all 3 dimensions. birtles: In most impl as soon as there's a 3d component it makes it an active layer. Changeable, but non-trivial. TabAtkins: Other 2 transform properties follow principle that if you spec less you get 2d and more you get 3d. Would be confusing if scale worked differently. dbaron: What about option of disallowing a single but allowing 2 or 3 values and determining 2d and 3d based on number of values. TabAtkins: Reasonable option. birtles: Reasonable but a little less then intuitive but also not consistent with scale function so authors may assume it will work. fremy: When we started implementing in edge I found it confusing that when you spec 1 value it only scales in 1 direction. Seems reasonable to scale in 2 directions when specify one value. I'm not sure why we care about 3d for these individual transforms. I'm at a loss why we'd do 3d for these. Anyone doing 3d will use transform not scale. fremy: I'm in favor of matching scale. TabAtkins: I strongly disagree where order is very important in 2d as well as 3d. So you have to think about order no matter what. 3d version is no less...the order is no less max intuitive for 3d. It's still roughly the thing you want to do if you're using them separate. TabAtkins: It makes just as much sense in 2d or 3d and order matters just as much so no reason to shut off 3d. eric: I'm in favor of birtles suggestion. * TabAtkins is really liking either (b) or David's option to make it more explicit. * smfr votes for (b) * liam +1 to (b) AmeliaBR: I agree with TabAtkins that we shouldn't turn off 3d. Anyone working in 3d is working in all 3 values and if you want to scale in 3 directions you have to say so explicitly. Doesn't seem like a pain-point. Default should be simpler 2d where scale: 2 means scale in both 2d directions <alex_antennahouse> +1 (b) smfr: Can we resolve on b? anyone not like b? Rossen: B is in the 2d case a single value is in both x and y and in 3d the z is always 1. Correct? smfr: Yes. Rossen: Any objections or opinions again? RESOLVED: In the 2d case a single value is in both x and y and in 3d the z is always 1 (option b) Please remove from drafts: scale, translate, rotate CSS style etc. ------------------------------------------------------------------ github: https://github.com/w3c/csswg-drafts/issues/2126 ericwilligers: They are valuable. They have the full motion path and can be independently animated. ericwilligers: I think libraries will find it useful. TabAtkins: They also let us capture the generally most intuitive ordering without making authors remember it. translate then scale then rotate AmeliaBR: They're useful for [missed] AmeliaBR: They're useful for animations, you can animate one factor. And they're useful for different transformations assigned with different classes or pseudo classes. <TabAtkins> +1 to all that AmeliaBR is saying. ericwilligers: There's an issue about preserve 3d from fremy but I think that's a different issue. fremy: Feel free to disregard mine. ericwilligers: Can we resolve to keep properties? Rossen: fremy you said you have your point in the issue...disregard it? Is that what you wanted? fremy: I agree it's a different issue and shouldn't be in that topic. <birtles> The very popular GreenSock Animation (GSAP) also takes this approach of a fixed order of transform components and promotes it as one of its key usability benefits over CSS ( although it further breaks these components into x/y/z too) smfr: I don't think anybody on this call agrees with the issue. I think we're all okay with separate properties. <fantasai> +1 to smfr AmeliaBR: I did have a couple comments in there suggesting clarifications in the spec. Rossen: Does anyone support the issue to remove? Rossen: Objections to resolve no change? fantasai: No change add clarifying notes. Rossen: Are the notes in the issue? fantasai: Yes. Rossen: Objections to no change with clarification notes from the issue? RESOLVED: No change with clarification notes from the issue Named rotation axis ------------------- github: https://github.com/w3c/csswg-drafts/issues/2130 ericwilligers: Current spec and suggestions: <ericwilligers> Current spec: rotate: none | <number>{3}? <angle> <ericwilligers> Suggestion by Amelia: rotate: none | [ 2d | x | y | z | <number>{3} ]? && <angle> <ericwilligers> Suggestion by Eric in #1269: none | <angle> && [ axis(<number>{3}) ]? AmeliaBR: For most people the vector notation is more complicated and all the shorthands have rotate-x,y,z. We do have discussion in the issue my suggested keyword of 2d doesn't parse as a keyword which is an issue. AmeliaBR: Reason we have a separate keyword is we need to distinguish between 2d and 3d transforms around z axis which is simple math, but different in impl ericwilligers: The difference could be if you spec the axes. AmeliaBR: Yeah, that was one suggestion. We don't worry about a keyword for 2d and if you don't spec axis it's 2d. <fantasai> +1 to Amelia's suggestion TabAtkins: I hadn't thought about the rotate functions having rotateX,rotateY,rotateZ and I support allowing you to set those instead of remembering the correct set up. <TabAtkins> rotate: <angle> && [ x | y | z | <number>{3} ]? AmeliaBR: Question is if we have those keywords is the unwrapped 3 numbers still acceptable or do people like function notation? fantasai: I'm opposed to function since we haven't used it in similar situations like backgrounds. If we want longhands at some point that makes it more difficult. Syntax as is is fine. I don't know why people would want angle in the middle. TabAtkins: And rotate 3d takes an angle and 3 numbers so it's the same syntax. Rossen: We have a couple of people opposed to functional notation. Rossen: Does that mean we want to go with first proposal? <ericwilligers> rotate: none | <angle> && [ x | y | z | <number>{3} ]? <AmeliaBR> rotate: none | [ x | y | z | <number>{3} ]? && <angle> ericwilligers: You can use x y z, have 3 numbers, or leave them out. And angle before or after axes. TabAtkins: Yeah. I'm not sure why grammar has 3 numbers before, but that was probably an accident. smfr: Are unitless 0s allowed for the angle? ericwilligers: Not allowed. TabAtkins: Right. They're legacy feature you have to opt into and we don't allow in new. AmeliaBR: Final question. Even though we're allowing both to spec in either order, do we want to stick with angle and then axis to match transform? dbaron: I think in rotate 3d the angle is at end. TabAtkins: Oh. I think the order in the grammar matches order serialized so we should have axis first to match rotate 3d. Rossen: Current proposal is match rotate 3d syntax? <AmeliaBR> https://drafts.csswg.org/css-transforms-2/#funcdef-rotate3d TabAtkins: No. We should have the axis come first. AmeliaBR: It's this one rotate: none | [ x | y | z | <number>{3} ]? && <angle> AmeliaBR: ... for the serialization order Rossen: Any objections? * fantasai is confused Rossen: fantasai you're confused. fantasai: We're deciding to not match transform ordering? TabAtkins: The rotate3d() takes axis first. fantasai: Okay, sure. As long as trying to match. <ericwilligers> We can close https://github.com/w3c/csswg-drafts/issues/1269 ericwilligers: I think we can also close this issue ^ RESOLVED: Grammar is rotate: none | [ x | y | z | <number>{3} ]? && <angle> smfr: Which combo of axis numbers trigger 3d behavior? TabAtkins: All AmeliaBR: Any axis triggers 3d smfr: Okay. TabAtkins: If you do just an angle it's 2d. smfr: That's fine as long as it's in the spec. RESOLVED: Specifying just an angle gives 2d, specifying any axis gives 3d Serialization of the computed value of `translate` property ----------------------------------------------------------- github: https://github.com/w3c/csswg-drafts/issues/2124 TabAtkins: It's if translate 50% serialized to pixel or percent. It depends on layout information. Has to stay as a percent right? AmeliaBR: Because percentages are resolved against transform box which are usually width and height of css box and is more complex for svg Rossen: I'm in favor to keep them as percent so we don't rely on layout. TabAtkins: And this is by default in the spec [reads] Rossen: So it's editorial making it explicit? TabAtkins: At best we could match what translate function says. No need to do anything different. AmeliaBR: It's for impl ericwilligers: Perhaps it was Blink making it absolute for lack of works? birtles: The FF impl wanted to align with chromium but I said spec said % so I wanted to clarify. ericwilligers: I think we'd got a wpt that says % so we have to fix blink and edge. Rossen: % is easier, less work. I'm willing to make that change. Rossen: Is blink okay? smfr: Yeah. Rossen: Webkit? ericwilligers: I don't think they impl the property. Rossen: Objections? RESOLVED: % values of translate are serialized as percent for computed values. Add note making the behavior explicit. Media Queries ============= Rossen: 2 minutes left. Anyone in APAC hae something that fits in 2 minutes? Rossen: Can we talk about MQ? How do media queries with calc() where it can be resolved early serialize? --------------------------------------------------------------- github: https://github.com/w3c/csswg-drafts/issues/1968 florian: Had a resolution a while back. Turns out impl of MQ do remove the calc when possible. Conflict between what we said and what we're actually doing. florian: No opinion on how we could and how we're doing it, there's a mismatch, though. Rossen: Is this a case of implementations catching up? florian: I don't think so. It was not considering enough details when we resolved. We may want to maintain resolution but that's more changes. Maybe some people realized all the changes, but some were caught off guard. Rossen: People are starting to fall off, so let's push to next week. It's on people's radar. Rossen: If you want to book F2F hotel do so. Thank you all for calling in we'll talk next Wednesday at usual time.
Received on Thursday, 8 February 2018 02:27:19 UTC