>웹 프론트엔드 >CSS 튜토리얼 >Flexbox로 래핑한 후 균일한 Flex 항목 너비를 유지하는 방법은 무엇입니까?

Flexbox로 래핑한 후 균일한 Flex 항목 너비를 유지하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-17 02:07:03462검색

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

래핑 후 균일한 Flex 항목 너비를 유지하는 방법

Flexbox는 유연한 레이아웃을 생성하는 기능을 제공하지만 플렉스 항목을 래핑하는 경우 너비가 달라질 수 있습니다. 확연히 달라집니다. 이 문제를 해결하기 위해 CSS 미디어 쿼리를 사용하여 기발한 해결 방법을 살펴보겠습니다.

해결책

엄밀히 말하면 해결책은 아니지만 다음 접근 방식은 다음을 사용하여 우아한 대안을 제공합니다. 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);
    }
  }
}

사용

플렉스에 믹스인을 적용하세요. item:

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

Advanced Alternative

플렉스 컨테이너의 너비가 뷰포트 크기로 제한되지 않는 경우 브라우저 미디어 쿼리 대신 요소 쿼리를 사용할 수 있습니다. 다음은 플렉스 컨테이너에 대한 믹스인입니다.

@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);
    }
  }
}

설명

지정된 각 플렉스 기반에 대해 뷰포트를 기반으로 행당 최대 항목 수를 계산합니다. 너비. 그런 다음 항목의 최대 너비를 뷰포트 너비의 백분율로 제한하는 미디어 쿼리를 생성합니다.

아래에서 업데이트된 CodePen을 확인하세요.

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

이는 플렉스 항목이 래핑 후 원하는 너비를 유지하여 일관된 레이아웃을 보장하는 방법을 보여줍니다.

위 내용은 Flexbox로 래핑한 후 균일한 Flex 항목 너비를 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.