26.10.2011 13:08, Philip TAYLOR (Webmaster, Ret'd) wrote:

I am looking for a technique that will allow me
to generate a <DIV>, the width of which is the
width of its widest non-shrinkable immediate child
element; the DIV will always be floated.
[...]
The image has a natural width, which for most
images will be wider than the width of (say)
"party" in the caption that follows. But the following
paragraph is "shrinkable", in the sense that it has no
intrinsic width and could be as narrow as the longest
word therein (i.e., "party"). So I would like the text
in the caption paragraph to be forced to wrap to the width
of the image.

Most approaches (like just floating) tend to make the element as wide as needed for the paragraph presented on one line if possible. That's hardly suitable, and it's rather natural to want to let the image width restrict the text width (unless the image width is fairly small).

And it seems that a table in HTML is the only fairly safe way of achieving that.

> I do not want to use tables for reasons of
accessibility.

The impact of tables on accessibility has been greatly exaggerated, especially in the case of simple table. In this case, it would be a matter of a very simple table: a caption, one row, consisting of one element. The magic is that the caption width will be set according to the cell width, and there the cell contains just the image. You still need CSS if you wish to make the caption text left-aligned (instead of centered), for example.

So far, my experiments and research have drawn a blank;
even Jukka's otherwise most helpful page [1] does not
seem to address this desideratum.
[...]
[1] http://www.cs.tut.fi/~jkorpela/www/captions.html

The page mentions the single-cell table approach though not very emphatically.

The approach can be simulated in CSS. The main problem with this is that the properties needed are not universally supported; in particular old versions of IE would be a problem.

<style>
.figure { display: table; }
.figure img { display: table-cell; }
.figcaption { display: table-caption; caption-side: bottom; }
</style>
<div class=figure>
  <img src=test.png alt="(test image)">
  <div class=figcaption>Now is the time for all good men to come to the
  aid of the party</div>
</div>

--
Yucca, http://www.cs.tut.fi/~jkorpela/
______________________________________________________________________
css-discuss [css-d@lists.css-discuss.org]
http://www.css-discuss.org/mailman/listinfo/css-d
List wiki/FAQ -- http://css-discuss.incutio.com/
List policies -- http://css-discuss.org/policies.html
Supported by evolt.org -- http://www.evolt.org/help_support_evolt/

Reply via email to