- From: Dael Jackson <daelcss@gmail.com>
- Date: Sun, 10 Sep 2023 11:49:56 -0400
- 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.
=========================================
CSS Transforms
--------------
- The WG discussed adding longhands for the translate -x -y -z,
rotate -angle -axis, scale -x -y -z properties, and was in favor
theoretically, but since these would add complexity to
a performance-sensitive feature and the use cases presented so far
were not very strong, the WG resolved not to add them (for now).
(Issue #7646: Syntax of individual transforms should reflect
general CSS syntax)
CSS Text
--------
- RESOLVED: Accept proposal (Issue #8972: Reconsider atomic inlines
overriding GL/WJ classes)
- RESOLVED: Add a control that is either a property or a value that
causes UAs to make the last line longer than it would've
originally done unless that was a bad idea (Issue #3473:
Preventing too-short final lines of blocks (Last Line
Minimum Length))
CSS Syntax
----------
- RESOLVED: Accept parsing behavior change as described in issue
(Issue #8834: Review requested of new Parsing text)
- RESOLVED: Republish CSS Syntax as CRD
Overflow & Contain
------------------
- The issue in #9003 (Setting containment on root should not make
scrolling impossible) does need to be addressed, but the group
needs to think more about expected behaviors before resolving.
===== FULL MEETING MINUTES ======
Agenda: https://github.com/w3c/csswg-drafts/projects/38
Scribe: florian
CSS Transforms
==============
Syntax of individual transforms should reflect general CSS syntax
-----------------------------------------------------------------
github: https://github.com/w3c/csswg-drafts/issues/7646
bramus: Individual transforms property now exist, and help author
with control over their animations
bramus: Now people want more granularity, like translate-x, -y, etc
TabAtkins: I'm fine with that
TabAtkins: The other part was the logical transforms
(translate-inline, etc)
TabAtkins: that I'm against, because we don't have logical
transforms, and thus nothing to map them too cleanly
bramus: that's ok
fantasai: Do we want to just add those?
TabAtkins: Not part of this issue
SebastianZ: How about scale-x, scale-y, and the same for rotate
TabAtkins: They were deliberately omitted from the transform
properties, because there's no obvious correct order
TabAtkins: Sorry, skew was omitted
flackr: Does rotate have a long hand?
TabAtkins: You'd have rotate-axis and rotate-angle
flackr: When you create an animation with these now separate props,
it might be surprising to authors:
flackr: if they set translate-x in the first and last keyframe, and
-y in the middle, they'd only get the transition on the -
TabAtkins: That seems fine
fantasai: If you want the other behavior, then just put the necessary
properties in the relevant keyframes
flackr: Seems fine, never mind
bramus: The current standalone properties have enabled that, so it
would be the same
TabAtkins: Animating on the separate properties and the joint ones
give different results
astearns: Proposal: translate, rotate and scale have long hands
TabAtkins: translate -x and -y, rotate -angle -axis, scale -x -y -z
<TabAtkins> (and translate-z)
flackr: Is it well defined how we interpolate from one rotation angle
to another?
TabAtkins: I forget what the answer is, but yes, it's in the spec
SebastianZ: Why rotate-angle and rotate-axis when we have rotate-x,
rotate-y and rotate-z as functions
TabAtkins: There are multiple results depending on the order when you
combine them, so it'd be ambiguous
TabAtkins: So if you do want to do independent rotations, use
'transform'
RESOLVED: Add the longhands to these properties as discussed above
fantasai: Should we take up this comment as its own issue
https://github.com/w3c/csswg-drafts/issues/7646#issuecomment-1545399874
which is filed at https://github.com/w3c/csswg-drafts/issues/1544
already
dbaron: I'm not sureā¦
dbaron: I am concerned about the complexity this adds. Need to think
about it.
astearns: How about you comment on the issue after reviewing that
fantasai: Wanted to comment the logical part of this problem
astearns: It is a separate issue, and the agenda is already too
crowded so no
CSS Text
========
Reconsider atomic inlines overriding GL/WJ classes
--------------------------------------------------
github: https://github.com/w3c/csswg-drafts/issues/8972
fantasai: We have a problem that line breaking around images is weird
fantasai: Web pages expect images to introduce a line breaking
opportunity
[fantasai summarizes the issue]
fantasai: The proposal is that for Unicode characters with non
tailorable line breaking properties, other than NBSP,
should be honored and take precedence
florian: +1
iank: Not too familiar with the implementation details, will sync
with Koji before a definite answer
iank: seems ok
fantasai: Main concern is probably not implementation complexity, but
web compat, but it seems ok here
iank: Is there any complexity with reordering controls
fantasai: There's only a handful of characters
fantasai: should not have any effect on bidi
iank: Seems fine, just want to check with Koji
Rossen: can we resolve on it, and you bring it back if there's
an issue
hober: Similar to Ian, I want to talk internally, like with the books
people
hober: can bring it back later if we have additional feedback
RESOLVED: Accept proposal
CSS Transforms
==============
Syntax of individual transforms should reflect general CSS syntax
-----------------------------------------------------------------
github: https://github.com/w3c/csswg-drafts/issues/7646
dbaron: I don't see a whole lot in terms of usecases
dbaron: It seems we want to do this for completeness and consistency
dbaron: but the cost seems high
dbaron: because you need to support animating them on separate
timelines
dbaron: not theoretically hard, but adds complexity to a performance
sensitive path
dbaron: would be ok given strong use cases, but otherwise, the cost
might be too much
TabAtkins: We'd go from 3 properties to 7
hober: I share dbaron's concern, but would defer to Simon if he has
an opinion
dbaron: Not absolutely opposed to doing this, but want a stronger
justification than has been given so far, given the cost
bramus: I remember requests, but not what the motivating use case was.
Rossen: The proposal is to revert the previous resolution
RESOLVED: Undo previous resolution, do not add the longhands to the
rotate, translate, and scale properties
CSS Syntax
==========
scribe: fantasai
scribe's scribe: emilio
Review requested of new Parsing text
------------------------------------
github: https://github.com/w3c/csswg-drafts/issues/8834
TabAtkins: As part of refactoring for nesting, I realized that there
is some common structures we could use to make more sense
TabAtkins: This results into 1 non-editorial change
TabAtkins: Rules that previously only contained rules, like @media,
previously used an algorithm that only cared about rules,
not declarations
TabAtkins: now that they do care about declarations, at least in
nested form -- ideally top-level form parses the same way
-- and that causes an error-recovery change
TabAtkins: specifically ...
<TabAtkins> @media { garbage; bar {...} }
TabAtkins: this ^ previously would have resulted in a single rule,
"garbage; bar { ... }"
TabAtkins: now it results in two statements, a "garbage;" statement
and a "bar { ... }" statement
TabAtkins: only affects when there's a semicolon
TabAtkins: but changes parsing on existing stylesheets
TabAtkins: Question is if that's OK
florian: So you say previously we wouldn't discard "garbage;" and
keep "bar { ... }"
florian: that seems better, but is it Web-compatible?
TabAtkins: Suspect so, since only small cases
florian: Doesn't seem unlikely people will put in a media query and
forgot selector and then add full rules with a selector
later, and the garbage which used to gobble up next rule and
thereby disabled it
florian: no longer disables it
florian: seems plausible that it could be written by accident
florian: Let's try, but it would be possible it causes problems
emilio: Fact that nested and unnested parse differently seems super
weird, so +1 to try fixing this
emilio: I *think* that's how I implemented in Firefox, but might have
been conservative when implementing, don't remember
Rossen: Hearing support, any reasons to not resolve?
RESOLVED: Accept parsing behavior change as described in issue
TabAtkins: Can I republish Syntax?
TabAtkins: All the changes should be captured in Changes list; will
double-check before publishing
TabAtkins: still need to do review of tests that might need changing,
but that's separate
Rossen: Any objections to new CR?
RESOLVED: Republish CSS Syntax as CRD
Overflow & Contain
==================
Setting containment on root should not make scrolling impossible
----------------------------------------------------------------
github: https://github.com/w3c/csswg-drafts/issues/9003
miriam: Decided with container queries not to have container on root
miriam: but said authors should be able to set root as container, and
be able to query it similar to media queries with some
advantages of it being an element
miriam: but it doesn't quite work
miriam: because if you set size/layout containment on root element
miriam: the overflow property propagates to the viewport, but size/
layout containment causes the root to not have any scrollable
overflow
miriam: So we need to either say, when you set containment on root,
the overflow property doesn't propagate to root and get
scrollbars
miriam: or we propagate containment to the viewport
miriam: Not sure if that means anything other than "it doesn't apply
to the root"
florian: I believe the first one has a well-defined behavior that's
useful
florian: One thing that makes it ok is that when we no longer
propagate to viewport, the the viewport gets default value
of 'overflow' which resolves to auto on the viewport
florian: therefore if the root itself would overflow the viewport,
you get scrollbars to see all of it. It might be odd, but
you can access all the content
fantasai: I think that having the containment and overflow apply to
the root element would be pretty terrible
fantasai: because if you do size/layout containment you get 0-height
and no overflow
fantasai: if you also have paint containment you also clip
fantasai: if you compensate by making the root element larger
fantasai: then you have a scrollbar which is inside the border edge
of the root element rather than attached to the viewport
fantasai: which is also not great
fantasai: I think the first option is terrible and we should
propagate containment to the viewport
miriam: You would likely uses 100% rather than 100 vh
miriam: but it's only minimally better
miriam: I agree that the other is nicer for authors
Rossen: Would that be compatible? then percentages on body would
resolve (which wouldn't previously)
iank: Containment on root is probably pretty rare in the web
iank: remind me the syntax?
emilio: What's the difference between propagating containment to the
viewport rather than just not applying containment to the
root?
miriam: It establishes a container for querying.
miriam: @container [...]
emilio: so the size of the root...
emilio: what you want isn't the root element box size, it's the
viewport?
miriam: I was assuming you'd get the root size, but in general what
the author would do is size the root to 100% so they can get
the viewport size
miriam: The difference between that and media query is that you can
use actual font sizes (for font units)
miriam: other than that you want a container that's a fallback for
everything for the page
emilio: Isn't the fallback already the root?
miriam: No, there is no default
miriam: We intentionally didn't, because there are cases where it
would be surprising if you didn't expect it
florian: So, size containment doesn't mean size to zero. It means
size as empty
florian: Most typically case is querying width, so empty isn't zero
florian: it would work better than viewport, because if there are
margins etc, then you are considering those
florian: in the block axis, yes, you would size the root to zero
florian: but is it that bad?
florian: I'm not sure the scenario is that bad as imagined
emilio: Fallback is for container units but not container queries?
emilio: that's a bit weird
miriam: Yes
emilio: Ignoring containment on root to make this work seems sketchy
emilio: I am a bit torn
dbaron: I'm struggling at this point to understand the ways in which
ignoring containment on the root and propagating to the
viewport different
dbaron: (other than for container establishing effects)
dbaron: though I guess they differ because of the size of the root,
but unsure what that means for effect on developers
emilio: Is alternative to this to provide an opt-in to fall back to
viewport somehow?
emilio: If we didn't do the fallback because we think it's
confusing.. then what makes it not confusing would be having
an opt in
iank: It's confusing if you're writing these rules and you don't
expect it to resolve yet because you haven't specified a
container, and then it suddenly resolves
miriam: If you're mainly using CQ on small things, and end up not
being in a small thing and get a very large result
miriam: can be confusing
miriam: but in other cases want the nearest container, and in that
case want the fallback
miriam: if you added containment on root, you can add a name so that
you can reference it
miriam: if you're in control you can handle both use cases, if not
can only handle one
[fantasai gets tapped to speak]
fantasai: Don't know what to say
florian: Put you on the queue about the scenario you were concerned
about
florian: not sure what happens
fantasai: Containment works in both axes right?
florian: Not necessarily, if you only do it on one axis doesn't
collapse to zero
florian: in the block direction if you set it to a 100% shouldn't it
be fine
florian: If we propagated neither overflow nor containment, shouldn't
it work?
florian: You'd set the block size to 100%
fantasai: If the content needs to scroll you wouldn't be using the
viewport scroller but an internal scroller
fantasai: Is it the same?
emilio: It's not the same. There are UA features that only work on
the root scroller, like marking find-inpage things, etc.
smfr: Another difference is background-attachment fixed is optimized
for root scrolling
Rossen: Let's take the issue back to GH and talk about it there, once
we have a path for resolution we can bring it back
<miriam> hopefully we can get some good conversation and a resolution
soon - because the longer we wait, the more likely we
develop compat issues
CSS Text
========
Preventing too-short final lines of blocks (Last Line Minimum Length)
---------------------------------------------------------------------
github: https://github.com/w3c/csswg-drafts/issues/3473
myles: This is a small issue ....
myles: We have had many requests throughout the years where
typographers and designers have come to us and show us a
paragraph on the web page
myles: they'll point to last line and say, 'this last line is tooooo
narrow'
myles: This has a name, it's called orphans and widows
myles: also term has two meanings
myles: CSS has support for the other meaning (pagination)
myles: but for this one, doesn't
myles: This is one of our highest requested text-related features
myles: so it would be cool if CSS could solve
myles: Problem here is that last line is too narrow, so get wide
paragraph and maybe one word on last line. Looks bad
myles: More nuance, but what I will say is, I think there's two
potential solutions
myles: one is a new property, and one is a change to value space of
`text-wrap: pretty`
myles: so could invent a new property or add a thing that when you do
pretty, try to focus on the last line
florian: text-wrap: pretty solves this and more, and is expensive
florian: and that's important
florian: If it wasn't expensive, just using pretty would be fine
florian: there are terrible solutions to this problem
florian: If you implement one that is "good enough"
florian: is there enough perf difference with pretty that it's worth
a separate control
hober: Very significant perf difference
myles: Naive implementation of pretty is exponentially bad perf
myles: whereas an algorithm that just focuses on this problem would
be at worst linear, but almost constant time
iank: Yes, expensive, but we might have different perspectives on how
expensive we're willing to tolerate for pretty
iank: lot of nuance there, let's not get into it now
iank: From our perspective, if there is a control, it would be nice
if it could also control pretty
iank: fundamentally, pretty does have a lot of knobs like "how much
to bias for x consideration"
myles: If independent control for last line and pretty, browser could
see and modify pretty to focus on last line
iank: Potentially
myles: That sounds great
nicole: I wanted to ask, how many lines would be impacted by that
myles: I think we're flexible here, not super clear what the spec
should say
myles: if we were to implement this, first version would start at 1
line and then iterate from there and see if need to increase
<astearns> -1 to only stealing words from one line
nicole: Similar to headline balancing?
iank: Not really
hober: Taking a first pass would only use one line, but I can imagine
empirically discovering that we can tolerate 3-4 and might
have a spec, but let's not prematurely decide
florian: Are you aiming for a yes/no property or are you thinking of
giving author control like at least 3em or at least 30%
myles: Flexible
myles: Firstly, we know using words is wrong
myles: not clear, in i18n context, what exactly a word is
myles: from implementation perspective, can make a boolean
myles: If authors need more control, can add
myles: When authors request this, they usually request a percentage
myles: e.g. at least 50%
iank: Is that what they actually want, or think that's the tool that
indesign provides...
myles: I don't know, but my proposal is a boolean switch
myles: and as implementations progress, we can see if that makes
sense or not
smfr: Should we just resolve on adding a property without specifying
if boolean or not?
astearns: For a property that does only this one thing
astearns: I would advocate strongly for just a boolean switch
astearns: Anything more finely grained is really going to have to be
weighed against other line-breaking considerations
astearns: and needs to modify results of pretty
astearns: If we're separating the two, then the simple thing, should
just be a boolean
florian: I think I support this because of the perf difference
florian: but even then it does feel like it's a variant of pretty,
you've decided what you care about
florian: so is it really separate from pretty?
* fremy wanted to say the same thing
fantasai: There are a lot of knobs that factor into pretty and a lot
of them are already separate knobs
fantasai: In level 4 or some other we had word-spacing and
letter-spacing give you the optimal value but we also allow
a range for the line-breaker to play with
fantasai: that's a factor into the line breaker
fantasai: same for hyphenation controls
fantasai: these are already split out into multiple controls
fantasai: Turning on pretty shouldn't need to re-declare your controls
fantasai: so should cascade separately
fantasai: I agree with myles, we should have this tweak
<florian> [Florian is convinced]
fantasai: I'd like something that can be applied to the single-page
HTML spec and not spin for 10 minutes
fantasai: I also agree with astearns that you have to look at more
than one line
fantasai: A boolean switch is fine but we should define this thinking
of extending it to percentages too
fantasai: If we spec it out we need to pick a name that's gonna work
for both
<myles> sooooo `minimum-last-line-length: normal | auto [maybe more
in the future]`
fremy: I have a similar thought, that just looking at one line
doesn't cut it
fremy: you will end up with a triangle. If you have only two lines
it's fine, if you have three, you'll have a long first line,
then a smaller second line, and even smaller third line. Very
strange
fremy: So in a way I'm struggling, if you have elements with more
than two line, oh an implementation can produce good results
without balancing lines from where it's stealing the words
fremy: I don't think I can see how to make it different from pretty
fremy: if you're doing that you're back with pretty
astearns: I am convinced that there is a faster linebreaking
algorithm that would only do this and not look at the full
"pretty" penalty values
astearns: it doesn't have to be as expensive as the full pretty
implementation to do just this one thing
iank: But you can bias the pretty implementation
<astearns> I absolutely agree that we should avoid introducing the
line wrap triangle shapes that fremy described
iank: One thing on controls, it's not clear how this control would
apply to `text-wrap: balance`
fantasai: It wouldn't
myles: `balance` will win. it handles last line by itself
iank: It feels to me that we have at least 3 line-wrapping
algorithms, might have others in the future
iank: This control wouldn't affect balance
fantasai: It also doesn't affect nowrap
iank: Sure
iank: I somewhat agree with fremy that you might be getting into
pretty territory
iank: I'm not convinced by the global control argument
hober: If setting balance means it doesn't apply, then you aren't
setting whatever this is
hober: you're not setting it if you're not setting `text-wrap:
balance`
<ntim> +1 to what hober said
nicole: Does anyone want orphans? is anyone like "I want to turn off
nice ending to my text"
astearns: Yes, because you will get faster text composition
florian: I suspect we all agree, but will say explicitly, when that
is turned on it is a request for the browser to *attempt* to
make the last line not terrible
florian: but if can only do this by making some other line terrible,
shouldn't do it
[agreed]
florian: Also agreeing with Tess that it's also a text wrap value
florian: and can have it as an additional keyword
myles: Requested resolution isn't any particular grammar
ntim: I want to echo what Tess said, it feels like text-wrap extension
fantasai: So all of this is why I did not want this in text-wrap
fantasai: whether and how you are wrapping should be separate
fantasai: because they needs to cascade separately
<florian> +1
fantasai: You want to set the controls in a single place in your
stylesheet
<astearns> and if we want this to be extensible as a text-wrap:
pretty control it needs to be separate
fantasai: This needs to be a separate thing and honestly I think
`pretty` should have as well
fantasai: I think this gets into how we're wrapping and that should
only set once
<fantasai> This is why I was against "text-wrap: pretty" as a syntax
in the first place
Rossen: Let's pause for a second. There's a clear proposal for a
clear problem
Rossen: There are also ideas about how to do it performantly...
Rossen: We have plenty of engineers on the room, and we're getting
into how to solve the issue, let's not do that
Rossen: Let's go through the queue if you want to discuss syntax or
how to solve it
fantasai: What's the proposed solution?
Rossen: To have a property or a value that solves this problem in a
more performant way to pretty
<florian> I think we should open a separate issue to move "balance |
stable | pretty" out of text-wrap, and probably add
"avoid-orphans" there
SebastianZ: Iterating on nicole's question
SebastianZ: If the algo can be made pretty fast, why can't it be the
default?
SebastianZ: We also have text-decoration skip-ink
SebastianZ: but it was worthwhile having as a standard
Rossen: Let's close that bridge when we get to it
PROPOSED: Add a control that is either a property or a value that
causes UAs to make the last line longer than it would've
originally done unless that was a bad idea
RESOLVED: Add a control that is either a property or a value that
causes UAs to make the last line longer than it would've
originally done unless that was a bad idea
<br until=3:10>
Received on Sunday, 10 September 2023 15:50:32 UTC