How is the padding-top in percentage relative to the width of the parent?

advertisements

Here is an example:

http://jsfiddle.net/QZAd8/1/

Notice how all of the red divs are the same height and have padding-top:100%;, yet they A & B have different padding sizes... and it appears that the width of the parent changes this value (note that C changes the height of the parent, yet that doesn't alter the padding).

Why is padding related to width in this way?

Edit: for historical reasons, and in case jsfiddle goes away, the code I used in my example is as follows...

HTML:

<div class='outer'>
    <div class='middle'>
        A
      <div class='inner'>
      </div>
    </div>
</div>

<div class='outer' style='width:100px'>
    <div class='middle'>
        B
      <div class='inner'>
      </div>
    </div>
</div>

<div class='outer' style='height:400px'>
    <div class='middle'>
        C
      <div class='inner'>
      </div>
    </div>
</div>

CSS:

.outer {
    background-color: green;
    height: 300px;
    width: 70px;
    float: left;
    margin-right: 10px;
}

.middle {
    background-color: red;
    height: 100px;
    width: 50px;
    padding-top: 100%;
}

.inner {
    background-color: blue;
    height: 3px;
    width: 100%;
}


From CSS fluid layout: margin-top based on percentage grows when container width increases :

In CSS, all four margin: and padding: percentages are relative to the width ...even though that may seem nonsensical. That's just the way the CSS spec is, there's nothing you can do about it.

Straight from the horse's mouth:

'padding-top', 'padding-right', 'padding-bottom', 'padding-left'
Value:      <padding-width> | inherit
Initial:    0
Applies to:     all elements except table-row-group, table-header-group, table-footer-group, table-row, table-column-group and table-column
Inherited:      no
Percentages:    refer to width of containing block
Media:      visual
Computed value:     the percentage as specified or the absolute length

Percentages: refer to width of containing block