Windows 10 will reach EOS (end of support) on October 14, 2025. For more information, see this article.

Search Support

Avoid support scams. We will never ask you to call or text a phone number or share personal information. Please report suspicious activity using the “Report Abuse” option.

Learn More

margin/padding percentages in CSS calculated against what?

more options

Dear Mozilla Comunity people

I am junior front-end developer. I recently found a Firefox feature that I can't understand.

Here is the code: http://codepen.io/IgorG/pen/eNQwRb?editors=110

Here is the description:

In this code I only operate with .link-1 {} and the "margin-left: ;" property, where I try to understand how margin/padding percentages work and I can't understand what are they calculated against in this situation.

10%-20% - http://screencast.com/t/HnijMxh3 80%-90% - http://screencast.com/t/8tuKEEw31iD

On these two pictures I put margin-left 10% and margin-left 20% on one screenshot, then margin-left 80% and margin-left 90% on another one. I notice that the gap between 80%-90% and 10-20% is much bigger, so...

Here is the question: why is that? What is the calculating formula for Firefox in this example?

Google Chrome work in a more predictable way - the gap between 80%-90% and 10-20% is the same: 10%-20% - http://screencast.com/t/GYzRWICxM32 80%-90% - http://screencast.com/t/u0n7u7jTD


I would be extremely happy to get this margin/padding percentages explained. It would help me a lot in my work, since I use Firefox 99% of time.

Thanks people!

Dear Mozilla Comunity people I am junior front-end developer. I recently found a Firefox feature that I can't understand. Here is the code: http://codepen.io/IgorG/pen/eNQwRb?editors=110 Here is the description: In this code I only operate with .link-1 {} and the "margin-left: ;" property, where I try to understand how margin/padding percentages work and I can't understand what are they calculated against in this situation. 10%-20% - http://screencast.com/t/HnijMxh3 80%-90% - http://screencast.com/t/8tuKEEw31iD On these two pictures I put margin-left 10% and margin-left 20% on one screenshot, then margin-left 80% and margin-left 90% on another one. I notice that the gap between 80%-90% and 10-20% is much bigger, so... Here is the question: why is that? What is the calculating formula for Firefox in this example? Google Chrome work in a more predictable way - the gap between 80%-90% and 10-20% is the same: 10%-20% - http://screencast.com/t/GYzRWICxM32 80%-90% - http://screencast.com/t/u0n7u7jTD I would be extremely happy to get this margin/padding percentages explained. It would help me a lot in my work, since I use Firefox 99% of time. Thanks people!

Chosen solution

This is a little confusing because of the display:inline-block rules...

A % margin is computed as a fraction of the width or height of the containing element. Normally a list item has display:list-item which is more similar to display:block. With display:inline-block, the margin seems to be added to the width of the containing element.

To finish the thought:

Thus in the case of 80%, Firefox is enlarging the containing li element enough so that the actual content consumes only 20% of the space.

Read this answer in context 👍 2

All Replies (3)

more options

Chosen Solution

This is a little confusing because of the display:inline-block rules...

A % margin is computed as a fraction of the width or height of the containing element. Normally a list item has display:list-item which is more similar to display:block. With display:inline-block, the margin seems to be added to the width of the containing element.

To finish the thought:

Thus in the case of 80%, Firefox is enlarging the containing li element enough so that the actual content consumes only 20% of the space.

Modified by jscher2000 - Support Volunteer

more options

I got it now.

In here, % margin in Firefox is calculated not from the element's width, but the element's absolute width, which includes: element's width, side paddings and side margins too.

As result margin-left 20% will mean:

(element's_width + padding-left + padding-right + margin-left + margin-right) * 20%

more options

The margin is supposed to be computed based on the containing element's width. I think your example is a special case (margin as % of inline-block element without a specified width).

http://jsfiddle.net/waf7nz26/