W3C home > Mailing lists > Public > www-style@w3.org > April 2009

[css3-layout] Various issues concerning Template Layout

From: Tab Atkins Jr. <jackalmage@gmail.com>
Date: Mon, 6 Apr 2009 18:40:22 -0500
Message-ID: <dd0fbad0904061640s61853a4dgeb6e9d9c0b631aad@mail.gmail.com>
To: CSS <www-style@w3.org>
Use of inline in display: property
The current draft allows an optional "inline" before the template
proper in the display property, to indicate whether the element should
be block or inline in addition to being a template.  However, there
are many reasonable display values beyond block or inline that can be
reasonably be applied to an element with a template.  Specifically,
among the current display values listed in the Box Module, it seems
reasonable to be able to combine a template with the following:
inline, block, inline-block, list-item, run-in, table-cell,
table-caption, and possibly compact.

Is there any particular reason that these display values are unable to be used?

position:same on generated content
Assume that foo and bar are sibling elements in the DOM, in that orde.
 What is the result of the following CSS?

foo {
  position: a;

bar {
  position: b;

bar::before {
  position: same;
  content: "Baz!";

bar::after {
  position: same;
  content: "Quux!";

Will I see the two generated strings in ::slot(a) or ::slot(b)?  The
spec specifies that it should follow the "most recent element with a
letter as position that has the same template ancestor", but it
doesn't seem clear what the "most recent element" is in this case.

Ordering of multiple elements put into the same slot
The examples seem to indicate that, if multiple elements are
positioned into the same slot, they are flowed within the slot in
document order.  However, I can't find any explicit acknowledgement of
this within the spec.

As well, how does this interact with generated content?  Take the code
from the previous example (to avoid ambiguity, assume that both of the
pseudoelements have position:b).  I would assume that the ::before
pseudoelement contents would come before the contents of bar, and the
::after pseudoelement contents would come after.

As well, take this example:

foo {
  position: a;

bar {
  position: b;

foo::before {
  position: b;

foo::after {
  position: b;

bar::before {
  position: a;
  content: "Baz!";

bar::after {
  position: a;
  content: "Quux!";

Where would the contents of the two pseudoelements be placed, relative
to the contents of the foo and bar elements in slots a and b?

Properties applicable to ::slot pseudoelements
I would like to be able to apply more properties to the ::slot
pseudoelements.  Specifically, I want to be able to provide all of the
border-* properties, box-shadow, padding, and margin.  Border-* and
box-shadow are required for the same reasons that background is -
without the ability to specify this on the slot, you are forced to
move only a single element into the slot and make it completely fill
the slot if you want to make the properties look like they apply to
the slot.  Padding is also necessary; you can fake horizontal padding
on the slot by using margin on the elements positioned into the slot,
but vertical padding can't be done without foreknowledge of the first
and last elements that will be positioned into the slot.  Margin can
be faked by putting extra rows and columns into your template, but
that is ugly and inconvenient when we have the appropriate property at

Layout within a ::slot pseudoelement
Currently, objects positioned into a slot are laid out according to
normal static flow (+ float).  At the moment the 'flow strategies'
are: static, table, and multicol.  Further flow strategies will appear
in the future, such as horizontal box flow.  I would like the ability
to change the flow strategy within a slot so I could, for instance,
make the contents of the slot occupy two columns, or position multiple
display:table-row elements into a slot and have their table-cell
children align appropriately.

At the moment flow control is sort of all over the place, so I guess
this would require the ability to specify display (at least the block
and table values) and the column-* properties on a ::slot

Multiple template ancestors with unique slot names
Assume I have an element <foo> which has a child <bar>, both of which
have templates specified on them.  Both use completely unique letters
for the slots in their templates, so there is no overlap.  Now,
consider a descendant of bar with position specified, naming a letter
present in foo's template.  I *believe* this will fail and compute to
'static', as positioning into a slot only looks at the most recent
template ancestor, and ignores all others that are further up the
ancestor chain.  Is this correct?

Received on Monday, 6 April 2009 23:41:02 UTC

This archive was generated by hypermail 2.4.0 : Friday, 25 March 2022 10:07:35 UTC