programing

플렉스 컨테이너의 높이 행이 같음

i4 2023. 9. 13. 22:18
반응형

플렉스 컨테이너의 높이 행이 같음

는.list-items 번째row같은 것을 가지다height. 하지만 두번째에 있는 아이템들은row다가 heights. 나는 모든 아이템이 유니폼을 입었으면 합니다.height.

고정 높이를 제공하지 않고 플렉스박스만 사용하지 않고 이를 달성할 수 있는 방법이 있습니까?

enter image description here

나의 ㅇㅇcode

.list {
  display: flex;
  flex-wrap: wrap;
  max-width: 500px;
}
.list-item {
  background-color: #ccc;
  display: flex;
  padding: 0.5em;
  width: 25%;
  margin-right: 1%;
  margin-bottom: 20px;
}
.list-content {
  width: 100%;
}
<ul class="list">
  <li class="list-item">
    <div class="list-content">
      <h2>box 1</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    </div>
  </li>
  <li class="list-item">
    <div class="list-content">
      <h3>box 2</h3>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    </div>
  </li>

  <li class="list-item">
    <div class="list-content">
      <h3>box 2</h3>
      <p>Lorem ipsum dolor</p>
    </div>
  </li>

  <li class="list-item">
    <div class="list-content">
      <h3>box 2</h3>
      <p>Lorem ipsum dolor</p>
    </div>
  </li>
  <li class="list-item">
    <div class="list-content">
      <h1>h1</h1>
    </div>
  </li>
</ul>

정답은 아니오 입니다.

그 이유는 플렉스박스 사양에 나와 있습니다.

6. 플렉스 라인

다중 라인 플렉스 컨테이너에서 각 라인의 가로 크기는 라인의 플렉스 항목을 포함하는 데 필요한 최소 크기입니다.

즉, 행 기반 플렉스 컨테이너에 여러 개의 라인이 있는 경우, 각 라인의 높이("크로스 크기")는 라인의 플렉스 항목을 포함하는 데 필요한 최소 높이입니다.

그러나 CSS 그리드 레이아웃에서는 동일한 높이의 행이 가능합니다.

그렇지 않으면 자바스크립트의 대안을 생각해보세요.

이제 이를 달성할 수 있습니다.display: grid:

.list {
  display: grid;
  overflow: hidden;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 1fr;
  grid-column-gap: 5px;
  grid-row-gap: 5px;
  max-width: 500px;
}
.list-item {
  background-color: #ccc;
  display: flex;
  padding: 0.5em;
  margin-bottom: 20px;
}
.list-content {
  width: 100%;
}
<ul class="list">
  <li class="list-item">
    <div class="list-content">
      <h2>box 1</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    </div>
  </li>
  <li class="list-item">
    <div class="list-content">
      <h3>box 2</h3>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    </div>
  </li>

  <li class="list-item">
    <div class="list-content">
      <h3>box 2</h3>
      <p>Lorem ipsum dolor</p>
    </div>
  </li>

  <li class="list-item">
    <div class="list-content">
      <h3>box 2</h3>
      <p>Lorem ipsum dolor</p>
    </div>
  </li>
  <li class="list-item">
    <div class="list-content">
      <h1>h1</h1>
    </div>
  </li>
</ul>

그리드 자체는 플렉스박스가 아니지만 플렉스박스 컨테이너와 매우 유사하게 동작하며 그리드 내부의 항목은 플렉스박스가 될 수 있습니다.

응답 그리드를 원하는 경우에는 그리드 레이아웃도 매우 편리합니다. 다른 즉,에,의,을,하도록을 변경하면 .grid-template-columns:

grid-template-columns: repeat(1, 1fr); // 1 column
grid-template-columns: repeat(2, 1fr); // 2 columns
grid-template-columns: repeat(3, 1fr); // 3 columns

등등...

미디어 쿼리와 혼합하여 페이지 크기에 따라 변경할 수 있습니다.

안타깝게도 페이지 크기가 아닌 컨테이너 크기에 따라 열 수를 변경할 때(다시 사용할 수 있는 웹 구성 요소와 함께 사용하면 좋습니다) 브라우저에서 컨테이너 쿼리/요소 쿼리를 지원하지 않습니다.

그리드 레이아웃에 대한 자세한 정보:

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout

브라우저 간 그리드 레이아웃 지원:

https://caniuse.com/ #http=http-grid

