CSS Docs

CSS Responsive Design

A guide to creating responsive websites that adapt to various screen sizes using fluid layouts, viewport units, media queries, and the mobile-first approach.

Responsive Design is about creating websites that work seamlessly across different screen sizes. It ensures that your site looks good on desktops, tablets, and mobile phones.

📱 What is Responsive Design?

Responsive design allows websites to adapt to various screen sizes and resolutions. It ensures a consistent and usable experience for users, regardless of the device they're using. Responsive web design involves creating flexible layouts, using flexible media (images, videos), and applying styles that adjust based on screen size, orientation, and other factors.


🌐 Fluid Layouts and Percentage Widths

A fluid layout uses percentages for widths, ensuring that the design scales based on the viewport size. This allows elements to resize dynamically with the screen.

Example:

.container {
  width: 80%; /* 80% of the viewport width */
  margin: 0 auto;
}

In this example, the container will take up 80% of the screen width and will resize dynamically when the viewport changes.

Pros:

  • Content adjusts seamlessly across different screen sizes.
  • Avoids fixed-width designs, which can break on smaller screens.

🌟 Viewport-based Units

Viewport units allow for more responsive typography and layout. They are relative to the dimensions of the viewport:

  • vw (viewport width): 1% of the width of the viewport.
  • vh (viewport height): 1% of the height of the viewport.
  • em: Relative to the font size of the element or parent element.
  • rem: Relative to the root element's font size.

Example:

h1 {
  font-size: 5vw; /* Font size will be 5% of the viewport width */
}
 
.container {
  width: 100vw; /* Takes the full width of the viewport */
  height: 100vh; /* Takes the full height of the viewport */
}

Using viewport units helps make your design more flexible and adaptive to different screen sizes, ensuring text, images, and other elements scale proportionally.


📱 Media Queries for Device Adaptation

Media queries are a cornerstone of responsive design. They allow you to apply different styles based on the characteristics of the device, such as screen width, height, orientation, and resolution.

Syntax:

@media (condition) {
  /* CSS rules go here */
}

Example (Changing Layout for Smaller Screens):

@media (max-width: 768px) {
  .container {
    width: 100%; /* Full width on small screens */
    padding: 10px;
  }
}

In this example, the .container will have a full width and 10px padding when the screen width is 768px or less (typically for tablets or smaller devices).

Media Query Conditions:

  • max-width/min-width: Targeting specific screen widths.
  • max-height/min-height: Targeting screen heights.
  • orientation: Whether the device is in landscape or portrait mode.
  • resolution: Targeting devices with high resolution.

📱 Mobile-first vs. Desktop-first Approach

The Mobile-first approach focuses on designing for mobile devices first and then scaling up to larger screens. This ensures that your website is optimized for the smallest screen sizes before handling larger screens.

Mobile-first Approach:

  • Start with styles for mobile devices.
  • Use media queries to add styles for larger screens.
  • Example:
    /* Mobile-first styles */
    .container {
      width: 100%;
      padding: 10px;
    }
     
    /* Tablet and up */
    @media (min-width: 768px) {
      .container {
        width: 70%;
      }
    }
     
    /* Desktop and up */
    @media (min-width: 1024px) {
      .container {
        width: 50%;
      }
    }

Desktop-first Approach:

  • Start with styles for desktop devices and add media queries for smaller devices.
  • This approach is less common but may be used if you are targeting primarily desktop users and need to optimize for mobile as a secondary step.

🧑‍🎨 Key Takeaways

Fluid layouts are responsive because they scale with the screen size using percentage-based widths.


🧪 Try Yourself

import './styles.css';

function App() {
return (
  <div className="container">
    <h1>Responsive Design Example</h1>
    <p>This layout adjusts based on the screen size.</p>
  </div>
);
}

export default App;