플렉스 아이템의 자동 최소 크기
flexbox 기본 설정이 발생했습니다.
플렉스 항목은 기본 축을 따라 내용의 크기보다 작을 수 없습니다.
기본값은 ...
min-width: auto
min-height: auto
... 행 방향 및 열 방향의 플렉스 항목에 각각 적용됩니다.
flex 항목을 다음과 같이 설정하여 이러한 기본값을 무시할 수 있습니다.
min-width: 0
min-height: 0
overflow: hidden
(또는를 제외한 다른 값 visible
)
Flexbox 사양
4.5. 플렉스 아이템의 자동 최소 크기
플렉스 항목에보다 합리적인 기본 최소 크기를 제공하기 위해이 사양에서는 CSS 2.1에 정의 된 및 속성 auto
의 초기 값으로 새로운 값을 소개합니다 .min-width
min-height
auto
가치 와 관련하여 ...
그가요 항목 overflow
이다 visible
플렉스 항목의 메인 축 최소 크기 속성에 지정된 경우 주축에, 지정 자동 최소 크기 . 그렇지 않으면로 계산합니다 0
.
다시 말해:
min-width: auto
및 min-height: auto
시 기본값에만 적용 overflow
입니다 visible
.
overflow
값이 아닌 경우 visible
min-size 속성의 값은입니다 0
.
- 따라서
overflow: hidden
를 대체 할 수있다 min-width: 0
및 min-height: 0
.
과...
- 최소 크기 알고리즘은 기본 축에만 적용됩니다.
- 예를 들어, 행 방향 컨테이너의 플렉스 항목은
min-height: auto
기본적으로 제공 되지 않습니다 .
- 자세한 설명은이 게시물을 참조하십시오.
최소 너비 : 0을 적용 했는데도 항목이 축소되지 않습니까?
중첩 된 플렉스 컨테이너
당신이 HTML 구조의 여러 수준에 플렉스 항목을 처리하는 경우, 기본값을 대체 할 필요가있다 min-width: auto
/ min-height: auto
높은 수준에서 항목을.
기본적으로 더 높은 수준의 플렉스 항목은으로 min-width: auto
아래에 중첩 된 항목의 축소를 방지 할 수 있습니다 min-width: 0
.
예 :
브라우저 렌더링 노트
Chrome과 Firefox / Edge
2017 년부터 Chrome은 (1) min-width: 0
/ min-height: 0
기본값으로 되돌 리거나 (2) 0
미스터리 알고리즘을 기반으로 특정 상황 에서 기본값을 자동으로 적용하는 것으로 보입니다 . (이것은 그들이 개입 이라고 부를 수 있습니다 .) 그 결과 많은 사람들이 레이아웃 (특히 원하는 스크롤바)이 Chrome에서 예상대로 작동하지만 Firefox / Edge에서는 작동하지 않는 것을보고 있습니다. 이 문제는 Firefox와 Chrome의 flex-shrink 불일치에 대해 자세히 설명합니다.
IE11
사양에 명시된 바와 같이 and 속성 의 auto
값 은 "new"입니다. 일부 브라우저는 여전히 렌더링 수 있음이 수단 값이 업데이트되기 전에 그들이 플렉스 레이아웃을 구현하기 때문에 때문에, 기본적으로 값을 초기 값 과 의 CSS 2.1 . 그러한 브라우저 중 하나는 IE11입니다. 다른 브라우저는 flexbox spec에 정의 된 새로운 값으로 업데이트되었습니다 .min-width
min-height
0
0
min-width
min-height
auto
수정 된 데모
.container {
display: flex;
}
.col {
min-height: 200px;
padding: 30px;
word-break: break-word
}
.col1 {
flex: 1;
background: orange;
font-size: 80px;
min-width: 0; /* NEW */
}
.col2 {
flex: 3;
background: yellow
}
.col3 {
flex: 4;
background: skyblue
}
.col4 {
flex: 4;
background: red
}
<div class="container">
<div class="col col1">Lorem ipsum dolor</div>
<div class="col col2">Lorem ipsum dolor</div>
<div class="col col3">Lorem ipsum dolor</div>
<div class="col col4">Lorem ipsum dolor</div>
</div>
jsFiddle