Home > Web Front-end > CSS Tutorial > How to Maintain Uniform Flex-Item Width After Wrapping in Flexbox?

How to Maintain Uniform Flex-Item Width After Wrapping in Flexbox?

Barbara Streisand
Release: 2024-11-17 02:07:03
Original
469 people have browsed it

How to Maintain Uniform Flex-Item Width After Wrapping in Flexbox?

How to Maintain Uniform Flex-Item Width After Wrapping

Flexbox offers the ability to create flexible layouts, but when it comes to wrapping flex-items, their widths may vary drastically. To address this issue, let's delve into a clever workaround using CSS media queries.

The Solution

While not strictly a solution, the following approach provides an elegant alternative using media queries and without resorting to JavaScript.

SCSS Mixin

@mixin flex-wrap-fix($flex-basis, $max-viewport-width: 2000px) {
  flex-grow: 1;
  flex-basis: $flex-basis;
  max-width: 100%;
  $multiplier: 1;
  $current-width: 0px;
  @while $current-width < $max-viewport-width {
    $current-width: $current-width + $flex-basis;
    $multiplier: $multiplier + 1;
    @media (min-width: $flex-basis * $multiplier) {
      max-width: percentage(1/$multiplier);
    }
  }
}
Copy after login

Usage

Apply the mixin to your flex item:

.flex-item {
  @include flex-wrap-fix(100px)
}
Copy after login

Advanced Alternative

If your flex container's width is not constrained to the viewport size, you can use element queries instead of browser media queries. Here's a mixin for the flex container:

@mixin flex-container-wrap-items($flex-basis, $max-expected-width: 2000px) {
  display: flex;
  flex-wrap: wrap;
  > * {
    max-width: 100%;
    flex-grow: 1;
    flex-basis: $flex-basis;
  }
  $multiplier: 1;
  $current-width: 0px;
  @while $current-width < $max-expected-width {
    $current-width: $current-width + $flex-basis;
    $multiplier: $multiplier + 1;
    &[min-width~="#{$flex-basis * $multiplier}"] > * {
      max-width: percentage(1/$multiplier);
    }
  }
}
Copy after login

Explanation

For each specified flex-basis, we calculate the maximum number of items per row based on the viewport width. We then create media queries to restrict the item's maximum width as a percentage of the viewport width.

Example

Check out the updated CodePen below:

https://codepen.io/anon/pen/aNVzoJ

This demonstrates how flex-items maintain their desired width after wrapping, ensuring a consistent layout.

The above is the detailed content of How to Maintain Uniform Flex-Item Width After Wrapping in Flexbox?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template