플렉스박스: 모든 플렉스 아이템을 동일한 높이로 만듭니까?

하위항목에서

align-self: stretch;

또는 부모 컨테이너에

justify-content: stretch;

수평적인 문제에 대해서는 flexbox를 사용할 수 있습니다.

.flex-list {
    padding: 0;
    list-style: none;
    display: flex;
    align-items: stretch;
    flex-wrap: wrap;
    justify-content: center;
    gap: .5rem;
}
.flex-list li {
    width: 120px;
    padding: .5rem;
    border-radius: 1rem;
    background: yellow;
}
<ul class="flex-list">
  <li>title 1</li>
  <li>title 2</li>
  <li>title 3<br>new line</li>
  <li>title 4<br>new line</li>
  <li>title 5<br>new<br>line</li>
  <li>title 6</li>
</ul>

또는 수평 및 수직 문제 모두에 대해 그리드를 사용하는 경우:

.grid-list {
   padding: 0;
   list-style: none;
   display: grid;
   grid-auto-columns: 1fr;
   grid-auto-rows: 1fr;
   grid-template-columns: repeat(3, 1fr);
   gap: .5rem;
}
    
.grid-list li {
   padding: .5rem;
   border-radius: 1rem;
   background: yellow;
}   

.grid-list li:last-child {
   grid-column-start: 2;
}  
<ul class="grid-list">
    <li>title 1</li>
    <li>title 2<br>new<br>line</li>
    <li>title 3<br>new line</li>
    <li>title 4<br>new line</li><li>title 5</li>
    <li>title 6<br>new<br>line</li>
    <li>title 7</li>
   </ul>

아니요, 고정된 높이를 설정하지 않으면(또는 스크립트를 사용하지 않으면) 이를 달성할 수 없습니다.


다음은 스크립트를 사용하여 이와 같은 작업을 수행하는 방법을 보여주는 두 가지 답변입니다.

이는 부모 높이가 고정된 경우(Chrome 및 Firefox에서 테스트됨)에서 작동하는 것으로 보입니다.

.child {
        height    : 100%;
        overflow  : hidden;
}

.parent {
        display: flex;
        flex-direction: column;
        height: 70vh; // ! won't work unless parent container height is set
        position: relative;
}

만약 어떤 이유로 그리드를 사용할 수 없다면, 아마도 그것이 해결책일 것입니다.

매핑하려는 항목을 알고 있으면 한 번에 행씩 수행하여 이 작업을 수행할 수 있습니다.해결책인 건 알지만 효과는 있어요.

는 한각의 줄로 . 는 에 4 에 로 로 는 에 height: 50% 버리다, , , , .flex-grow,갖고 있다<RowOne />그리고.<RowTwo />일순간에<div>와 함께flex-column 하면 . 이렇게 하면 효과가 있습니다.

<div class='flexbox flex-column height-100-percent'>
   <RowOne class='flex height-50-percent' />
   <RowTwo class='flex height-50-percent' />
</div>

당신은 그것을 사용해야 합니다.justify-content:stretch그리고.align-items:stretch플렉스에서 합니다.

다음을 통해 이를 달성할 수 있습니다.

align-items: stretch;

이렇게 하면 모든 항목이 플렉스의 최대 높이로 요소의 높이까지 늘어납니다.

를 할 때flex-direction: row, 당신은 그것을 달성할 수 있습니다.heigh: auto항목:

.parent {
  display: flex;
  flex-direction: row;
}
.item {
  height: auto;
}

비슷한 문제가 있었습니다. 저는 다음 CSS 코드를 사용했습니다.

.Box{
    display: flex;
    flex-direction: column;
    align-items: center;
    flex-wrap: wrap;
    justify-content: center;
    flex: 1;
}

하지만 화면과 높이가 달라 물건을 중앙에 배치한 것처럼 보였습니다.

그래서 사용자의 정확한 화면 높이를 알려주는 다음 코드를 사용했고 유연성 때문에 완벽하게 응답할 수 있습니다.

var r = document.querySelector(':root');
let height = $(window).height()+"px";
r.style.setProperty('--height', height);
:root{
    --height: 643px;
}

