- From: Ian Hickson <ian@hixie.ch>
- Date: Mon, 23 Aug 2004 16:39:06 +0000 (UTC)
- To: Staffan Måhlén <staffan.mahlen@comhem.se>
- Cc: www-style@w3.org
- Message-ID: <Pine.LNX.4.61.0408231616070.812@dhalsim.dreamhost.com>
On Mon, 23 Aug 2004, [ISO-8859-1] Staffan Måhlén wrote: > > > > Table cells don't have margins, so they can't be adjoining to > > anything, and if they're not adjoining to anything, they don't > > collapse. > > Ah, but of course. I assume that ensures that it is clear that children > do not collapse with their unexisting margins like in the td > first-child/last-child quirk (which BTW doesnt quite work with nested > collapses does it?)? In that there is nothing in the spec that says that this should happen, and in so far as the behaviour is fully-defined, yes. > > > It also seems to miss specifying what happens with vertical overflow > > > and bottom-margin. It does specify that collapse with bottom margin > > > and children does not occur if "underflow" occurs, but not that it > > > doesn't when overflow happens which seems to be the interpretation > > > of some major current implementations and also makes more sense than > > > collapsing something that isen't adjoining. > > > > When overflow happens, the margins aren't adjoining. This is defined. > > Hmm, i still don't quite see that. Could you spell that out to me? > > I think you are referring to the section: > > "The bottom margin of an in-flow block-level element with a 'height' of > 'auto' and 'min- height' less than the element's used height is > adjoining to its last in-flow block-level child's bottom margin if the > element has no bottom padding or border." > > but i don't see how that works and i don't see any 'max-height' references. The "element's used height" is dependent on the max-height property, which is where the max-height reference comes in. But yes, that's the section to which I was referring. It basically says that an element's bottom margin is only adjoining to its parent's bottom margin if it is auto-sized and that sized did not get affected by max- height/min-height. > > > The paragraphs: > > > > > > "If the element's margins are collapsed with its parent's top margin, > > > the top border edge of the box is defined to be the same as the > > > parent's. Otherwise, either the element's parent is not taking part in > > > the margin collapsing, or only the parent's bottom margin is involved. > > > The position of the element's top border edge is the same as it would > > > have been if the element had a non-zero top border." > > > > > > does not seem to match exactly what current browsers do. Why have two > > > ways to position the element and why isn't the box always positioned > > > after the collapse? To me it seems weird that the elements content area > > > can start above where its margins participates in a collapse, but > > > otherwise i think most implementations seem to go with some version of > > > the second solution above? This case is however probably the defintion > > > of an edge case, > > > > The case above is only relevant when the top and bottom margins of an > > element collapse together. If it wasn't for those paragraph, there would > > be no defined top border content edge for that element, and nested floats > > or positioned elements would be at a loss as to where to go. > > > > The two definitions are needed because otherwise you end up with > > unintuitive results. > > I'm sorry but i don't understand that having those two definitions gives > more intuitive results, and it seems that Mozilla 1.7, Opera 7.50 and IE6 > disagree so much on this behavior that i cannot make sense of what > that point is. Are there any use cases that can make me understand > or is this more about ensuring the behavior is reasonably well defined? There are basically two cases. Assume the following stylesheet: p, div { margin: 1em; } span { float: left; } div { background: blue; } The first case: <p> A </p> <div> <p> <span> B </span> </p> <p> C </p> </div> Here IMHO you want the top of the float to be at the top of the div, wherever that is. The second case: <div> <p> A </p> <p> <span> B </span> </p> <p> C </p> </div> Here IMHO you want the float to be at the same place as it would have been if the middle <p> element contained text. The text in the spec now obtains those results. -- Ian Hickson U+1047E )\._.,--....,'``. fL http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,. Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
Received on Monday, 23 August 2004 16:39:08 UTC