2016-06-15 51 views
1

我在flex容器中添加了clearfix hack,其中包含float flex項目。它適用於Chrome(版本51.0.2704.84)和Firefox(版本47.0),但在Safari(版本9.1.1(11601.6.17))中不起作用。第三項將進入第二排以及有足夠的空間。我想知道這是否是一個錯誤,以及如何解決它。safari flex不能與clearfix hack一起工作

* { 
 
    box-sizing: border-box; 
 
} 
 
#container { 
 
    display: flex; 
 
    flex-wrap: wrap; 
 
    width: 800px; 
 
    border: 1px solid #dcdcdc; 
 
} 
 
/* its me who make this magic */ 
 
#container:before { 
 
    content: " "; 
 
    display: table; 
 
} 
 
#container:after { 
 
    clear: both; 
 
} 
 
#container > div { 
 
    float: left; 
 
    width: 33.3333333%; 
 
    height: 100px; 
 
    padding: 0 15px; 
 
    background-color: #dcdcdc; 
 
    display: flex; 
 
    position: relative; 
 
}
<div id="container"> 
 
    <div>xxx</div> 
 
    <div>ooooo</div> 
 
    <div>nmn</div> 
 
    <div>sdfsdf</div> 
 
</div>

https://jsfiddle.net/3ghwm4ua/8/

回答

1

你clearfix代碼不應該在Safari工作(或Chrome或Firefox,對於這個問題)。

floatclear屬性在柔性容器中沒有影響。他們被忽略。

從規範:

3. Flex Containers: the flex and inline-flex display values

Flex容器確立了其 內容的新柔性格式上下文。這與建立塊格式上下文 相同,除了使用彈性佈局而不是塊佈局。

例如,浮動不會進入柔性容器,和柔性 容器的利潤率不符合其內容的利潤率崩潰。

柔性容器不是塊容器,因此假定塊佈局設計的某些屬性不適用於柔性佈局的 上下文中。特別是:

  • floatclear不產生浮動或柔性物品的通關,不要把它亂流。
+1

謝謝你的回答。我知道浮動不會影響flex。我認爲使用float的目的是爲了防止瀏覽器不支持flex(我不確定我是否正確)....當div寬度設置爲33.3333%時,它應該有每行3個div。但在Safari中每行有2個div。看起來像pesudo元素之前對flex容器有影響... –

+0

我正在觀察一些與僞相似的問題:之後,當禁用clearfix hack的內容屬性 - 溢出問題消失後,將其重新引入並返回問題。 – danjah