.Box{
    display: flex;
    flex-direction: column;
    align-items: center;
    flex-wrap: wrap;
    justify-content: center;
    flex: 1;
     height: var(--height); 
}
.btn-outline-primary{
    /* border-top-left-radius: 25%;
    border-top-right-radius: 25%;
    border-bottom-left-radius: 25%;
    border-bottom-right-radius: 25%; */
    width: 100%;
    border-radius: 25px;
    margin: 0px 5px 5px 0px;
}
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
    <link rel='stylesheet' href='./Welcome.css'>

    <title>Point Of Sale</title>
  </head>
  <body>

    <div class="Box border ">
        <h1>Welcome TO POS</h1>
        <div class="">
            <button type="btn" class="btn btn-outline-primary btn-lg"> Log in</button>
            <button type="btn" class="btn btn-outline-primary btn-lg"> Sign in</button>
        </div>
    </div>

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) -->
    <!-- <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script> -->

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+" crossorigin="anonymous"></script>
    <script src="./Welcome.js"></script>

  </body>
</html>

용기의 높이가 역동적인 경우도 있습니다.Flexbox와 함께 작업하는 동안 시나리오에서 해결할 수 있는 방법은 다음과 같습니다.

  • 목록 항목 안에 빈 태그를 추가합니다.
  • JS를 사용하고 높이를 설정합니다(어수선).

목록 항목 안에 빈 태그 추가:

빈 예를 , 에 만 하면 하면 만 에 예를 들어, 다음과 같은 경우.<span />꼬리표를 매다

.parent {
  display: flex;
}
.child {
  display: inline-block;
  align-self: flex-end;
}

이렇게 하면 됩니다.<span />가에 됩니다.flex-end 항목의 , 의 으로 합니다 합니다 으로 의 .그리고 모든 아이템이 같은 키로 보입니다.폭에도 동일하게 적용될 수 있습니다.

요컨대

필요에 따라 메인 플렉스 박스에 'flex-content' 또는 'flex-content'를 추가하기만 하면 됩니다.

그리고 왈라아!

"P" 태그의 높이를 고정하거나 "list-item"의 높이를 고정하여 할 수 있습니다.

"P"의 높이를 고쳐서 했습니다.

오버플로우는 숨겨야 합니다.

.list{
  display: flex;
  flex-wrap: wrap;
  max-width: 500px;
}

.list-item{
  background-color: #ccc;
  display: flex;
  padding: 0.5em;
  width: 25%;
  margin-right: 1%;
  margin-bottom: 20px;
}
.list-content{
  width: 100%;
}
p{height:100px;overflow:hidden;}
<ul class="list">
  <li class="list-item">
    <div class="list-content">
    <h2>box 1</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p>
    </div>
  </li>
  <li class="list-item">
    <div class="list-content">
    <h3>box 2</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    </div>
  </li>
  
    <li class="list-item">
    <div class="list-content">
    <h3>box 2</h3>
    <p>Lorem ipsum dolor</p>
    </div>
  </li>
  
    <li class="list-item">
    <div class="list-content">
    <h3>box 2</h3>
    <p>Lorem ipsum dolor</p>
    </div>
  </li>
  <li class="list-item">
    <div class="list-content">
      <h1>h1</h1>
    </div>
  </li>
</ul>

합니다.
이것을 사용합니다.

.list-content{
  width: 100%;
  height:150px;
}

동일한 높이에 대해 CSS "디스플레이" 속성을 변경해야 합니다.자세한 내용은 주어진 예제를 참조하십시오.

.list{
  display: table;
  flex-wrap: wrap;
  max-width: 500px;
}

.list-item{
  background-color: #ccc;
  display: table-cell;
  padding: 0.5em;
  width: 25%;
  margin-right: 1%;
  margin-bottom: 20px;
}
.list-content{
  width: 100%;
}
<ul class="list">
  <li class="list-item">
    <div class="list-content">
    <h2>box 1</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p>
    </div>
  </li>
  <li class="list-item">
    <div class="list-content">
    <h3>box 2</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    </div>
  </li>
  
    <li class="list-item">
    <div class="list-content">
    <h3>box 2</h3>
    <p>Lorem ipsum dolor</p>
    </div>
  </li>
  
    <li class="list-item">
    <div class="list-content">
    <h3>box 2</h3>
    <p>Lorem ipsum dolor</p>
    </div>
  </li>
  <li class="list-item">
    <div class="list-content">
      <h1>h1</h1>
    </div>
  </li>

언급URL : https://stackoverflow.com/questions/36004926/equal-height-rows-in-a-flex-container

반응형