- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Thu, 30 Jan 2014 05:39:08 -0800
- To: "www-style@w3.org" <www-style@w3.org>
Selectors
---------
- Discussed :has() vs. subject indicator. Plan to poll authors.
- Went through Selectors spec to determine what to keep.
Plan to defer: reference combinator, :local-link()
- The following are scheduled for further investigation:
:drop(), :-moz-ui-valid, :read-write, column combinator
- RESOLVED: complex selectors in :matches/:not to move to fast
profile, assuming bz agrees
- RESOLVED: Drop :nth-match(), move functionality to :nth-child()
- Still need a better name for :blank
Display
-------
Some properties needed renaming. Current propositions:
box -> display-box
display-extras -> display-decoration
====== Full minutes below ======
Selectors 4
-----------
TabAtkins: Simon brought up issue of how exactly do we write the
ancestor selector
TabAtkins: If I want to select <p> containing <img>
TabAtkins: currently written as !p > img
TabAtkins: jquery writes it as p:has(img)
TabAtkins: I understand the arguments for the first one
TabAtkins: on the other hand, difficult to do multiple branches
glazou: How do you do !p ~ img
SimonSapin: p:has(~img)
TabAtkins: Any arguments about this being intuitive are nil, because
jquery people use it all the time
fantasai: That proves it's useful, doesn't prove it's intuitive
glazou: Seems to me we are inserting more and more ugliness in Selectors.
No, don't think we should do :has()
SimonSapin: We only have this syntax with :matches() and :not()
SimonSapin: for same reason as shadowDOM combinators, I think it's better
to have a name than random meaning for ascii characters
glazou: At some point in the past we also had p:subject
glazou: The history of that proposal. Initially I submitted to WG as !p
glazou: Then ! was rejected due to negation
glazou: we went to :subject
<tantek> IMO the whole use of "!" in CSS has been a disaster.
glazou: now back to !p
<tantek> !p is terrible
<astearns> +1 tantek
<plh> +1
<tantek> (nearly) every documentation about "! important" makes some
joke about it being unintuitive.
* fantasai actually suggested !! earlier
<glazou> fantasai, I could live with !! :-)
glazou: I think opening a parentheses and starting with a combinator
is awkward
plinss: This preserves the fact that the rightmost thing is the one
you're selecting
TabAtkins: Also, ! it's very confusing where exactly it can go
TabAtkins: e.g. :matches() and :any() can take !, but :ancestor() can't.
fantasai: If :has() is equivalent to !, then why different?
fantasai: ! on the rightmost compounds selector doesn't change the
meaning of the selector, just like * in front of a pseudo
doesn't change the meaning of the selector.
various examples thrown around
<dbaron> one of the examples was "div:ancestor(!.light-theme) > foo",
where fantasai and glazou say the ! doesn't change anything
since the ! is only moving the subject of what's inside the ()
shepazu: As a non-CSS person, I'd be able to guess what :has() means,
whereas for ! can't do that
* gsnedders agrees with shepazu here for all nothing it is worth
...
shepazu: Any problems with jQuery?
TabAtkins: No, the meanings are identical
TabAtkins: It takes a relative selector, which is a selector that starts
with a combinator (possibly an implied descendant combinator)
<dbaron> for the record, I'm for :has()
<smfr> http://dev.w3.org/csswg/selectors4/
TabAtkins goes through the Selectors spec to see what needs to be cut
:matches() and :not()
dbaron considers :matches()
dbaron: Don't know why we restrict :matches() to compound selectors
in the fast profile
TabAtkins: c:matches(a c, b c) hits more combinatorial cases
SimonSapin: bz points out that with some new things, like parent selector,
would need to do hard things
dbaron: I think if the syntax makes sense to allow combinators, then
allow it
TabAtkins writes out example
.q c:matches(.a c,.b c) expands to
.q .a c,
.q .b c,
.a .q c,
.b .q c,
.a.q c,
.b.q c
TabAtkins explains that people often do just the common combinations,
this would allow them to exactly express what they want
dbaron asks about :nth-last-match(), and what exactly it means
dbaron: OK, think that's alright
[brief discussion of :not()]
RESOLVED: complex selectors in :matches/:not to move to fast profile,
assuming bz agrees
TabAtkins: Case-sensitivity, the 'i' flag of attribute selectors.
TabAtkins: I think we're planning to implement this
glazou: Is that implemented in gecko?
dbaron: no
glazou: I have a patch for that.
TabAtkins: Linguistic pseudos are new
fantasai: :dir() has implementation in mozilla
fantasai: :lang() was expanded to do lists, that's implemented in MS
SimonSapin: Also does full BCP47 matching, a bit more complex
Keeping that
TabAtkins: Location pseudos
TabAtkins: :any-link is shortcut for :matches(:link,:visited)
dbaron: Gecko has it for over a decade
TabAtkins: :local-link()
fantasai: I think that one we will need to defer
TabAtkins: :target already done
TabAtkins: :scope has been around for awhile
dbaron: When does :scope apply in normal style sheets?
TabAtkins quotes from spec -- equivalent to :root
dbaron: OK
TabAtkins: Drag and drop pseudos. Do we have any implementations of
the functionality?
fantasai: There's an implementation of some kind of drag and drop thing,
don't remember which one
fantasai: Suggest we add an action to find out what, exactly, is
implemented. Otherwise keep it.
fantasai: Seems like we hashed over this enough that the definition is
relatively stable.
fantasai: Does anyone have any concerns or feel like this might need
more work?
TabAtkins: We have time-dimensional pseudos, defined for WebVTT.
TabAtkins: Anyone know if they're implemented anywhere?
ACTION fantasai: make sure timeline is defined for Speech
<trackbot> Created ACTION-607
TabAtkins: New input pseudos, mainly :placeholder-shown
dbaron: We used to implement it under a different name, then removed it
dbaron: Does WebKit do pseudo-class or pseudo-element?
Unknown.
fantasai: For :placeholder-shown, do we have implementations?
dbaron: We have implementations for the functionality, might not match
spec
TabAtkins: There was an issue raised by hixie wrt dropping :read-only
and :read-write, because no known use cases
tantek: I have mixed feelings on that. Would prefer more data
ACTION TabAtkins Run a search on use of :read-only and :read-write
TabAtkins: :user-error implemented by Moz under a different name
dbaron: :moz-ui-invalid
<tantek> FYI http://wiki.csswg.org/spec/css4-ui
<tantek> has collected a bunch of these
<tantek> as well as http://wiki.csswg.org/spec/selectors4#ideas-to-consider
dbaron: We also have the opposite, :moz-ui-valid
TabAtkins: That's just :not(:user-error)
fantasai: Not necessarily. Could be triggering only over time period
that :user-error could trigger
fantasai: e.g. turning something green instead of red
ACTION: fantasai and Tab to investigate :moz-ui-valid
<trackbot> Created ACTION-608
glazou: :blank's definition is really confusingly worded, fix it
glazou: change "excludes" to "allows"
ACTION fantasai fix :blank's definition to make sense
<trackbot> Created ACTION-609
TabAtkins: Are we keeping :blank?
fantasai: A bit concerned about the name, makes me think of form elements
dave: Also have a :blank page selector
<dbaron> Gecko has :blank under the name :-moz-only-whitespace
SimonSapin: Does it depend on computed value of white-space?
fantasai: No, that also needs clarification
TabAtkins: OK, naming issue, but keeping it
TabAtkins: An+B.. probably need to kill this section in favor of Syntax
fantasai: might leave some informative notes
TabAtkins: :nth-match(), keep or punt?
dbaron: Keep. This is one of the most wanted features.
fantasai: One problem with this. Imagine a table
fantasai: I want to color every other row silver, that is shown and
not collapsed
fantasai: So instead of :nth-child, I use :nth-match
(this is also a problem with :nth-child)
fantasai: The data is complex, and I split the data into sections
using multiple <tbody>
fantasai: Now there might be 2 white rows adjacent to each other
dbaron: One possibility, might be weird, might be to keep the restriction
of not having combinators inside :nth-match() and :nth-last-match()
dbaron: and use that to change what scope you're matching
dbaron: So for this example, you'd use ...
dbaron: note, this wouldn't make the fast profile
fantasai: We do have some space to play around before the 'of' (anything
after that keyword will be consumed as a selector, including
idents and commas)
...
<dbaron> (I'm proposing putting relative selectors inside :nth-match,
essentially, but with a default of child rather than descendant.)
fantasai: or, we could expand :nth-child() to take the syntax of :nth-match()
TabAtkins: thoughts?
fantasai: I think it's more clear. :nth-match() could be interpreted as
matching against the tree, not just against children
RESOLVED: Drop :nth-match(), move functionality to :nth-child()
TabAtkins: Next one is the reference combinator
glazou: This is based as on ID attribute, which is a problem
glazou: What if we have a reference between elements, but there's no
DTD declaring IDREF relationship?
TabAtkins: There's no relationship other than structure in XML
TabAtkins: You can never have a reference combinator of any kind for XML
fantasai: OK, so there's two things here
fantasai: You need to know which is the ID attribute. You need that for
ID selectors anyway
fantasai: whether that's via DTD, or HTML spec, or xml:id
clilley: no one uses xml:id any more
glazou: It's easier just to look for the first occurrence, don't worry
about if it's an ID attribute or not
fantasai: I think we should drop this feature. no implementations, not
a high request
dbaron: I'm a bit queasy about this being a combinator, rather than a
pseudo-class like :matches()
dbaron: Also don't even want to see the term IDREF
dbaron: Say language-specific knowledge if you need to, but don't say
IDREF
dbaron: But also happy to punt to next level.
TabAtkins: OK, so put for now, fix later
<liam> [the equivalent in XPath is a frequently-asked question, people
want it all the time, even without id/idref]
Bert: Been wanting it for labels and inputs
Bert: Maybe with !! etc. could handle those cases
plinss: in simple cases, can do that, but some cases might be in e.g.
different table cells, harder
TabAtkins: Column combinator, which is ||
dbaron: I'd prefer a :column() pseudo-class
fantasai: It's a combinator because it describes the relationship between
two elements, which is what a combinator *is*
TabAtkins: Do we want to keep here, or punt to next level?
Bert: How do you know what's part of the column?
Tab, fantasai: Markup magic.
ChrisL: CSS display
fantasai: no, only based on markup
[discussion of whether to keep or punt]
[discussion of :hover problems]
dbaron: we could add :column-hover and :column-active
fantasai: or change definition of :hover and :active so it works on columns
fantasai: Main issue seems to be whether this is a pseudo-class or a
combinator
glazou: I can live either way
fantasai: Oh! You (dbaron) wanted to have an = combinator. We could use
that for rows.
fantasai: If you have a spanning cell, you can't tell it belongs to the
third row by child selector.
fantasai: So use || for column relationship, and = for row relationship :)
TabAtkins: I hate column combinator now...
...
dbaron: glazou is proposing that td:column(.foo) matches td that is in
a column either with a class of foo, or that contains a cell
with class of foo
TabAtkins: This works equivalently for pseudo-class and combinator syntax.
This is the column relationship selector.
dbaron: I might prefer 2 separate selectors, but ok with it...
TabAtkins: So, are we keeping in 4 or punting to 5 and what do we agree
on?
dbaron: I think it might be worth getting some author feedback.
dbaron: I would like to see it stay in 4
dbaron: I would like to hear author feedback on syntaxes and whether
td matching is wanted
dbaron: I suspect pseudo-class will be more preferred, but not sure.
Would prefer to ask authors
glazou: td selection is really useful
dbaron: Not arguing that, wondering if should be same feature or
different ones
...
glazou brings up issue of hidden rows, selecting every other row
ACTION TabAtkins Add this as an example for :nth-child()
<dbaron> tr:nth-child(even of :not(.hidden)) ?
glazou: Specificity, question wrt reference combinator. Think it should
be counted somewhere.
TabAtkins: We're punting to L5
glazou: Keep track of it
TabAtkins: OK, topic's done!
Pseudo-elements
---------------
Tab: need somebody to edit the spec
tantek?: Authors are asking why ::selection isn't specified
Tab: dbaron had a proposal to address issues
dbaron: need to see if it's web-compatible
* tantek was just pointing out the recent thread where author(s) asked
about status of ::selection in specs since it appears to be
implemented cross-browser.
Bikeshedding Display
--------------------
Tab wants better names for properties in Display module
fantasai: I propose renaming 'box' to 'display-box'
SimonSapin: So still violating naming convention of shorthands, since
it's not part of the shorthand.
* dbaron is unsure
<fantasai> reasons being:
<fantasai> a) display-box connects authors with display, so that
help them transition from display: none
<fantasai> b) display properties are all about box generation. This
is about box generation
<fantasai> c) We have in some cases properties which look like longhands
of a shorthand, but are actually independent because we
have a specific reason for them to be independent, even
though they are closely related. This seems such a case.
TabAtkins: Ok, that makes sense to me.
Tab: What about naming of what I currently have as display-extras,
for list-item value?
dbaron: Isn't there an association with display-outside, when marker
is outside?
dbaron: what happens when you give a display:table-cell an outside
marker?
...
SteveZ: display-decoration?
TabAtkins: better than display-extras
[various discussion of list bullets, unminuted]
ACTION to all to read MQ4 for tomorrow
Meeting closed.
<SimonSapin> proposed definition for :blank
<SimonSapin> The :blank pseudo-class is like to the :empty pseudo-class,
except that it additionally matches elements that only
contain characters affected by whitespace processing. [CSS3TEXT]
<SimonSapin> looks good?
<liam> all characters are _affected_ by whitespace, maybe you mean that
are classed as whitespace in [reference]?
<liam> well, maybe it's clear enough
<SimonSapin> well, Text doesn’t really classify characters
<liam> then how is the reference to CSS 3 text helping? maybe it's the
HTML spec that's needed? dunno
<liam> (I don't mean, it's not helping, I mean, I don't understand how
it's helping)
<SimonSapin> TabAtkins: https://dvcs.w3.org/hg/csswg/rev/e3a564cf9e04
Received on Thursday, 30 January 2014 13:42:16 UTC