- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Tue, 27 Nov 2012 15:02:18 -0800
- To: Tony Chang <tony@chromium.org>
- Cc: "www-style@w3.org" <www-style@w3.org>
On Tue, Nov 27, 2012 at 1:24 PM, Tony Chang <tony@chromium.org> wrote:
> What should happen if a flex item has a negative margin?
>
> Here's an example:
> <div style="display:flex; width: 100px">
> <div id="a" style="flex: 1"></div>
> <div id="b" style="width: 10px"></div>
> </div>
>
> If we give #b a left margin of -50px, what should happen? In ToT WebKit and
> Gecko, this causes the available space to go from 90px to 140px and #a
> flexes to fill this. #a ends up being 140px wide, overflowing the flexbox.
>
> I also get weird behavior when I set the cross axis margins to negative
> values because we think there's additional space in the cross direction.
>
> This seems very unintuitive. I think the simplest thing to do is to treat
> negative margins as 0 both for calculating available space and for
> positioning.
>
Negative margins are pretty useful in some flex cases.
Consider this screenshot:
https://dl.dropbox.com/u/14981836/tabs.png
This element uses vertical and horizontal negative margins.
The markup of that tabs element is like this:
<div class="tabs" #test>
<div class="strip"> <!-- our tab strip, can be placed on any
side of tab container. -->
<div panel="panel-id1" selected>tab1 caption</div>
<div panel="panel-id2">tab2 caption</div>
<div panel="panel-id3">tab3 caption</div>
</div>
<div name="panel-id1"> first panel content </div>
<div name="panel-id2"> second panel content </div>
<div name="panel-id3"> third panel content </div>
</div>
And styles:
.tabs > .tabs-strip
{
flow: horizontal; /* change to display:flexbox, etc. */
padding: 2px 2px 0 2px;
margin-bottom: -1px; /* to allow current tab to cover top
border of the panel */
}
.tabs > .tabs-strip > div /* all tabs passive by default */
{
padding: 3px 8px;
margin-bottom:1px;
height: *;
width: max-content;
}
.tabs > .tabs-strip > .current /* current, selected tab */
{
/* to make it look "in front" */
padding: 4px 10px 5px 10px; /* padding increased */
margin:-2px -2px -1px -2px; /* but margin is negative to adjust
increased padding */
position:relative; /* drawn on top of siblings */
}
--
Andrew Fedoniouk.
http://terrainformatica.com
Received on Tuesday, 27 November 2012 23:02:49 UTC