(一)前言
常規flex佈局,之前就已經介紹過了,那麼,其實之前,在封裝項目button的問題中,我幾乎都是基於div,爲其提供loading,disabled,這些效果,但是比較麻煩是,在onClick事件中,我必須爲其loading和disbaled的攔截,然後,我嘗試了,使用button的disable來爲其提供禁用,但是噩夢也由此而來,在使用flex定位內部元素居中時候,測試提供ios 9.0版本的safair內部元素未居中對齊,當我拿到測試機進行復現時候,發現確實如此,當然,對於平時開的谷歌移動模式肯定是正常顯示。
(二)解決過程
這時候,我意識到,這肯定是button按鈕,因爲ios出現兼容問題,於是,在我谷歌搜索問題(flexboxnot working on button)的時候,發現在stackoverflow,真有相關問題,鏈接如下
回答者解釋到,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