본문 바로가기
웹 개발/UI

css Flex IE 이슈 정리

by 주식 키우는 개발자 2021. 1. 12.
반응형
반응형

1. IE11 > 말줄임 텍스트가 보이지 않는 이슈

1.1 이슈 내용

flex 구조 내에서 특정 상황에서 말줄임 텍스트가 노출되지 않는 이슈 발생

  • 원인 : 부모와 자식 요소에서 flex 구조를 사용했는데 높이를 잡지 못하는 경우에 말줄임을 하게 되면 overflow:hidden 속성에 의해서 텍스트가 노출되지 않게 됩니다.

1.2 테스트

아래 사진처럼 크롬에서는 정상 노출되지만 IE에서는 말줄임 텍스트가 노출되지 않는 상황을 재현 해보았습니다.

  • 크롬(정상)

Untitled (1)

  • IE(이슈)

 

flex_ellipsis_01

IE에서도 높이를 잘 잡고 말줄임이 잘 되던 영역에 flex: 1 을 추가하였더니 아래 사진처럼 사라졌습니다.

flex_ellipsis_02

다시 flex: 1 을 지우고, 이번에는 노출이 안되던 요소의 flex: 1 을 제거 해보았습니다. 그 결과 정상적으로 노출되는 것을 확인할 수 있습니다. 부모의 높이가 정해지지 않은 상황에서 자식 요소에 flex: 1 속성을 사용해 높이값을 잡을 수 없게 되었을 때 요소가 사라지는 것을 알 수 있습니다.

그런데 flex 속성만 있을 뿐 높이를 잡아준 적은 없는데 왜 이런 경우에는 정상적으로 동작할까요?

그 이유는 display: flex 의 성질 때문인 것 같습니다. flex-direction: row 일 때는 기본적으로 아이템들을 수평으로 나열하고 높이는 최대로 채우는 성질을 가지고 있습니다. 그래서 따로 높이를 잡아주지 않더라도 영역을 차지하고 말줄임 텍스트가 노출될 수 있는 것입니다.

그렇다면 flex-direction:column 일 경우에는 아이템을 수직으로 나열하고 높이 값은 따로 변하지 않습니다. 그렇기 때문에 아

래 사진처럼 column 을 추가해도 말줄임 텍스트가 사라지는 것을 확인할 수 있습니다.

flex_ellipsis_04

정상적으로 노출되는 요소에는 이미 height: 100px 이라는 높이를 정해놓았기 때문에 column 을 추가했을 경우에도 영향을 받지 않는 것을 확인할 수 있었습니다.

flex_ellipsis_05

1.3 정리

  • 높이가 없는 상태에서 flex: 1 를 사용하거나 flex-direction: column 을 사용해서 높이 값을 제대로 인식하지 못하는 경우에서 발생하고 있기 때문에 높이를 해결해줘야 합니다.
  • div 태그로 한번 감싸기
  • 고정 높이값 사용하기
  • FullPage 를 사용해야한다면 html 부터 height 상속 받아서 사용하기

2. IE11 > min-height 높이 못잡는 이슈

2.1 이슈 내용

ie에서 flex: 1 속성 사용시 부모의 높이가 min-height 를 제대로 인식하지 못해서 발생

  • 자료

https://caniuse.com/flexbox

image

 

2.2 테스트

min-height로 발생하는 이슈를 재현해보고 해결해보도록 하겠습니다.

.wrapper {
   display: flex;
   flex-direction: column;
   min-height: 500px;
   font-size: 50px;
}
.header,
.footer {
  height: 100px;
  background-color: lightblue;
}
.content {
  flex: 1;
}
 <body class="wrapper">
   <header class="header">Header</header>
   <main class="content">
     Content <br />
     Content <br />
     Content <br />
   </main>
   <footer class="footer">footer</footer>
</body>

위와 같이 최소 500px을 가지는 .wrapper 요소에 header,footer 는 100px 씩 높이를 차지하고 content 만 가득 차도록 하는 코드를 작성했습니다. 이렇게 작성하게 크롬과 IE에서 아래와 같은 결과를 얻을 수 있습니다.

  • 크롬

스크린샷 2021-01-11 오후 2 48 54

  • IE11

스크린샷 2021-01-11 오후 3 50 24

보시는 것처럼 크롬에서는 min-height 와 함께 사용한 flex: 1 속성이 정상적으로 동작하고 있지만, IE11 에서는 contetnt 영역을 제대로 잡지 못하는 것을 확인하실 수 있습니다.

콘텐츠 내용이 길어지더라도 크롬은 정상적으로 동작하고 있고, IE11 는 영역을 제대로 잡지 못하고 있습니다.

  • 크롬

Jan-11-2021 15-03-55

  • IE

스크린샷 2021-01-11 오후 3 50 57

2.2 해결

위 이슈를 해결하기 위해서 아래와 같이 스타일을 수정해줍니다.

 .wrapper {
   display: flex;
   flex-direction: column;
   height: 500px; /* min-height 에서 height */
   font-size: 50px;
}
.header,
.footer {
  flex-shrink: 0; /* 추가 */
  height: 100px;
  background-color: lightblue;
}
.content {
  flex: 1 0 auto; /* 1 에서 1 0 auto */
}

  • min-height 대신 height 사용
  • content, header, footerflex-shrink : 0 속성 추가, 즉 영역이 줄어들지 않도록 해줌.

수정을 하면 IE11 에서도 컨텐츠 내용이 적을때나 많을때나 정상적으로 영역을 잡는 것을 확인하실 수 있습니다.

  • IE11 (컨텐츠 적을 때)

image

  • IE11 (컨텐츠 많을 때)
 

스크린샷 2021-01-11 오후 3 52 05

위 케이스들을 기반으로 Flex를 사용한다면 주의해야하는 부분

  • 전체적인 이슈가 flex-direction: column 으로 수직배치를 할 때 높이를 제대로 잡지 못해서 발생하고 있습니다.
  • 높이를 채우기 위해 flex:1 을 사용한다면 크롬 외의 브라우저에서 테스트가 필요할 것 같습니다.
  • 무조건 flex: 1 을 사용하기 보다 flex-grow , flex-shrink 를 상황에 맞게 사용하는 것도 좋을 것 같습니다.
  • 크롬 외의 브라우저에서는 height 를 정확히 명시해주지 않으면 에러가 발생할 수 있습니다.

댓글