W3C home > Mailing lists > Public > www-style@w3.org > March 2003

Block element width behavior

From: Stuart Ballard <sballard@netreach.com>
Date: Fri, 14 Mar 2003 17:26:51 -0500
Message-ID: <3E72572B.10907@netreach.com>
To: "www-style@w3.org" <www-style@w3.org>

This message may be off-topic, but whether it is or not depends on what 
the answer to the question is. If the answer is "you can already do it", 
then it's off-topic because it's a "howto" question. If the answer is 
"you can't do it" then it's on-topic because it's a suggestion of 
something to add to CSS... How's that for an existential quandry? ;)

Anyway, the question is this (using a generic unversioned kind of HTML 
for my examples)

When I write something like this:

<table style="background-color: red">
   <tr>
     <td>
       My Cell
     </td>
   </tr>
</table>

then, per the default styling rules in just about every browser (and as 
far as I can tell the CSS2 spec backs this up, referring to things like 
Minimum Content Widths etc), the red background (and hence the table) is 
only the size it needs to be to fit the width of the text "My cell", 
plus applicable margins, padding and border.

On the other hand, if I write something like this:

<div style="background-color: red">
   My Div
</div>

then, per the default styling rules (and again the spec seems to back 
this up), the red background is the full width of the containing block 
(which if I'm not already inside something else, means the full width of 
the browser window).

I don't object to this default behavior, but the problem is that as far 
as I can tell there's NO WAY to style a div to behave like the table 
cell does by default. Which forces me to use horribly un-semantic tables 
for simple blocks that don't need any tabular behavior except for the 
ability to calculate their width based on their content.

"width: auto" is apparently equivalent to the initial value and computes 
to (effectively) 100%.

"margin-right: auto" apparently (by the algorithm described in CSS2 
10.3.3) gets treated as if it were zero if width is auto.

"width: 0" causes the content to be compressed to its minimum possible 
width, which isn't necessarily the same as it's preferred size (in my 
example, it would cause a linebreak to be inserted between "My" and "Div").

"min-width: 0" has no effect because the computed value isn't 
constrained by the minimum width.

My question is therefore, is there any way to get the behavior I want 
based on current CSS specs, and if not, is there any plan to provide 
this behavior in future versions of CSS?

Thanks,
Stuart.




-- 
Stuart Ballard, Programmer
NetReach - Internet Solutions
(215) 283-2300, ext. 126
http://www.netreach.com/
Received on Friday, 14 March 2003 17:26:53 GMT

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