CSS flex 벤더 프리픽스 정리
Swimjiy
—March 31, 2019
현재 진행 중인 앱 프로젝트에서 안드로이드 4.3 젤리빈에서 CSS flex 속성이 먹히지 않는 이슈가 발생했다.
우리 모두 하위 버전을 멀리합시다!
미리 알아두어야 할 점은 현재 우리가 흔히 사용하고 있는 flex는 2012년에 정의된 명세이며, 이와 약간 사용법이 다른 2009년 명세가 존재한다는 것이다.
찾아보니 안드로이드 2.1 ~ 4.3 버전에서는 2009년의 flex 명세를 지원하기 때문에 webkit 벤더 프리픽스를 붙이고 2009년 버전의 flex 를 입력해야 한다고 한다.
따라서 이번 이슈를 해결할 겸 버전별 flex 벤더 프리픽스 코드를 정리했다.
컨테이너 적용 속성
flex 설정
.container {display: -webkit-box | -webkit-inline-box; /* Android 2.1 ~ 4.3, ios 6-, safari 3.1-6 */display: -moz-box | -moz-inline-box; /* Firefox 19- */display: -ms-flexbox | -ms-inline-flexbox; /* IE10 */display: -webkit-flex | -webkit-inline-flex; /* Chrome */display: flex | inline-flex;}
주축
기존 flex-direction 이 column-reverse 처럼 주축과 역순 여부를 동시에 설정할 수 있었다면, 하위 버전에서는 box-orient 와 box-direction 으로 주축과 역순 여부를 분리하여 설정한다는 점에 주의한다.
.container {-webkit-box-orient: horizontal | vertical; /* Android 2.1 ~ 4.3, ios 6-, safari 3.1-6 */-webkit-box-direction: normal | reverse; /* Android 2.1 ~ 4.3, ios 6-, safari 3.1-6 */-moz-box-orient: horizontal | vertical; /* Firefox 19- */-moz-box-direction: normal | reverse; /* Firefox 19- */-ms-flex-direction: row | column | row-reverse | column-reverse; /* IE10 */-webkit-flex-direction: row | column | row-reverse | column-reverse; /* Chrome */flex-direction: row | column | row-reverse | column-reverse;}
줄바꿈
맨 앞에 있는 속성값이 기본값이다.
.container {-webkit-box-lines: single | multiple; /* ios 6-, safari 3.1-6 */-moz-box-lines: single | multiple; /* Firefox 19- */-ms-flex-wrap: none | wrap | wrap-reverse; /* IE10 */-webkit-flex-wrap: nowrap | wrap | wrap-reverse; /* Chrome */flex-wrap: nowrap | wrap | wrap-reverse;}
아이템 가로 정렬
space-between 는 justify 로 대응할 수 있으나 space-around 는 일치하는 2009년 속성값이 없으므로 사용에 유의한다.
.container {-webkit-box-pack: start | end | center | justify;/* Android 2.1 ~ 4.3, ios 6-, safari 3.1-6 */-moz-box-pack: start | end | center | justify; /* Firefox 19- */-ms-flex-pack: start | end | center | justify; /* IE10 */-webkit-justify-content: flex-start | flex-end | center | space-around | space-between;/* IE10 */justify-content: flex-start | flex-end | center | space-around | space-between; /* Chrome */}
아이템 세로 정렬
.container {-webkit-box-align: start | end | center | stretch | baseline;/* Android 2.1 ~ 4.3, ios 6-, safari 3.1-6 */-moz-box-align: start | end | center | stretch | baseline; /* Firefox 19- */-ms-flex-align: start | end | center | stretch | baseline; /* IE10 */-webkit-align-items: flex-start | flex-end | center | stretch | baseline; /* IE10 */align-items: flex-start | flex-end | center | stretch | baseline; /* Chrome */}
아이템 적용 속성
크기
.item {-webkit-box-flex: 1; /* Android 2.1 ~ 4.3, ios 6-, safari 3.1-6 */-moz-box-flex: 1; /* Firefox 19- */-ms-flex: 1; /* IE10 */-webkit-flex: 1; /* Chrome */flex: 1;}
정렬 순서
2009년 명세는 양의 정수, 2012년 명세는 정수를 속성값으로 쓸 수 있다.
.item {-webkit-box-ordinal-group: 1; /* ios 6-, safari 3.1-6 */-moz-box-ordinal-group: 1; /* Firefox 19- */-ms-flex-order: 0; /* IE10 */-webkit-order: 0; /* Chrome */order: 0;}
결론
세부적으로는 차이가 존재하지만 크게 정리해보자면 아래의 표와 같다.
| Version | Vendor Prifix |
|---|---|
| Android 2.1 ~ 4.3, ios 6-, safari 3.1-6 | -webkit- 접두사 + 2009년 명세 |
| Firefox 19- | -moz- 접두사 + 2009년 명세 |
| IE10 | -ms- 접두사 + 2009년 명세 |
| Chrome | -webkit- 접두사 + 2012년 명세 |
| 기타 최신 버전 | 없음 |
개인적으로 정리한 내용으로 결함이 있을 수 있으며, 이슈 대응 뒤 정리한 내용과 다른 점이 생기면 수정할 예정이다.
References
https://css-tricks.com/using-flexbox https://m.blog.naver.com/cihjl/221318653767 https://ptb2.me/flexbox