What’s the difference between em, rem, px, and % units in CSS?

What’s the difference between em, rem, px, and % units in CSS?


CSS units play a pivotal role in web design and development. They allow developers to specify dimensions, such as width, height, font-size, margin, and padding, among others. Choosing the right unit can be the difference between a flexible, adaptive design and a rigid one. Understanding these units is a fundamental aspect of mastering CSS.

Basics of CSS Units

In the world of CSS, units are broadly categorized into two types: absolute and relative units. Absolute units are fixed and don’t change relative to another unit. They represent a specific measurement and are consistent in their appearance. Examples include inches (in), centimeters (cm), and pixels (px).

On the other hand, relative units are dynamic and compute their value based on the value of another element or property. This makes them adaptive and essential for responsive designs. Examples include percentages (%), em, and rem.

px (Pixel)


The px or pixel is an absolute unit in CSS. It corresponds directly to pixels on the screen. In digital design, a pixel is the smallest unit of measurement, representing a single point in a raster image.

Use Cases

  1. Precision: When a design needs to be pixel-perfect and you know the exact size an element needs to be.
  2. Fixed Dimensions: When an element should maintain a consistent size regardless of its surroundings or parent elements, like icons or specific borders.
  3. Base for Media Queries: Pixels are often used in media queries to apply specific styles based on screen resolution.


  • Not Fluid: As it’s an absolute unit, pixel values don’t adapt based on user preferences or parent elements, which can be problematic for responsive or adaptive designs.
  • Accessibility Issues: Using pixels for font sizes can create problems for users who prefer larger or smaller text, as it doesn’t respect user browser settings.



The em is a relative unit in CSS. Its value is calculated based on the current font size of its parent element. If you set a font size of 16px for a parent element, then 1em within that element would be equal to 16px.

Use Cases

  1. Scalable Typography: em is especially beneficial for typography where font sizes need to scale according to their context or surrounding text.
  2. Nested Elements: For elements nested within others, using em allows for proportional scaling based on the parent’s font size.
  3. Adaptive Spacing: Using em for margins and paddings ensures spacing is consistent with font size, creating harmonious layouts.

Calculations & Examples

To calculate the em value, divide the desired pixel value by the parent element’s font size.

Suppose you have a base font size of 20px and you want a heading to be 40px.

body {
font-size: 20px;

h1 {
font-size: 2em; /* 40px/20px = 2 */

In this example, 2em for the h1 element would be equivalent to 40px.


  • Complexity in Nested Situations: As em is relative to the font size of its parent element, deeply nested elements with em values can become complicated and unpredictable.
  • Requires Careful Management: Changes to the base font size can have cascading effects on all elements using em, which requires vigilance.

rem (Root em)


The rem unit, short for “Root em”, represents a size relative to the root element, which is typically the <html> element in an HTML document. In contrast to the em unit that is based on the font size of its closest parent or the element itself, the rem unit always refers to the root’s font size.

Use Cases

rem is particularly useful when you aim for consistent scaling across your web application. Since it’s based on the root font size:

  1. Scaling typography and spacing across the site is straightforward.
  2. It’s beneficial for creating scalable and consistent layouts.
  3. It helps in maintaining rhythm and proportional relationships in design elements.

Calculations & Examples

To derive rem values:

  1. Determine the root font size. The default for most browsers is 16px.
  2. Divide your desired element size by the root font size.

For instance, if you want a text size of 24px and the root font size is 16px:
24px ÷ 16px = 1.5rem

html {
font-size: 16px;

h1 {
font-size: 1.5rem; /* results in 24px */


  1. If not careful, changing the root font size can drastically impact the entire site’s layout.
  2. It requires more calculation compared to px when trying to match design mock-ups.

% (Percentage)


The % unit in CSS represents a percentage value relative to its parent element. This relation could be concerning width, height, font-size, or other properties.

Use Cases

Percentages are primarily used:

  1. For fluid layouts, where elements need to adapt based on parent size.
  2. In setting responsive typography.
  3. For creating scalable container elements.

Calculations & Examples

To compute % values, consider the parent’s value as the reference.

Example, if a container is 500px wide and you want a child element to take up half of that width:

500px * 0.5 = 250px

Using percentages:

.container {
width: 500px;

.child {
width: 50%; /* results in 250px */


  1. Percentages can lead to unpredictable results if parent dimensions are unknown.
  2. Deep nesting can make calculations complex and harder to maintain.

Comparative Analysis

Responsive Design

  • rem: Offers consistent scaling, helpful for maintaining design rhythm.
  • %: Provides fluidity, especially suitable for adapting to various viewport sizes.


  • rem: Helps in preserving readability as users can adjust the root font size based on their preferences.
  • %: Nested percentages can sometimes create very small or very large sizes, potentially harming accessibility.

Browser Support

Both rem and % units are widely supported across modern browsers. However, for older browsers, especially versions of IE before 9, rem might not be supported. Always check compatibility when targeting older browsers.

Best Practices

Combining Units

Using a mix of units like px, rem, and % can often give the best results. For instance, set a base font size in px and use rem for typography, while employing % for layout.


Always test layouts on various devices and screen sizes. Using rem can simplify global scaling with a single change, and % aids in ensuring fluid layouts.

Accessibility Considerations

Avoid using fixed units for font sizes to respect user preferences. Whenever possible, provide options for users to adjust the visual presentation.

Tools & Resources


Choosing the right unit in CSS plays a pivotal role in crafting user-friendly and scalable designs. Whether you lean towards rem for its consistent scaling, or % for its adaptability, always prioritize user experience. Remember, the web is fluid, and experimenting with these units will pave the way for more robust designs on codedamn and beyond.

Sharing is caring

Did you like what Mehul Mohan wrote? Thank them for their work by sharing it on social media.


No comments so far