Re: :first pseudo-selector

Le 22/03/2012 19:37, Marat Tanalin | tanalin.com a écrit :
> Let assume we have a container with blocks inside it, and each block can have margin-top and margin-bottom, and each block can contain another blocks inside them, and nesting level can be arbitrary and is unknown in advance.
>
> It would be nice to have ability to zeroize margin-top for first child, and first child of it, first child of first child of first child, etc. at once. Same applies for last child.
>
> Currently, AFAIK, we can only match children up to some_exact_  nesting level known in advance (3 in the example below):
>
>      .container>  :first-child,
>      .container>  :first-child>  :first-child,
>      .container>  :first-child>  :first-child>  :first-child {}
>
> We cannot use just :first-child context selector since it would also select first children of blocks that are not first children themselves.
>
> So we need a sort of_recursive_  selector that matches not just first of last child, but recursively matches all first-most and last-most elements regardless of their nesting level.
>
> A possible syntax is quite straightforward:
>
>      :first-child-recursive {margin-top: 0; }
>      :last-child-recursive  {margin-bottom: 0; }


Hi,

Isn’t this handled by margin collapsing?
Example:

<style>
     div { background: #ccc }
     p { margin: 2em 0 }
</style>

<div>
     <p>a</p>
     <p>b</p>
     <p>c</p>
</div>

Because of margin collapsing, the top margin for "a" and the bottom 
margin for "c" collapse with the (zero) margins of the div and end up 
outside of the div, ie. outside of the background.

-- 
Simon Sapin

Received on Thursday, 22 March 2012 18:52:17 UTC