나는 “floaty”레이아웃에서 벗어나 향후 프로젝트를 위해 CSS flexbox를 사용할 계획입니다. 현재 버전의 모든 주요 브라우저가 (어떤 방식 으로든) 플렉스 박스를 지원하는 것 같아서 기뻤습니다.
몇 가지 예를보기 위해 “Solved by Flexbox” 로 이동했습니다. 그러나 “고정 바닥 글”예제는 Internet Explorer 11에서 작동하지 않는 것 같습니다. 나는 약간 놀았고 display:flex
다음 <html>
과 같이 추가 하여 작동 width:100%
하도록했습니다.<body>
그래서 첫 번째 질문은 : 누구든지 그 논리를 나에게 설명 할 수 있습니까? 나는 그냥 돌아 다니며 작동했지만 왜 그렇게 작동 했는지 이해하지 못합니다 …
그런 다음 Internet Explorer를 제외한 모든 브라우저에서 작동하는 “미디어 개체”예제가 있습니다. 나도 그것으로 놀았지만 성공하지 못했다.
따라서 두 번째 질문은 Internet Explorer에서 “미디어 개체”예제를 사용할 수있는 “깨끗한”가능성이 있습니까?
답변
http://caniuse.com/#feat=flexbox 에 따르면 :
“에 대한 IE10 및 IE11 기본값 flex
은 2013 년 9 월 기준 초안 사양에 따라이 0 0 auto
아닙니다 0 1 auto
.”
즉, CSS 어딘가에 다음과 같은 내용이 있으면 flex:1
모든 브라우저에서 동일한 방식으로 번역되지 않습니다. 로 변경 1 0 0
해보면 작동하는 것을 즉시 볼 수있을 것입니다.
문제는이 솔루션이 아마도 파이어 폭스를 엉망으로 만들 것이라는 것입니다.하지만 몇 가지 해킹을 사용하여 Mozilla 만 대상으로하고 다시 변경할 수 있습니다.
@-moz-document url-prefix() {
#flexible-content{
flex: 1;
}
}
flexbox
공식이 아닌 W3C 후보 이기 때문에 브라우저는 다른 결과를 제공하는 경향이 있지만 조만간 변경 될 것 같습니다.
누군가가 더 나은 답을 가지고 있다면 알고 싶습니다!
답변
다른 플렉스 컨테이너를 사용하여 min-height
IE10 및 IE11 의 문제 를 해결합니다 .
HTML
<div class="ie-fixMinHeight">
<div id="page">
<div id="header"></div>
<div id="content"></div>
<div id="footer"></div>
</div>
</div>
CSS
.ie-fixMinHeight {
display:flex;
}
#page {
min-height:100vh;
width:100%;
display:flex;
flex-direction:column;
}
#content {
flex-grow:1;
}
작동하는 데모를 참조하십시오 .
- flexbox 레이아웃을 직접 사용하지 마세요.
body
jQuery 플러그인 (자동 완성, 팝업 등)을 통해 삽입 된 요소를 망치기 때문입니다. - 바닥 글이 창 하단에 붙어 긴 내용에 적응 하지 못 하므로 컨테이너에
height:100%
또는height:100vh
을 사용하지 마십시오 . - 사용
flex-grow:1
보다는flex:1
위한 IE10 및 IE11 기본값 원인flex
입니다0 0 auto
하지0 1 auto
.
답변
당신은 단지 필요합니다 flex:1
; IE11의 문제를 해결합니다. 나는 두 번째 Odisseas. 또한 html, body 요소에 100 % 높이를 할당합니다 .
CSS 변경 :
html, body{
height:100%;
}
body {
border: red 1px solid;
min-height: 100vh;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column;
}
header {
background: #23bcfc;
}
main {
background: #87ccfc;
-ms-flex: 1;
-webkit-flex: 1;
flex: 1;
}
footer {
background: #dd55dd;
}
작동 URL : http://jsfiddle.net/3tpuryso/13/
답변
다음은 Internet Explorer 11 및 Chrome에서도 작동하는 flex를 사용하는 예입니다.
HTML
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<title>Flex Test</title>
<style>
html, body {
margin: 0px;
padding: 0px;
height: 100vh;
}
.main {
display: -webkit-flex;
display: flex;
-ms-flex-direction: row;
flex-direction: row;
align-items: stretch;
min-height: 100vh;
}
.main::after {
content: '';
height: 100vh;
width: 0;
overflow: hidden;
visibility: hidden;
float: left;
}
.left {
width: 200px;
background: #F0F0F0;
flex-shrink: 0;
}
.right {
flex-grow: 1;
background: yellow;
}
</style>
</head>
<body>
<div class="main">
<div class="left">
<div style="height: 300px;">
</div>
</div>
<div class="right">
<div style="height: 1000px;">
test test test
</div>
</div>
</div>
</body>
</html>
답변
때로는 스타일 앞에 ‘-ms-‘를 추가하는 것처럼 간단합니다. -ms-flex-flow : row wrap; 또한 작동하도록합니다.