摘要:但是通過分析驗證了問題所在,之后遇到這種情況的時候便有了解決辦法合理設置百分比,使其計算結果小數點,進而四舍五入之后寬度大于實際渲染寬度
近期在開發的時候遇到一個奇怪的問題,如下圖(ios系統,android暫未發現),第一個和第三個子元素中的角標與父元素始終有一條縫隙,但是第二個沒有,因為第一次遇到,沒有意識到是小數點的問題,然后從頭到尾重新看了相關的樣式,布局,設置都沒有問題,但是那條縫又明明確確的在那兒
核心代碼:
ul { display: flex; justify-content: space-between; padding: 15px; li { position: relative; width: 32%; ... span { position: absolute; right: 0; top: 0; ... } } }
秉著實踐出結果,開始調試(iphone6),所有布局相關的樣式一個個改值,最后在同事的幫助下,發現把width改為31.5%之后就可以了,此時意識到與css小數點有關系
于是針對這個來分析(下面分析僅僅作為參考,瀏覽器內核到底怎么工作的,safari和chrome又分別做了什么暫不清楚):
iphone6寬度為375px,ul寬度為345px,所以32%和31.5分別是110.4和108.675,果然四舍五入之后,前者變小后者變大。網上查找之后說是,瀏覽器會對css小數點有不同的處理規則,ie向下取整,chrome,safari等四舍五入,參考這兩篇文章css布局單元 ,css小數像素問題
大致了解為什么會出現這種情況之后,針對自己這個問題,從深層次的角度分析一下原因,見上述參考鏈接,webkit內核在渲染元素時,真實渲染區域是固定不變的,但是在文檔流中的空間大小是計算出來的,所以直接影響到了下一個元素,出現了第二個元素與第一個元素表現形式不同的情況。如下圖是webkit計算方式:
按照上面計算方式計算寬度為32%時,三個元素的結果如下:
第一個li,x = 15,width = round(15+110.4) - round(15) = 110
第二個li,x = 125.4,width = round(125.4+110.4) - round(125.4) = 111
第三個li,x = 235.8,width = round(235.8+110.4) - round(235.8) = 110
我們可以發現,第一個li,實際渲染區域寬度為110.4,但是文檔流中寬度為110,所以子元素可活動區域為110,那0.4便是那條空隙
第二個li,實際渲染區域也是110.4,但是文檔流中寬度為111,同理第三個計算為110,這便也解釋了為什么一三表現形式一樣
同理,寬度為31.5時,width分別為:109,109,109,實際渲染寬度為108.675
經過測試驗證,ios系統內,safari和應用內webview效果與分析一致,但是通過dom獲取元素width時,與上面計算結果不一致,全部都是四舍五入之后的結果,這一點沒有搞清楚。但是通過分析驗證了問題所在,之后遇到這種情況的時候便有了解決辦法:
合理設置百分比,使其計算結果小數點>=5,進而四舍五入之后寬度大于實際渲染寬度
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/112958.html
摘要:最近被分配到移動端開發組,支持某活動的頁面頁面制作。這算是我第一次真正接觸移動端頁面制作,下面就談談個人總結和思考。這無疑會增強程序的可維護性。規范正如上面討論的,一個頁面由多個組成。的兼容性在安卓及以下是不支持的。 最近被分配到移動端開發組,支持某活動的頁面頁面制作。這算是我第一次真正接觸移動端頁面制作,下面就談談個人總結和思考。 整體流程 開會大體講解、討論與排期 -> 交互設計 ...
摘要:最近被分配到移動端開發組,支持某活動的頁面頁面制作。這算是我第一次真正接觸移動端頁面制作,下面就談談個人總結和思考。這無疑會增強程序的可維護性。規范正如上面討論的,一個頁面由多個組成。的兼容性在安卓及以下是不支持的。 最近被分配到移動端開發組,支持某活動的頁面頁面制作。這算是我第一次真正接觸移動端頁面制作,下面就談談個人總結和思考。 整體流程 開會大體講解、討論與排期 -> 交互設計 ...
閱讀 3317·2019-08-29 16:17
閱讀 1974·2019-08-29 15:31
閱讀 2645·2019-08-29 14:09
閱讀 2547·2019-08-26 13:52
閱讀 743·2019-08-26 12:21
閱讀 2125·2019-08-26 12:08
閱讀 991·2019-08-23 17:08
閱讀 1922·2019-08-23 16:59