- From: Sho Kuwamoto <skuwamoto@macromedia.com>
- Date: Mon, 21 Jul 1997 14:46:07 -0700
- To: www-style@w3.org
I'm having trouble figuring out how negative margins on block-level elements should work. According to section 4.1 of the spec, the top and bottom margins between two block-level elements should work as follows: XXXXXXXXXXXXXXX XX element A XX XXXXXXXXXXXXXXX the space here is the max of <-- the bottom margin of A and the top margin of B. XXXXXXXXXXXXXXX XX element B XX XXXXXXXXXXXXXXX This is fine for positive values, but it gets hard to know what to do for negative values. Let's say that the bottom margin of A is 50px, and that the top margin of B is -10px. Here are some possibilities: 1.1) Follow the spec literally. 50px > -10px, thus the space between is 50px. 1.2) Add the two. 50px-10px = 40px, so the space between is 40px. Solution (1.2) is attractive because it seems to capture the web author's intentions. By specifying a space-before of -10px, he or she is probably saying "I want 10 pixels less space than I would otherwise get." Now, consider the situation when both are negative. Say the space after A is -10px, and that the space before B is -20. 2.1) Follow the spec literally. -10px > -20px, thus the space between is -10px. 2.2) Instead of using max(a,b), -max(-a,-b). 20px > 10px, thus the space between is -20px. 2.3) Add the two. (-10px) + (-20px) = -30px, thus the space between is -30px. Of these, I like (2.2) the best. It goes along with the spirit of using max(a,b) for positive values. So, combining (1.2) and (2.2), the algorithm to compute the space between block-level elements would be: if (a >= 0 && b>= 0) space = max(a,b); else if ( (a >= 0 && b < 0) || (a < 0 && b >= 0) ) space = a+b; else // a < 0 && b < 0 space = -max(-a,-b); Any thoughts? -Sho
Received on Monday, 21 July 1997 17:36:25 UTC