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

Re: [css3-content] Replacing ::outside with ::inside

From: Giovanni Campagna <scampa.giovanni@gmail.com>
Date: Sun, 12 Apr 2009 21:02:05 +0200
Message-ID: <65307430904121202n4fd01f06icc595736f5ecbd20@mail.gmail.com>
To: François REMY <fremycompany_pub@yahoo.fr>
Cc: CSS 3 W3C Group <www-style@w3.org>
2009/4/12 François REMY <fremycompany_pub@yahoo.fr>:
> From: "Giovanni Campagna" <scampa.giovanni@gmail.com>
>>
>> 2009/4/12 François REMY <fremycompany_pub@yahoo.fr>:
>>>
>>> ::outside can be useful in other case that you
>>> don't have mentioned.
>>>
>>> You look at ::outside only from the border/margin
>>> point of view, but it can have many other useful
>>> things.
>>>
>>> With ::outside, you can perform a break outside the
>>> element (useful if you want to have an element on a
>>> new line but doesn't contains the line break).
>>>
>>> * First sample :
>>>  <myElem>Hello</myElem>
>>>  myElem::outside::before { content: '\A'; }
>>>
>>> Is rendered like :
>>>  <br/><myElem>Hello</myElem>
>>>
>>> * Second sample :
>>>  <myElem>Hello</myElem>
>>>  myElem::before { content: '\A'; }
>>>
>>> Is rendered like :
>>>  <myElem><br/>Hello</myElem>
>>>
>>> * Last sample :
>>>  <myElem>Hello</myElem>
>>>  myElem::inside::before { content: '\A'; }
>>>
>>> Is rendered like :
>>>  <myElem><br/>Hello</myElem>
>>
>> You think in terms of elements, not of boxes. If all properties are
>> moved from "myElem" to "myElem::inside", then the visible effect of
>> "myElem::before" is the same of "myElem::outside::before" with
>> properties on "myElem".
>
> But, it's a bad idea, I think, since I'm not putting my properties on
> 'myElem::inside' but on 'myElem'.
> If CSS Properties can be moved from an element to another in contradiction
> of what the author say,
> we're ready for so complex problems that no UA will have this right.

I meant: "you author change you selector to include an ::inside pseudo-element"

>>> If you have something like that :
>>>
>>>  <box display-model="ab">
>>>      <div display-role="a"></div>
>>>      <div display-role="b"></div>
>>>  </box>
>>>
>>> And a CSS like that :
>>>  div[display-role="a"]::outside {
>>>      margin: 10px;
>>>  }
>>>
>>> It's rendered the same way as :
>>>
>>>  <box display-model="ab">
>>>      <div display="block"><div display-role="a"></div></div>
>>>      <div display-role="b"></div>
>>>  </box>
>>>
>>> The display role of the 'inner' div is no more applyable (I think), so
>>> it's
>>> not in the display-model of the box element.
>>> But it seems the spec of display-model is unclear about how the UA must
>>> react if an element in a display-model'ed
>>> element contains elements that does'nt enter in the model. But it's not a
>>> problem of '::outside'.
>>
>> What? You're mixing XSL:FO (attributes as properties), Template Layout
>> (slots), display-model...
>
> Yes, but only because it's shorter to write in my mail. We can have the same
> in pure CSS.

Yes, but it is not "display-role", it is "position".

> You've understood what I wanted to say.

Not really, but I will try to guess.

> Even if my markup is completly wrong
> (which it is),
> it show what I wanted to say.
>
> If we have DIV::outside in a display model, it's likely to be as an element
> was wrapping the DIV.
> With all consequence that such a thing have. Authors expect so (or, at
> least, me).

And where does that ::outside get placed? In the "a" slot or in the
"@" slot (default position inside a template element)? That is,
::outside is computed before or after moving elements around (for
Generated Content and Template Layout)?
On the other side, if you used ::inside, everything would be moved
into the "a" slot and it would have been clear.

> I find ::inside counter-intuitive, and not as useful as ::outside. But I
> don't want to say your idea is
> stupid, it's just not adapted to my expectation for CSS, but others people
> can think otherly, and I
> have respect for that, I'm just writing here to say what I think
> personnally, that you are wrong in
> willing to replace ::outside by ::inside.

I instead find counter-intuitive ::outside, and find easier to
understand to keep the inheritance in one direction-

>>> Regards,
>>> Fremy
>>>
>>> --------------------------------------------------
>>> From: "Giovanni Campagna" <scampa.giovanni@gmail.com>
>>> Sent: Saturday, April 11, 2009 7:39 PM
>>> To: "www-style" <www-style@w3.org>
>>> Subject: [css3-content] Replacing ::outside with ::inside
>>>
>>>> -- background --
>>>> This proposal crossed my mind while talking with Tab Atkins about
>>>> ::slot in Template Layout. He wanted to allow margins, and to make
>>>> those margins not collapse (sort of "box-sizing:margin-box"). I didn't
>>>> like the idea, but I did think that allowing some space between
>>>> adjacient slots and their borders may be useful. But I thought that
>>>> this kind of space is not a margin, but rather a padding (because it
>>>> is all around the box and doesn't collapse).
>>>> Ok then, how to specify an external padding? You need two boxes, one
>>>> inside the other.
>>>> I said to myself: I need the Generated Content features... but what
>>>> does ::slot()::outside mean? How shall I specify "display:slot"?
>>>> This didn't look very good to me
>>>>
>>>> -- the current situation --
>>>> The Generated and Replaced Content Module introduces the ::outside
>>>> pseudo-elements, which wraps its superior parent and all its (in flow)
>>>> content. This pseudo-element is not implemented in any UA I tested. In
>>>> addition, it creates a lot of difficulty on the author side, because
>>>> the wrapping generated box still inherits (like every other
>>>> pseudo-element) from its superior parent.
>>>>
>>>> -- my proposal --
>>>> Drop ::outside.
>>>> Add ::inside, a pseudo-element wrapping all superior parent's content
>>>> (but not ::before, ::after, ::alternate or other pseudo-elements). All
>>>> properties apply to this pseudo-element (but their meaning is changed,
>>>> because it is inside its superior parent like a nested <div>)
>>>> This way, to add multiple borders to an element, you say:
>>>> .multiple {
>>>> border:1px solid yellow;
>>>> }
>>>> .multiple::inside {
>>>> border:1px solid blue;
>>>> }
>>>> .multiple::inside::inside {
>>>> border:1px solid red;
>>>> }
>>>>
>>>> We may introduce the syntax shorthand "::inside(n)".
>>>> Not generated ::inside elements are removed, ie if ::inside::inside is
>>>> never referenced, ::inside::inside::inside is the same as
>>>> ::inside::inside.
>>>>
>>>> -- use cases --
>>>> All of ::outside, plus those case when an appropriate ::outside is not
>>>> available, like for example ::slot.
>>>>
>>>> Giovanni
>>>>
>>>
>
Received on Sunday, 12 April 2009 19:02:43 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 22 May 2012 03:46:58 GMT