flex 容器如果設定豎排,並且垂直居中,flex子專案的文字會溢位容器。解決辦法是給子專案設定乙個 max-width:100%。edge修復了這個bug。
下面這段**,來動手看下在ie10、11下的表現。
<在ie11下預覽,如圖:style
>
.flexcontainer
.flexitem
style
>
<
script
src="js/jquery-1.9.1.min.js"
>
script
>
head
>
<
body
>
<
div
class
="flexcontainer"
>
<
div
class
="flexitem"
>
the contents inside of this box are overflowing their container.
div>
div>
body
>
經過試驗發現,就算不設定 flex-direction:column, 這段文字依舊義無反顧地溢位,而不會像在其他瀏覽器下那樣,自動換行。比如chrome瀏覽器:
給子專案設定 max-width: 100%,並不會對其他瀏覽器造成額外的影響。
為什麼會這樣?原來和 flex-shrink 的預設值有關係。ie預設為 0,既空間不足,專案不縮小。
但是如果設定了 flex-shrink 為 1 呢,ie 依舊固執地不縮小這個專案,原因在於容器同時設定了 flex-direction:column 和 align-items:center。
原來是這倆屬性在ie10不能並存。只要取消其中乙個,並把flex-shrink設定為1,該溢位問題就可以得到解決。
簡寫的flex屬性,第三個引數 flex-basis 的值如果不寫單位,在ie10,11下會該 flex 被忽略。比如 flex: 0 1 0%; 這個百分號不能省略。
edge修復了這個bug。
也可以寫成0px,但是推薦用0%。因為有些css壓縮工具會把 0px 轉換成 0,而不會對 0% 下手轉換。
豎排彈性容器下,如果子項寬度大於容器寬度,子項並不會隨著容器保持寬高比例。
解決辦法是給這個子項再包裹乙個容器,這樣子項就不再是乙個伸縮專案,尺寸上就可以正常縮放。
<比如這個寬高為800*200,flex容器寬度300。給加乙個容器,正常縮放。小聲的說,這個問題貌似chrome也有呢...style
>
*/.flexcontainer
.flexitem
img
style
>
head
>
<
body
>
<
div
class
="flexcontainer"
>
<
div
class
="flexitem"
>
<
img
src=""
>
div>
div>
body
>
新的規範更改了flex的預設值,而ie10,11依舊沿用舊的預設語法。如圖:
declaration
what it should mean
what it means in ie 10
(no flex declaration)
flex: 0 1 auto
flex: 0 0 auto
flex: 1
flex: 1 1 0%
flex: 1 0 0px
flex: auto
flex: 1 1 auto
flex: 1 0 auto
flex: initial
flex: 0 1 auto
flex: 0 0 auto
flex-basis如果有乙個明確的值,既除了auto以外的值,那麼該專案就相當於有乙個明確的寬度/高度,佔據固定空間。
在ie10/11下,盒子內容的寬度是 flex-basis 設定的具體的寬度,它會無視我們設定的
box-sizing:border-box;
如果 flex-basis 值是100%,元素就會溢位容器。比如看這段**在ie下的表現:
<在ie11的效果如下:style
>
.flexcontainer
.flexitem
style
>
head
>
<
body
>
<
div
class
="flexcontainer"
>
<
div
class
="flexitem"
>item with padding and border
div>
div>
body
>
這個bug在edge已經修復。但是基於ie10和11的廣大使用者群,還是得想辦法解決。解決辦法有兩種:
1. flex-basis 設定為 auto,不給它設定具體寬度,然後再給這個元素加乙個width:100%。
2. 給子項再包裹乙個容器,把這個容器當成flex容器的子項,在這個容器上設定flex: 0 0 100%。
ie10 、11,不支援 flex 第三個引數flex-basis 的值為 calc()。如圖:
ie11下直接報錯,單獨寫 flex-basis 則可以識別。
而在ie10下,無論簡寫不簡寫,都無法識別這個值。
解決辦法:
1. 針對ie10和ie11:
.flexitem2. 如果是ie 11,不採用flex簡寫即可。
.flexitemie10、11: 內斂元素不能作為彈性伸縮專案,包括
:before
和::after 這些偽類元素。
ie11修復了這個bug,但是:before
和::after 仍然不能作為伸縮彈性專案。
解決辦法是給內聯元素加個display: block; 即可。
flex: 0 0 100%!important;給flex簡寫加 !important,在ie10,只對前兩個引數有效,第三個引數無效。這個bug在ie11修復。而在ie10,再單獨寫上flex-bsis即可:
.flexitemimportantoverride實際專案應用中的補充:在ie10,justify-content 對子專案的span不起作用。這時候把span設定為 display:block; 即可。
在Ubuntu 下快速安裝IE瀏覽器
絕大多數時間我都是用 firefox 但是 ie 也有 ie 的用處,有不少網頁非 ie 不可,尤其是中國這些銀行的網上銀行的網頁,用 firefox 都不太容易對付,不如 ie 來的方便。浦東發展銀行的倒是支援 firefox 可惜我還沒有辦浦發銀行的銀行卡。在 linux 下執行 ie,無非是用...
ajax方法在IE瀏覽器下快取問題
最近在做專案的時候,遇到乙個問題,使用jquery的ajax方法進行非同步提交時,在ie瀏覽器下會存在快取問題,即當第一次請求傳送到伺服器後,如果後續的請求引數跟第一次相同,則瀏覽器會直接返回快取的結果而不是去伺服器獲取 經測試,在火狐與谷歌瀏覽器中不存在這樣的問題 通過上網查詢有關資料,現將解決方...
vue專案在IE瀏覽器下的異常解決
vue cli2構建vue專案,在google瀏覽器下渲染 互動正常。在ie11瀏覽器開啟頁面未能正常渲染。某單頁面專案是,導航無法正常路由。分析報錯 promise 未定義,推測js的六瀏覽器相容性問題。其他類似報錯 vuex vuex requires a promise polyfill in...