IE 11 flex佈局兼容性問題 ---- 不支持min-height 和flex:1

  因爲最近項目要嵌入其它平臺,因此要作IE11 的兼容,那就用IE11打開網頁看一看,一看嚇一跳,頁腳直接到了頁眉的下面,並把主要內容覆蓋了,也就是stick footer 佈局失效了,我寫了一個簡易的代碼來摸擬這種狀況,這是一個vue 的項目,頁面的總體佈局都放到了app.vue中,頁面三個部分構成: 頁眉,中間內容,頁腳。頁眉和頁腳都是固定的,中間部分由內容撐開,典型的stick footer 佈局。中間部分,左右兩列,新建了兩個組件,在component 文件夾下。項目目錄結構以下html

  app.vue 代碼以下:vue

<template>
    <div class="wrapper">
      <!-- 頁眉 -->
      <header>Header</header>
      <!-- 中間內容 -->
      <section class="content-wrapper">
        <side-section></side-section>
        <people class="article"/>
      </section>
      <!-- 頁腳 -->
      <footer>footer</footer>
    </div>
</template>

<script>
import People from "./components/people";
import SideSection from "./components/aside";

export default {
  components: {
    People,
    SideSection
  }
};
</script>

<style>
body {
  margin: 0;
  padding: 0;
}
header {
  height: 60px;
  line-height: 60px;
  text-align: center;
  font-size: 20px;
  background: #192847;
}
footer {
  font-size: 30px;
  height: 60px;
  line-height: 60px;
  text-align: center;
  background: #151923;
}
.wrapper {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
.content-wrapper {
  display: flex;
  flex: 1;
}
</style>

  aside.vue 代碼以下瀏覽器

<template>
  <div class="aside">
    aside
  </div>
</template>
<style scoped>
  .aside {
    width: 200px;
    height: 600px;
    background-color: #152b59;
  }
</style>

  people 代碼以下app

<template>
  <div class="relation-people">
    dddd
  </div>
</template>

<style scoped>
.relation-people {
  background: red;
  height: 300px;
 flex:1;
} </style>

  整個項目啓動運行就是以下結果ide

  確定是flex 佈局失效了,那就是wrapper類的樣式設計有問題。再看一下wrapper類,基本肯定是min-height 的問題。查了一下flex min-height,找到緣由,是min-height 屬性在flex 容器上是無效的,同時也找到了一種解決方式是把min-height的flex 容器,再包含到一個flex 容器中。那咱們就把全部的html代碼包含到一個div 元素中,而後讓這個元素flex 佈局佈局

  <div class="app">
    <div class="wrapper">
      <!-- 頁眉 -->
      <header>Header</header>
      <!-- 中間內容 -->
      <section class="content-wrapper">
        <side-section></side-section>
        <people class="article"/>
      </section>
      <!-- 頁腳 -->
      <footer>footer</footer>
    </div>

  </div>

  而後的style 中增長.app 中,display:flex;flex

.app {
  display: flex;
}

  頁腳是是在下面了,但整個頁面縮短了。spa

.wrapper {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  width: 100%; /* 增長寬度100% */
}

  在IE11 下,有的元素設置flex佈局後,它的寬度有時會變短,須要增長width: 100% 屬性,我也不知道什麼緣由。這時滾動鼠標向下拉,又發現了一個問題,頁腳只是位於當前窗口的下面,而不是在整個內容的下面,設計

  看一下content-wrapper的樣式,應該是flex: 1的問題,在ie11 下 flex: 1 解析爲1 1 0, 而不是其餘瀏覽器的1 1 auto, 因此這時還要對flex: 1進行修改,使用flex-grow: 13d

.content-wrapper {
  display: flex;
  flex-grow: 1; /* flex:1 改變成flex-grow: 1 */
}

  終於沒有問題了

相關文章
相關標籤/搜索