W3C home > Mailing lists > Public > www-style@w3.org > February 2005

Pseudo-floating tables (again)

From: Staffan Mhln <staffan.mahlen@comhem.se>
Date: Tue, 22 Feb 2005 18:36:42 +0100
To: www-style@w3.org
Message-ID: <421B7BBA.26071.2E89F0@localhost>

Hi,
This is not a new issue, i'm just looking to better understand why 
the current behavior is desirable. The previous WG reply was:
http://lists.w3.org/Archives/Public/www-style/2004Feb/0072.html
with a clarification at:
http://lists.w3.org/Archives/Public/www-style/2004Feb/0299.html

IMO the "may" bit on how elements that generate new block formatting 
contexts interact with floats in CSS 2.1 is unforturnate. It is also
possible that the chapter on calculating widths and margins need to
take this effect into account. I'm referring to the section:

http://www.w3.org/TR/CSS21/visuren.html#floats:
"The margin box of a table or an element in the normal flow that 
establishes a new block formatting context (such as an element with 
'overflow' other than 'visible') must not overlap any floats in the 
same block formatting context as the element itself. If necessary, 
implementations should clear the said element by placing it below 
any preceding floats, but may place it adjacent to such floats if 
there is sufficient space."

This gets (IMHO painfully) obvious when using legacy markup such as:

<table align="left">...</table>
<table align="center">...</table>
<table align="right">...</table>

While the rendering of the above case is reasonably consistent in
user agents, it is quite unlikely that an author would expect the
result, and the result seems inconsistent with the rules defined in:
http://www.w3.org/TR/CSS21/visuren.html#propdef-float
in how the right float does not end up "as high as possible".

I think that either the new block formatting context generating 
elements should be considered "full floats" or they should never be 
"pseudo-floats". That is, either all three tables should line up on 
one "line" if there is enough horizontal space in the example above,
or they should each have their own "line". Personally i think the 
second would be a much cleaner solution; that an author specifies 
'float' on something for it to act like a float, but floats are not 
allowed to span into new block formatting contexts and they are thus 
cleared before entering a new context.

To illustrate in ascii:

Current implementations:
------------------------------------------
First            Second 
------------------------------------------
                                    Third

I would prefer (and the rec allows):
------------------------------------------
First
------------------------------------------
                 Second 
------------------------------------------
                                    Third

But would also find the following better than current 
implementations:
------------------------------------------
First            Second             Third
------------------------------------------

Why is this discrepancy desirable? I can understand that there are 
probably quite a few pages depending on having tables pseudo-float, 
but would they break if tables became more fully floating or in 
some other way better integrated into the CSS model? I expect this
also has to do with how much a pseudo-floated table can 
"shrink-to-fit"? Some other problems in implementations are suggested
by the testcase below (like for instance that the chapter on 
calculating margins/widths does not seem to apply to theese 
"pseudo-floats"?). 

 /Staffan

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
  <title>Floating tables and margin-auto table</title>
  <style type="text/css">
    .first {background-color: blue}
    .second {background-color: yellow}
    .third {background-color: green}
    .width40 {width: 40%}
  </style>
</head>
<body>
  <h1>Three aligned tables (left/center/right):</h1>
  <table class="first" align="left">
    <tr><td>First</td></tr>
  </table>
  <table class="second" align="center">
    <tr><td>Second</td></tr>
  </table>
  <table class="third" align="right">
    <tr><td>Third</td></tr>
  </table>
  <h1>Table align without centered second:</h1>
  <table class="first" align="left">
    <tr><td>First</td></tr>
  </table>
  <table class="second">
    <tr><td>Second</td></tr>
  </table>
  <table class="third" align="right">
    <tr><td>Third</td></tr>
  </table>
  <h1>'margin: auto' isen't calculated based on containing 
block?!?</h1>
  <table class="first width40" align="left">
    <tr><td>First</td></tr>
  </table>
  <table class="second width40" align="center">
    <tr><td>Second</td></tr>
  </table>
  <table class="third width40" align="right">
    <tr><td>Third</td></tr>
  </table>
  <h1>Wrapping to fit?</h1>
  <table class="first width40" align="left">
    <tr><td>First</td></tr>
  </table>
  <table class="second">
    <tr><td>Second has a lot of text (but no align="center" anymore) 
to see if this will casue the table to break the line, eg not use 
max-width or to see what happens when it cannot fit in max.</td></tr>
  </table>
  <table class="third width40" align="right">
    <tr><td>Third</td></tr>
  </table>
  <h1>Does it stop pseudo-floating when it does not fit?</h1>
  <div style="width: 200px; border: solid 1px black">
    <div class="first" style="float: left; width: 150px">Floated 
div</div>
    <table class="second">
      <tr><td>Pseudo_floated_table_without_line_breaks.</td></tr>
    </table>
  </div>
</body>
</html>
Received on Tuesday, 22 February 2005 17:37:09 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:54:35 GMT