Web Styles

Container Queries

Element queries, container types, and component-level responsive design.

Advertisement

Container Queries

Element queries, container types, and component-level responsive design.

Overview

Container queries style elements based on their parent's size.

Key Concepts

  • container-type — Define query container
  • container-name — Named containers
  • @container — Query container size
  • Container queries — Component responsiveness
  • CQ units — Container-relative units

Code Examples

/* Basic container query */
.card-container {
  container-type: inline-size;
  container-name: card;
}

@container card (min-width: 400px) {
  .card {
    display: flex;
    gap: 1rem;
  }
  
  .card-image {
    flex: 0 0 200px;
  }
}

/* Named containers */
.widget-wrapper {
  container-type: inline-size;
  container-name: widget;
}

@container widget (min-width: 300px) {
  .widget-content {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }
}

/* Multiple queries */
.sidebar {
  container-type: inline-size;
  container-name: sidebar;
}

@container sidebar (max-width: 200px) {
  .sidebar-nav {
    display: none;
  }
}

@container sidebar (min-width: 201px) and (max-width: 400px) {
  .sidebar-nav {
    display: flex;
    flex-direction: column;
  }
}

@container sidebar (min-width: 401px) {
  .sidebar-nav {
    display: flex;
    flex-direction: row;
  }
}

/* CQ units */
.responsive-text {
  font-size: max(1rem, 3cqi);
}

/* Container query support check */
@supports (container-type: inline-size) {
  .container-query-support {
    container-type: inline-size;
  }
}

/* Component patterns */
.product-card {
  container-type: inline-size;
}

@container (min-width: 450px) {
  .product-card {
    display: grid;
    grid-template-columns: 200px 1fr;
  }
}

@container (min-width: 700px) {
  .product-card {
    grid-template-columns: 300px 1fr auto;
  }
}

/* Responsive form */
.form-group {
  container-type: inline-size;
}

@container (min-width: 500px) {
  .form-row {
    display: flex;
    gap: 1rem;
  }
  
  .form-group {
    flex: 1;
  }
}

Practice

Build a component library with container queries for responsiveness.

Advertisement