flex : 1은 무엇을 의미합니까?


129

우리 모두가 아시다시피, flex속성에 대한 속기 flex-grow, flex-shrink그리고 flex-basis속성. 기본값은입니다 0 1 auto.

flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

하지만 많은 곳 flex: 1에서 사용되고 있습니다. 1 1 auto또는의 속기 1 0 auto입니까? 그게 무슨 뜻인지 이해할 수없고 Google을 검색해도 아무것도 얻지 못합니다.


1
인용 w3schools.com "플렉스 속성은 flex-grow, flex-shrink 및 flex-basis 속성의 속기입니다."
Imran Ali

답변:


86

설명은 다음과 같습니다.

https://www.w3.org/TR/css-flexbox-1/#flex-common

flex : <positive-number>
flex : <positive-number> 1 0과 동일합니다. 플렉스 항목을 유연하게 만들고 플렉스 기준을 0으로 설정하여 항목이 플렉스 컨테이너에있는 여유 공간의 지정된 비율을받습니다. 플렉스 컨테이너의 모든 항목이이 패턴을 사용하는 경우 해당 크기는 지정된 플렉스 팩터에 비례합니다.

따라서 flex:1동등flex: 1 1 0


10
flex : 1; flex : 1 1 0과 같지 않습니다. 아래의 내 대답을 참조하십시오.
DreamTeK

참고 flex로 모든 어린이에게 똑같이 적용 할 때 실제로 중요한 것은 flex: 1 ? 0;"?"입니다. 무엇이든 될 수 있습니다. 그것은 어떤 차이도 만들지 않을 것입니다
flen dec.

@DreamTeK Chrome과 같은 비표준 호환 브라우저에서만.
TylerH

1
@TylerH 정확하고 내 대답에 언급되었지만 what does flex:1 mean?해석에 열려 있습니다. 작전은 사양을 요구하지 않고 무슨 일이 일어나고 있는지에 대해서만 요구합니다. 불행히도 Chrome은 이제 가장 널리 사용되는 브라우저이며 지원이 필요합니다. 나도 Chrome 팬이나 사용자가 아닙니다!
DreamTeK

1
@TylerH 내 대답에서 "이 브라우저가 사양을 준수하지 않았기 때문에 실패한다는 점에 유의해야합니다."라고 언급 된 이유입니다. 사양에 대한 링크와 함께!
DreamTeK

99

flex: 1 다음을 의미합니다.

flex-grow : 1;    ➜ The div will grow in same proportion as the window-size       
flex-shrink : 1;  ➜ The div will shrink in same proportion as the window-size 
flex-basis : 0;   ➜ The div does not have a starting value as such and will 
                     take up screen as per the screen size available for
                     e.g:- if 3 divs are in the wrapper then each div will take 33%.

1
@CookieMonster 아니오, flex: 1의미 1 1 0...하지만 IE에서는1 1 0px
Ason

@LGSon는, 당신은 너무 기초 값에서 장치를 생략 할 수 1 1 01 1 0px동일합니다. IE는 단지 하나의 유닛 만 지원합니다.
CookieMonster

@CookieMonster Flexbox의 작동 방식을 알고 있습니다. 첫 번째 댓글을 수정 한 것뿐입니다.
Ason

@LGSon은 어떻게 플렉스 : 1 개 수단 1 1 0 픽셀 잘못된 경우 1 1 0px1 1 0동일?
CookieMonster 2017

2
@CookieMonster에 대해 단위없는 값을 사용할 때 콘텐츠가 무시되고 요소 크기가 /를 기반으로하기 때문에 동일하게 렌더링 될 수 있지만 동일하지는 않습니다 . flex-basisflex-growflex-shrink
Ason 2011

78

조심해

일부 브라우저 :

flex:1; 하지 않습니다 동일flex:1 1 0;

flex:1;= flex:1 1 0n;(여기서 n 은 길이 단위).

  • flex-grow : 나머지 유연한 항목에 비해 항목이 얼마나 커질 지 지정하는 숫자입니다.
  • flex-shrink 나머지 유연한 항목에 비해 항목이 축소되는 정도를 지정하는 숫자
  • flex-basis 항목의 길이입니다. 유효한 값 : "auto", "inherit"또는 "%", "px", "em"또는 기타 길이 단위가 뒤에 오는 숫자.

여기서 핵심은 flex-basis에는 길이 단위 가 필요하다는 것 입니다.

예를 들어 크롬 flex:1flex:1 1 0다른 결과를 생성합니다. 대부분의 경우 flex:1 1 0;작동하는 것처럼 보일 수 있지만 실제로 어떤 일이 발생하는지 살펴 보겠습니다.

Flex 기준은 무시되고 flex-grow 및 flex-shrink 만 적용됩니다.

flex:1 1 0;= flex:1 1;=flex:1;

언뜻보기에는 괜찮아 보일 수 있지만 컨테이너의 적용된 단위가 중첩 된 경우; 예상치 못한 기대!

CHROME에서이 예를 사용해보세요.

.Wrap{
  padding:10px;
  background: #333;
}
.Flex110x, .Flex1, .Flex110, .Wrap {
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: column;
  flex-direction: column;
}
.Flex110 {
  -webkit-flex: 1 1 0;
  flex: 1 1 0;
}
.Flex1 {
  -webkit-flex: 1;
  flex: 1;
}
.Flex110x{
  -webkit-flex: 1 1 0%;
  flex: 1 1 0%;
}
FLEX 1 1 0
<div class="Wrap">
  <div class="Flex110">
    <input type="submit" name="test1" value="TEST 1">
  </div>
</div>

FLEX 1
<div class="Wrap">
  <div class="Flex1">
    <input type="submit" name="test2" value="TEST 2">
  </div>
</div>

FLEX 1 1 0%
<div class="Wrap">
  <div class="Flex110x">
    <input type="submit" name="test3" value="TEST 3">
  </div>
</div>

적합성

일부 브라우저가 사양 을 준수하지 않았기 때문에 이것이 실패한다는 점에 유의해야합니다 .

전체 플렉스 사양을 사용하는 브라우저 :

  • Firefox-✓
  • Edge-✓ (나도 충격을 받았습니다.)
  • 크롬-x
  • 용감한-x
  • 오페라-x
  • IE- (웃음, 길이 단위 없이는 작동하지만 하나로는 작동하지 않습니다.)

2019 업데이트

최신 버전의 Chrome이 마침내이 문제를 해결 한 것 같지만 다른 브라우저는 여전히 해결하지 못했습니다.

Chrome Ver 74에서 테스트 및 작동했습니다.


1
값이 0이면 단위는 필수가 아닙니다. 사양은 말한다 flex: 1것과 같은 것입니다 flex: 1 1 0. 귀하의 예제 .Wrap에서 .Flex110x,.Flex1, .Flex110, .Wrap규칙 에서 클래스 를 제거하면 예상대로 작동합니다.

링크를 제공해주세요. 말씀하신 내용을 사양에서 찾을 수 없습니다. 나는 내 대답이 인 flexbox 사양을 기반으로, 아무것도 발명하지 않은

@Obsidian 여기에 링크가 있습니다. w3.org/TR/css-flexbox-1 '속기'부분으로 가면 "flex : [positive-number] flex와 동등 : [positive-number] 1 0 ...
MikeB

1
@Toskan 최대 호환성을 위해 전체 구문을 사용하십시오flex:1 1 0n;
DreamTeK

2
이 차이점을 지적 해 주셔서 감사합니다. 제 문제의 원인을 파악할 수 없었습니다. 현상금이 있습니다.
Nit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.