Flexbox在button/fieldset/legend中(比如safair)失效問題

(一)前言
常規flex佈局,之前就已經介紹過了,那麼,其實之前,在封裝項目button的問題中,我幾乎都是基於div,爲其提供loading,disabled,這些效果,但是比較麻煩是,在onClick事件中,我必須爲其loading和disbaled的攔截,然後,我嘗試了,使用button的disable來爲其提供禁用,但是噩夢也由此而來,在使用flex定位內部元素居中時候,測試提供ios 9.0版本的safair內部元素未居中對齊,當我拿到測試機進行復現時候,發現確實如此,當然,對於平時開的谷歌移動模式肯定是正常顯示。

(二)解決過程
這時候,我意識到,這肯定是button按鈕,因爲ios出現兼容問題,於是,在我谷歌搜索問題(flexboxnot working on button)的時候,發現在stackoverflow,真有相關問題,鏈接如下

flexbox不支持button

在這裏插入圖片描述
回答者解釋到,button/fieldset/legend 都出現,在某些瀏覽器,不支持對display的修改,自然flexbox佈局就不會生效。

當然,對於這種情況,回答者也給出來相對於的解決方案
在這裏插入圖片描述
回答者思路是,既然button不支持那麼flexbox,但是不代表button內部的其他元素不支持,所以你可以通過button內部再次包裝一個div/span元素,使用他們來實現flexbox。

但是,在我實際中測試發現,我並不想新增元素的方式,這回讓我們dom層級變多,我還不如改爲之前div來進行包裹,但是我發現,button還可以通過如下代碼進行居中

 text-align: center;

對的,就是這麼簡單,對於想知道原因的,建議看下下面兩個鏈接。

Flexbox on a blockifies the contents but doesn’t establish a flex formatting context

Add support for display:flex/grid and columnset layout inside elements

Flexbug #9: Some HTML elements can’t be flex containers

10. Some HTML elements can’t be grid containers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章