Flexbox가 종횡비를 유지하지 않고 이미지를 늘이는 이유는 무엇입니까?


172

Flexbox는 이미지를 원래 높이로 늘이는 동작이 있습니다. 즉, 자식 이미지가있는 flexbox 컨테이너가 있고 해당 이미지의 너비를 조정하면 높이가 전혀 조정되지 않고 이미지가 늘어납니다.

div {
  display: flex; 
  flex-wrap: wrap;
}
img{ 
  width: 50%
}
<div>
    <img src="https://loremflickr.com/400/300" >
    <h4>Appify</h4>
    <p> some text </p>
</div>

원인은 무엇입니까?

내가 의미하는 바를 보여주기 위해이 CodePen 을 추가했습니다 .


6
Firefox와 IE에서는 잘 작동합니다. Chrome에서는 align-self:flex-start 이미지로 수정할 수 있습니다 . 이유를 모르겠습니다. 아마도 크롬의 기본값이 스트레치 일 수 있습니다.

2
또한 높이 추가 : 100 %; img에 문제가 해결되면 왜 이미지가 늘어나는 지 알고 싶습니다.
Paran0a

3
@blonfu, 모든 브라우저의 기본값은 align-items: stretch/ align-self: stretch입니다. 각 항목 제거 주위에 테두리를 추가하는 경우 wrap, 당신은 모든 항목이 모든 브라우저에서 스트레칭 알 수 있습니다 : codepen.io/anon/pen/oLXBVx?editors=1100
마이클 벤자민

Ok. 나는 이것을 배우지 만 이미지는 크롬과 다른 브라우저에서 다르게 작동합니다. 높이를 정의하지 않으면 Chrome은 가로 세로 비율을 존중하지 않습니다.

@blonfu, 네. 브라우저 불일치와 더 세분화 된 수준이 있습니다.
Michael Benjamin

답변:


386

때문에 스트레칭 align-self기본값입니다 stretch. 로 설정 align-self합니다 center.

align-self: center;

여기 문서를 참조하십시오 : align-self


예, 그러나 다른 브라우저는 이미지의 종횡비를 관리합니다. 크롬도는 img와 플렉스 기준을 적용

13
내가 생각하는 align-self: start;이미지가 수직 (CSS 없음)하는 어떤 styleless 이미지와 같은 그들의 용기 (안 센터)의 TOP에 정렬해야하기 때문에 강한 해답이 될 수 있습니다. 어느 쪽이든 두 답변 모두 스트레칭을 수정합니다. 따라서 OP가 원하는 것이 무엇인지에 따라 다릅니다. OP의 게시물에서 '수직 중심'인상을 얻지 못했습니다.
두꺼비

이미지에 너비를 정의하지 않고 플렉스 컨테이너에 있으면 100 %로 늘어납니다. align-self: [flex-start, center...others]이미지가 플렉스 컨테이너 너비의 100 %를 차지하지 않도록합니다. align-self:center물론 수정하지만 컨테이너 사용의 시작 또는 끝에서 이미지를 시작하려면align-items: flex-start or flex-end
cacoder

1
또한 align-items: center부모 에게 (또는 귀하의 필요에 맞는 모든 정렬) 배치 할 수 있습니다 .
electrovir

17

키 속성은 align-self: center다음과 같습니다.

.container {
  display: flex;
  flex-direction: column;
}

img {
  max-width: 100%;
}

img.align-self {
  align-self: center;
}
<div class="container">
    <p>Without align-self:</p>
    <img src="http://i.imgur.com/NFBYJ3hs.jpg" />
    <p>With align-self:</p>
    <img class="align-self" src="http://i.imgur.com/NFBYJ3hs.jpg" />
</div>


2

나는 Foundation 메뉴에서 같은 문제에 직면했습니다. align-self: center;나를 위해 일하지 않았다.

내 해결책은 이미지를 <div style="display: inline-table;">...</div>


2
그래도 flexbox에 관한 것입니다.

이것은 이다 인 flexbox을위한 솔루션. 이미지와 div는 flexbox 컨테이너 안에 있습니다.
isapir

0

첨가 margin이미지 정렬에 :

을 원했기 때문에 다음 imageleft-aligned추가했습니다.

img {
  margin-right: auto;
}

마찬가지로에 대해 다음 imageright-aligned추가 할 수 있습니다.margin-right: auto; . 스 니펫은 두 가지 유형의 정렬에 대한 데모를 보여줍니다.

행운을 빕니다...

div {
  display:flex; 
  flex-direction:column;
  border: 2px black solid;
}

h1 {
  text-align: center;
}
hr {
  border: 1px black solid;
  width: 100%
}
img.one {
  margin-right: auto;
}

img.two {
  margin-left: auto;
}
<div>
  <h1>Flex Box</h1>
  
  <hr />
  
  <img src="https://via.placeholder.com/80x80" class="one" 
  />
  
  
  <img src="https://via.placeholder.com/80x80" class="two" 
  />
  
  <hr />
</div>


0

align-self 기본값은 늘이기 때문에 늘이는 것입니다. 이 경우 두 가지 해결책이 있습니다. 1. set img align-self : center OR 2. set parent align-items : center

img {

   align-self : 중앙
}

또는

.부모의 {
  정렬 항목 : 가운데
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.