Ashmah
Ashmah

Reputation: 872

Why padding is included in height sometimes?

I have a text area and I added some CSS to it

<textarea watermark="Have a question? ..." class="test-input" rows="4" cols="15" name="">Have a question? ...</textarea>

and CSS applied to it -

.test-input {
    border: 1px solid #D0D0D0;
    border-radius: 3px 3px 3px 3px;
    color: #646464;
    float: left;
    font-family: Arial;
    font-size: 12px;
    height: 20px;
    margin: 0 0 0 15px;
    padding: 5px;
    resize: none;
    width: 264px;
}

And I get the text area with some padding inside it. In the cases when it works absolutely fine, text area height comes to be 20px with 5px padding not included in height. But, in few cases height of the text area includes padding and the height gets reduced to 8px. I have looked for any css if its overriding it but I didn't find. And I compared the result in both cases. Left is the reduced height and right is the expected height.

enter image description here I can fix this issue, in other case managing height specifically, adding !important or with help of some JavaScript. But, I am wondering what's the cause here that's making such effect. Why and in which cases paddings are getting included with height or width?

Upvotes: 34

Views: 23574

Answers (3)

Mohsenasm
Mohsenasm

Reputation: 3141

Refer to https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing,

The box-sizing property can be used to adjust this behavior:

  • content-box gives you the default CSS box-sizing behavior. If you set an element's width to 100 pixels, then the element's content box will be 100 pixels wide, and the width of any border or padding will be added to the final rendered width, making the element wider than 100px.
  • border-box tells the browser to account for any border and padding in the values you specify for an element's width and height. If you set an element's width to 100 pixels, that 100 pixels will include any border or padding you added, and the content box will shrink to absorb that extra width. This typically makes it much easier to size elements.

Upvotes: 1

Bob Stein
Bob Stein

Reputation: 17214

jQuery seems consistent with these definitions:

Each can set or get, e.g. $element.outerHeight(desired_height_including_margins, true);

enter image description here

enter image description here

enter image description here

(Images excerpted from linked pages.)

Upvotes: 3

Terry
Terry

Reputation: 66123

That depends on what box-sizing attribute you have used:

  • border-box means that the height and width of the box, defined/calculated in CSS, will also include the padding(s) and border width(s) applied to it
  • content-box is the default behavior, where padding(s) and border width(s) are added onto the defined/calculated height and width of the box.

By setting box-sizing: border-box as seen in your left example, you have defined the height of the element at 20px. This means that the actual content box will only be 8px tall, because the browser will subtract the border (1px top, 1px bottom) and padding (5px top, 5px bottom) form the defined height, leaving only 8px left, which is a tad bit too short to contain height of the entire line (therefore the word appears to be cut off).

Upvotes: 55

Related Questions