- From: Anton Prowse <prowse@moonhenge.net>
- Date: Thu, 27 Jan 2011 01:31:22 +0100
- To: www-style@w3.org
- CC: Alan Gresley <alan@css-class.com>
I should know better than to write posts on the way out the door!
Clarification needed:
On 26/01/2011 20:09, Anton Prowse wrote:
> On 26/01/2011 19:15, Alan Gresley wrote:
>> On 27/01/2011 4:51 AM, Alan Gresley wrote:
>> <!DOCTYPE html>
>>
>> <style type="text/css">
>> .container p { margin: 1em 3em }
>> .container h1 { margin: 1em 1.5em }
>> </style>
>>
>> <div class="container" style="width: 800px; margin: 0 auto; border: 10px
>> solid blue;">
>> <div style="float:left; width: 100%; background: lime;">Float</div>
>> <h1>Heading</h1>
>> <p>text</p>
>> </div>
>>
>>
>> The only work around that I know of is to wrap the <h1> and <p> in
>> another element and apply the padding to it.
>
> Ah, now I understand you. It's not the use of 100% that's the problem
> (unlike what I claimed in my previous reply when I wasn't aware of your
> use case; although I still very much question the use of 'float', but
> that's a whole different tangent).
Actually, it /is/ the 100% that's the problem: it's only needed because
'float' is being used, and floats have shrink-to-fit behaviour. If you
simply use an in-flow block-level box instead, you don't need to specify
width:100%...
> I'm presuming that the float represents a navigation bar or something.
> The problem is that this particular block-level element needs to occupy
> the full horizontal space between the borders of the container.
>
> To achieve that, you use padding on the container to set the default
> offset of its children. Then you give the navbar a 100% width and a
> horizontal padding equal to that default offset,(*)
... and then you don't need to specify any horizontal padding...
> and you should use
> negative horizontal margins on the navbar (which is precisely what
> negative horizontal margins are designed for) to "pull" the navbar
> leftwards over the container's left padding, and to "allow" the navbar
> to sit over the container's right padding.
...and you merely need to add negative horizontal margins as just
described...
> This is an extremely common design pattern. It's frequently used for
> call-out boxes on web pages which consist of an image which stretches
> from side to side and some text underneath which is indented from the
> call-out's border:
>
> -------------------
> |-----------------|
> || ||
> || ||
> || ||
> |-----------------|
> | texty txt a |
> | foo txt tex |
> | |
> | bar txty tx |
> | txt texty a |
> -------------------
...which is exactly what this diagram shows (in which the image isn't a
float and doesn't have horizontal padding).
> You may be questioning why, then, this technique is "right" and the
> other "wrong", given that this technique also has problems.
This particular technique doesn't in fact have problems; it is the
correct solution.
The explanation of why a technique can be regarded as the correct
technique even when it has problems can wait for another time when an
appropriate scenario surfaces on this list.
Cheers,
Anton Prowse
http://dev.moonhenge.net
Received on Thursday, 27 January 2011 00:31:56 UTC