2017-05-27 00:42:42 UTC
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 Grid 2
- The group reviewed the subgrid section of Grid
come to a common understanding of how it stands right now.
- fantasai to clarify that subgrids with orthogonal flows have rows
and column axes flipped within the subgrid, just as with nested grids.
- The current subgrid text will be moved to level 2 and then
fantasai will update the text.
- RESOLVED: Publish FPWD Grid Level 2 with the inline issue
pointing to the discussion of independent subgrid axes
CSS Fonts 3
- RESOLVED: Move CSS OM section from Fonts Level 3 to Fonts Level 4;
Leave CSSFontFaceRule existant with a note explaining the
current inconsistent state of specs/implementations.
- ChrisL will port Gecko font variant tests into WPT.
- RESOLVED: dbaron's explanation above will go into the spec for
min/max font size. (Explanation: They affect the
computed value of font size, so they affect em units.
therefore, em units on these properties work just like
em units on font-size and thus use the parent's
computed font size.)
- RESOLVED: First Public Working Draft of Fonts level 4 will be
published. Chris to handle the request.
- RESOLVED: Add a font-language-override descriptor to Fonts L4.
- High-DPI font rendering creates a problem with reftests relying
on Ahem; this needs investigation.
===== FULL MINUTES BELOW ======
[Images referenced in this section are available here:
[Rossen reviews what a grid is]
<rachelandrew> https://github.com/w3c/csswg-drafts/issues/796 is
the issue referring to auto placement and named
<rachelandrew> i put some subgrid notes here
Rossen: Also good to have a way to group things in a grid
Rossen: Don't remember subgrid discussions
Rossen: We started discussing subgrid and how it could work, but
wasn't until later it made it in the spec.
Rossen: I believe first version had ability of snapping of grid
items in only columns and not rows or vice versa.
Rossen: So allowing subgrid to allow overriding one of the two
dimensions of grid.
fantasai: I think first version was both axes together, and then
we split it out later (and then merged it later).
[Rossen describes weird overflow columns cases]
jet: Feedback from mats isn't that A is better than B, but that
current version is written to get to CR
jet: and some normative text was lost there.
<fantasai> [A: split axis; B: current version]
fantasai: We didn't lose any normative text.
fantasai: There were some changes to simplify things, like
changing how overflow was handled
fantasai: changing one case to see what implementations picked up
fantasai: we didn't lose any interesting aspects of subgrid,
other than single-axis subgrids, at Igalia's request.
fantasai: The thing that was confusing people was a subgrid that
had more rows & columns than the # of rows or columns
it spanned in the parent grid.
fantasai: I don't consider that to be significant feature.
fantasai: In terms of significant use-cases
fantasai: it was more like we need to deal with this case so we
fantasai: and people were like this is scary
fantasai: (flippy window use-case).
fantasai: We didn't lose anything except independent axis
subgridding (that was significant).
Rossen: If we look at the current version that is in the draft, it
snaps to areas of the parent grid
Rossen: it does not affect any of the area of the columns or rows
Rossen: it acts as a grouping mechanism.
Rossen: In a sense you can draw a parallel between subgrid and
non-BFC blocks in a block layout.
Rossen: They are there to just group things nicely
Rossen: like document layout defines paragraphs, and divs can put
borders around them.
fantasai: It doesn't establish a new grid formatting context.
fantasai: It continues with the old [it's parents] grid formatting
Rossen: I took a look at scenarios in the office.
Rossen: At some point this is something that has to be done by
Rossen: measuring the sizes of things inside
Rossen: arranging things, align things
Rossen: If we take those stages
Rossen: how does subgrid affect measuring?
Rossen: If we assume all rows and columns are auto
Rossen: they have to snap to content.
Rossen: Extreme case: one subgrid, no items, but has border.
Rossen: I'm trying to highlight the fact that subgrid contributes
to measuring rows and columns by its MBP.
<fantasai> https://www.w3.org/TR/2017/CR-css-grid-1-20170209/#subgrids defined in item c
Rossen: The width height min-width max-width and other sizing
related properties are forfeit because it snaps /
stretches to the areas of the grid that were defined.
Rossen: However if everything was empty and the parent grid was
auto, then it will be the size of the subgrid's borderbox.
fantasai: Then what's not perfect.
fantasai: If it's perfect we publish it.
Rossen: First we have to define min & max widths are not applied.
Rossen: Currently spec only talks about height and width.
Rossen: The other thing that is not covered is overflow.
fantasai: That's specified item h
fantasai: width and max-width etc. are item f
fantasai: Any specified width and height constraints.
TabAtkins: That includes min and max.
Rossen: And there are no gaps.
Florian: The overflow is defined as you may do it so...
TabAtkins: But it is defined in terms of layout effects.
TabAtkins: It is still well defined how it and the parent grid get
laid out accordingly.
Rossen: Do we honor position relative?
fantasai: I don't see why not.
Rossen: Can that be a container ...
Rossen: What about position absolute.
fantasai: then it is no longer a subgrid, it is a grid.
TabAtkins: It is no longer participating in the grid's layout.
fantasai: If it is not itself a grid item then it becomes a grid.
many: It's still not a grid item.
Rossen: So then, when we go to auto flow all the grid items as
well as the items of the subgrid?
Rossen: What order are we taking?
Rossen: My assumption is depth first search.
fantasai: Auto placement happens inside subgrid.
fantasai: The subgrid has an explicit position by its start end
and grid-position properties
fantasai: before you even look at its contents you know how many
grid areas it takes up.
Rossen: That's not what I was asking.
Rossen: Now that we have positioned the subgrid
Rossen: then we position the items of the grid.
TabAtkins: No the subgrid items.
Rossen: Hold on-
Rossen: let's say that I have in the parent grid G, I1, SG has I2
Rossen: So let's say I1 is placed at 2,2 where it overlaps the
Rossen: So now I'm doing auto placement of items.
Rossen: I've come in here, processed everything else
Rossen: then the first item outside the subgrid has to be placed.
fantasai: The subgrid is taking up that spot, so you can't place
it there with auto.
TabAtkins: The subgrid is also a grid item so it takes up space
like any item.
Rossen: Why not do depth first? So we can auto place?
fantasai: A lot of the time you want to place stuff inside the
subgrid, then auto place others.
TabAtkins: Subgrid sometimes because you want a border around that
TabAtkins: You are yourself an independent chunk of content.
fantasai: You have to treat the subgrid as a nested grid.
Rossen: we could consider placing the subgrid more transparent
Rossen: and place other items.
(unparseable from Rossen)
fantasai: It should behave like a nested grid.
fantasai: The only difference is instead of an explicit set of
lines, you are aligning to the lines of the parent grid.
fantasai: They want alignment but they want that subgrid item to
be an atomic thing.
Rossen: I can live with either of those.
TabAtkins: subgrid is just a nested grid, and ...
Florian: You placed your block analogy too far.
TabAtkins: Another interesting question, your subgrid has
auto-placed items, your parent grid places an item on
top of the subgrid, what happens?
Rossen: What I heard is that you can place two grid items on the
TabAtkins: Even if the parent grid places an item explicitly, you
can still auto place the subgrid's sub-items on top of it.
Rossen: So, writing modes:
Rossen: If this was a LtR grid and the grid inside here says RtL
that should just work.
Rossen: For vertical / orthogonal changes, where the subgrid
Rossen: So let's say the subgrid was not square, like 2x3.
Rossen: If I change the subgrid so that it is orthogonal to the
parent, what happens?
fantasai: We need to clarify that.
Rossen: On other words I would be surprised that in tables we do
Rossen: So that to me is the same.
ACTION fantasai clarify that subgrids with orthogonal flows have
rows and column axes flipped within the subgrid
<trackbot> Created ACTION-842
Rossen: So if I say an item is at 1,2 then it is here and not here.
TabAtkins: That always works.
TabAtkins: What is not defined is your horizontal span becomes
your row count.
fantasai: We can clarify it.
Rossen: Alignment should work fine.
Rossen: What about align-self on the subgrid.
fantasai: That's also in item f
fantasai: because we ignore all sizing stuff
fantasai: alignment triggers shrink to fit, so we turn it off for subgrids
Rossen: In terms of drawing, any implications to stacking context?
fantasai: Same as a nested grid.
Rossen: So none.
Rossen: Can we allow repeat on a subgrid.
fantasai: No because you are taking your rows and columns from the
Rossen: Do we need to be explicit?
fantasai: We already say ignore grid template properties, that's
Rossen: With all of that, we are happy with how subgrid is
specified currently, and I would like to hear from others.
rachelandrew: I think mats concern is locking it to both
dimensions, and I have a concern with that too.
rachelandrew: What I'm seeing people expect what subgrid to do, is
columns locked to the grid, and not the rows because
they'll be adding content there.
TabAtkins: There are use-cases but it makes the algorithm so
fantasai: I don't think we tried (to write it down).
rachelandrew: I think that's what mats was asking for.
TabAtkins: I couldn't figure it out.
TabAtkins: The Igalia folks were like LOL no we can't do this.
TabAtkins: Plus my French co-worker,
TabAtkins: our original grid implementer,
TabAtkins: he was also like no.
fantasai: We are creating a new FPWD here.
fantasai: If it helps I'm happy to take a try at defining a
one-axis grid, just so we can see what that looks like
fantasai: if that would make Mozilla happier
fantasai: it might not be as scary once defined.
rachelandrew: What I'm hearing is that people expect that subgrid
will work that way.
Rossen: What is the use-case?
rachelandrew: People are thinking grid like bootstrap 12 column
rachelandrew: and then things on that top level are using that
rachelandrew: like a bunch of products.
rachelandrew: You know how many columns you want
rachelandrew: but you don't know how many rows you'll use because
that depends on content
rachelandrew: there's also like the BBC home page.
Rossen: Is it the case where you start with a subgrid
Rossen: I have one item, it goes no problem
Rossen: now I have another item, and then the expectation is that
the subgrid will grow?
rachelandrew: Yes. People have these layouts that are used for
[fantasai draws a picture]
[6-column master grid on the page; header has several rows of
stuff with different interesting spanning stuff; main section
has a 2-column wide sidebar and a 4-column wide main section]
[it's unknown how many rows of auto-placed content is in the main
section, but the sidebar has to span it all, so it needs to
span 1 in the parent grid and the main section takes the main
parent's column divisions, but subdivides into as many rows as
needed for auto-placed items]
tantek: I heard a proposal from fantasai to try to write it down
so why are we still arguing?
rachelandrew: This was the issue that mats was pointing to and
that he wants discussed, and I would agree.
rachelandrew: I think subgrid is important that we get it.
rachelandrew: If we have it locked to two dimensions it is not
what people are expecting subgrid to be
rachelandrew: when I talk to regular developers.
Rossen: What if I go subgrid in a subgrid?
Rossen: If I have a subgrid that takes only the columns, and
inside of it I have only one subgrid that takes only rows.
[fantasai and Rossen draw and discuss at the whiteboard]
fantasai: We have parent grid which is black lines, we have a
subgrid (blue lines) which cares about columns but not
rows, it spans 3 columns, it makes its own rows:
fantasai: like four rows for example.
fantasai: It has some items
fantasai: and then it has a subgrid itself
fantasai: which cares about the rows from its parent, but not
fantasai: So it takes the rows from its parent, so it gets two
rows, and then it defines its own columns, and it has
maybe like a lot of columns.
fantasai: So now we have to do the grid sizing.
fantasai: The placement is a nested structure
fantasai: so it looks at this one this one this one [points at
fantasai: but doesn't care about this (two nested subgrid).
fantasai: When it asks the subgrid to figure out how big are you
when you are spanning your columns
fantasai: it takes its columns from the parent so it won't resize
fantasai: but I have four rows so...
fantasai: so then I have four rows, one item in this one, two in
this one, one item plus a spanning item in here
fantasai: it does row sizing there
fantasai: so when it asks it ...
Florian: When you're doing the green (2 nested deep)... the width
dimension is based on its own auto-sizing?
fantasai: In the current spec it must have both, but assuming
fantasai: In the subgridded dimension we honor the width, in the
non-subgridded dimension we ignore it.
fantasai: You just treat it as a bunch a content.
fantasai: In the subgridded dimension we stretch it out to take
all of the available grid area.
Rossen: Let's consider that this here would be another subgrid
fantasai: So it too aligns.
Rossen: And it has two items.
(Rossen draws another subgrid at same level as 2nd level deep
green line subgrid)
Florian: While we are discussing level 2, maybe I just missed a
Florian: How often have you found people using spacer gifs?
rachelandrew: They're using generated content
rachelandrew: for backgrounds and borders.
rachelandrew: Everyone wants to put backgrounds and borders on
rachelandrew: Also want to name every other line so they can place
rachelandrew: Auto place against
rachelandrew: set some structure in the naming.
fantasai: You basically have different grids.
Florian: Should we just acknowledge that this is a problem and we
don't have a solution yet?
Rossen: We could have the current subgrid published as a WD
Rossen: and then have fantasai add text for how this could work.
Rossen: Ideally if we have the current version published so we
don't lose it
Rossen: because we said we would remove it from level 1 and put it
in level 2.
Rossen: Anyone objecting to publishing the current subgrid?
tantek: my request is to put an inline issue in the FPWD pointing
to the issue of independent axes.
Florian: I don't think grid fragmentation has been figured out.
fantasai: I think that and and the same in flexbox is a huge
feature that has not gotten any love.
Florian: Given limited resources I'm not sure Vivliostyle can work
on it unless people are going to look at it.
fantasai: I think that issue of fragmentation and grid, needs
someone to care about printing, file issues against
fantasai: I think that...
fantasai: we did in flexbox
fantasai: there is question about how do you distribute space
across a fragmentation boundary
fantasai: It is tricky.
fantasai: We shouldn't try to spec it in any more detail unless
we are in the process of implementing it.
fantasai: It's not that we don't want it; we don't want it in
theory, we want it in practice
fantasai: for flexbox the theory aspects are spec'd.
fantasai: In terms of distributing space there is a variety of
possible algorithms of more or less complexity.
Florian: And I think that description fits with Vivliostyle.
Florian: The difference is that both of these specs are big efforts
Florian: if we do that will anyone listen?
Rossen: Definitely we'll listen.
Rossen: Take a look at the current strawman we have there.
Rossen: It works in a lot of cases fairly well, but not all.
Rossen: If you want to take this and start improving on it.
TabAtkins: While chrome cannot currently fragment worth crap, as
we move things internally to our own Houdini APIs, then
we will care.
Rossen: I want to go back to the resolution for the FPWD for Grid
Rossen: Any objections to publishing FPWD of Grid level 2?
tantek: I gave my requirement of asking for inline issue.
Rossen: Then let's call that resolved to publish FPWD with the
RESOLVED: Publish FPWD Grid Level 2 with the inline issue pointing
to the discussion of independent subgrid axes
Decorative grid-cell pseudo-elements
fantasai: People want to style this area of nothing
Florian: Empty div?
Florian: We don't have a way to generate boxes
rachelandrew: It's visual styling, it's a CSS thing
TabAtkins: At some point we'll address this more generally.
Florian: You mean just use empty divs for now?
TabAtkins: No I'm for pseudo element or an infinite collection of
Florian: Also how you solve the consume that space.
TabAtkins: The original version from Bert's draft had a way to say
this is an empty cell.
Florian: In the limited examples I've tried to write, I've found
the "consume this cell so nothing goes there" would solve
it, but another way would be auto-place, but start here,
and not before.
fantasai: So position the first one, and auto-place the rest.
fantasai: The main thing is we need stylable things in the grid.
fantasai: That's a very strong use requirement coming from the
rachelandrew: It's like question one coming when people look at
iank: So the specific request is styling row 1 col 2 red.
rachelandrew: Yeah at the moment people are either sticking in an
empty div or generated content to style.
iank: This is like page background effects.
Rossen: We are wrapping up.
Rossen: Do we have an issue for this?
fantasai: I think we do.
CSS Fonts 3
ChrisL: Myles made an interesting font.
ChrisL: For each char, it displays a cross or tick depending if a
feature is on or off.
ChrisL: It allows you switch high/low level features on and see
ChrisL: The link above shows the results of testing.
ChrisL: Staged at the moment because they are easier to see live.
ChrisL: The amount of greeniness shows how many implementations we
have. Red is zero greeniness.
Implementation status of font-variant-east-asian
ChrisL: The one that sticks out is font-variant-east-asian, only
ChrisL: Chrome passes the low level test, but the syntax isn't
eae: We will try to fix this quarter.
ChrisL: Scroll to the bottom, see the object model. Nobody
implements what the spec says, but they do implement stuff
from DOM Level 2.
SimonSapin: iirc, the conclusion was that we'd copy the interface
from DOM 2 into the Fonts spec
SimonSapin: and there was only a few attributes missing.
SimonSapin: I'll make a pull request.
<dbaron> The OM thing is https://github.com/w3c/csswg-drafts/issues/825
jdaggett: The OM rule is non-functional. To make it work you have
to jam things into the style.
jdaggett: You can manipulate unicode range on a style property -
this is weird.
jdaggett: It is badly defined. We are not speccing out what the
implementors are implementing.
ChrisL: What do you suggest?
jdaggett: That implementors follow the spec.
jdaggett: We should not spec out whacky behavior on style rules.
myles: Content that already exists, will access the descriptors
inside the rule. So we need a .style property.
jdaggett: Are people actually using this functionality, that's
been there since CSS 2? Last time I looked, if you went
in and changed the font family, font matching didn't
myles: Works in Safari.
jdaggett: Not in Chrome
jdaggett: this is broken in practice.
ChrisL: Where do we want to go?
jdaggett: If you're looking to go to REC, then put something in that
says it is not defined and push the OM to CSS Fonts 4.
ChrisL: What you have specced is better, but the implementors
astearns: We have to move the OM section from Fonts 3 into Fonts
4. Any objection?
SimonSapin: I am fine with moving the attributes. But the
@font-face rule interface exists.
astearns: We can copy over what is in CSS 2 to Fonts 3, or we can
have a section saying that CSS 2 exists but we are not
putting it in the spec.
ChrisL: People seemed to push back that DOM Level 2 is ancient.
jdaggett: But all the implementations are in the same boat.
RESOLVED: Remove CSS OM section from Fonts Level 3 to Fonts Level 4
SimonSapin: Just the attributes?
SimonSapin: Option - define CSSFontFaceRule, but without any
myles: Why is that valuable?
SimonSapin: Because you want something to show up in the CSSRules.
Florian: Is that implemented? Pushing it out doesn't mean we don't
SimonSapin: CSSFontFaceRule with a style attribute is implemented.
The font spec has one attribute for each descriptor.
SimonSapin: This comes from DOM Level 2.
dbaron: If we do this, we should add a note saying that this is
actually defined in Fonts 4, but what is currently
implemented is defined in DOM Level 2.
astearns: Objections to amending the resolution to leave
CSSFontFaceRule and add a Note?
RESOLVED: As above, but leave CSSFontFaceRule with a note
explaining the current state
ChrisL: I would like to talk about the @font-feature-rules for
ChrisL: myles's fonts don't do stylistic alternates.
myles: I have now included all of the font features that don't
require a numerical argument to turn on.
jdaggett: There are some reftests in gecko, testing font variant
alternates/position/caps. They have normative fallback
jdaggett: They test what you want.
ChrisL: Does it require a specific testing framework?
jdaggett: They are probably Gecko reftests. You'll need to convert
ChrisL: Any volunteers to convert them to Web Platform Tests?
dbaron: <explains how to do it>
Ahem Anti-aliasing vs Reftests
ACTION: ChrisL to port Gecko font variant tests into WPT
<trackbot> Created ACTION-843
Florian: A while back we discovered that Ahem didn't work great
for testing on high-res screens?
Florian: Can we fix this?
myles: Not easily.
myles: Use the CSS property to turn off font fringing. Or size
your box correctly.
Florian: I think I tried that. You can't get the standard 100x100
green box with Ahem.
myles: Renderers treat text very differently. You can't get pixel
TabAtkins: So what do we do? That's the idea of using Ahem.
dbaron: It's worth digging into a bit.
Florian: <links to an email with the failing test>
astearns: This test will be investigated.
Max Font Size
astearns: Next up in min/max font size.
fantasai: The min and max font-size props were added in Level 4.
we need to decide how they impact font-relative units.
dbaron: They affect the computed value of font size, so they
affect em units. therefore, em units on these properties
work just like em units on font-size.
<dbaron> ... and thus use the parent's computed font size
myles: I agree with everything after "therefore", and asked if
there was precedent to have the computed value of a
property depend on the specified value of another property.
fantasai: The 'display' property has this issue. depends on its
parent's 'display' and its 'float' and 'position' values.
myles: I agree then
astearns: Does it need to be added to the draft?
RESOLVED: dbaron's explanation above will go into the spec for min/
max font size.
ACTION: Myles to put this into the min/max section of the spec
<trackbot> Created ACTION-844
myles: CSS fonts 4 includes font variations, font display
scriptor, min/max font size properties, and color font
support for palettes, and text style v emoji style.
myles: This is a lot of work, and pretty close to what the final
collection of work will be.
myles: We should go to First Public Working Draft?
RESOLVED: First Public Working Draft of Fonts level 4 will be
published. Chris to handle the request.
Font Load Events
astearns: Font Load Events
jdaggett: I put that on the agenda. The spec was tweaked on
Monday. There was a Last Call WD in 2014, nothing since.
We have three implementations. We should go ahead?
fantasai: Any open issues?
dbaron: Any tests?
TabAtkins: I have some issues. Minor. I just need to do them.
jdaggett: Gecko have tests.
myles: WebKit has tests too.
astearns: Are the WebKit tests being submitted to WPT?
astearns: It seems font loading can be on our list of things to
push to CR.
astearns: I will follow up on tests and closing issues and so on.
Font Language Override
ChrisL: Jonathan Kew wanted it as a descriptor
dbaron: font-language-override was specced as only a property, but
other things were also a descriptor. Gecko has implemented
it as both.
dbaron: The argument is that it should be a descriptor.
ChrisL: This makes sense to me.
ChrisL: font stylistic sets are font-specific, so we have them on
ChrisL: font-language-override can also be font-specific, so
should also be on @font-face.
myles: In WebKit, we distinguish between fast and complex text
paths. We need to determine with path to take before
working out which elements in the fallback to use.
myles: This means they are slightly problematic. There are already
some descriptors that cause this issue. I'm a bit hesitant
about adding more.
ChrisL: But you're not arguing that the others should be taken out?
fantasai: But you'll have to fix the others?
myles: I doubt we ever will.
dbaron: John Hudson's example was of writing Macedonian, and this
font has Macedonian, so I'll use that, but this other font
doesn't, but the Serbian is close enough, so I'll use that.
Florian: Would that make sense for CJK fonts, where you want to
pick particular bits?
jdaggett: This is when you want to override the OpenType language
implied by the lang attribute for certain features such
ChrisL: This example <link> shows what we are talking about.
astearns: It seems that a property is going to be used much more
often than a descriptor.
astearns: Fonts 3 currently only has a property. Gecko does
descriptor as well.
astearns: Florian proposes putting it into level 4.
ChrisL: We could put both property and descriptor into level 4
dbaron: Does anyone else implement font language override?
astearns: I'm inclined to leave the property where it is. Add
descriptor to level 4. Objections?
RESOLVED: Add a font language override descriptor to Fonts Level 4
ChrisL: Do you have tests, jdaggett ?
jdaggett: I think so.
ACTION: Myles to add font-lang-override descriptor to Fonts Level 4
<trackbot> Created ACTION-845
ACTION: jdaggett to look for Gecko tests for various font things
<trackbot> Created ACTION-846