뚠뚠멍의 생각들

我遇到的跨瀏覽器問題(主要是Safari)

  • 撰写语言: 韓国語
  • 基准国家: 所有国家country-flag
  • 信息技术

撰写: 2024-09-27

撰写: 2024-09-27 21:56

開發行動網頁時遇到的兩個惱人的跨瀏覽器問題,以及其他需要考慮的問題

將記錄於此。


瀏覽器本身的地址列和導航列造成的視窗高度計算問題


Safari和Samsung Internet瀏覽器本身具有底部導航列。除非特別設定show/hide,否則捲動向下時會出現,向上捲動時會消失。

問題是,這些會導致視窗大小不固定且會改變。

例如,如果將高度設定為100vh,在沒有導航列時,佈局會準確顯示,但是導航列出現時,導航列會遮蓋UI。

要解決這個問題

1. 使用dvh。

dvh是動態視窗大小單位,會自動反映視窗高度的變化。因此,可以應對地址列或底部導航列的有無造成的UI佈局變化。


2. 也可以考慮svh。

svh是除了地址列或導航列之外,純粹UI區域的高度。在預期地址列或導航列會出現的情況下,使用svh會比較準確。



選擇(focus)輸入欄位時,虛擬鍵盤造成UI偏移的問題

在行動版Safari中,選擇輸入欄位時,虛擬鍵盤會造成現有UI元素偏移的問題。在其他瀏覽器中,虛擬鍵盤通常會以absolute方式顯示,但在Safari行動網頁中,它就像應用display block一樣佔用了空間。


Safari在虛擬鍵盤出現時會動態調整視窗高度,導致使用vh單位的元素重新調整,從而產生問題。要解決這個問題,


1. 使用min-height。

固定高度,以防止UI偏移。


2. 應用供應商前綴。(後續說明)

插入在Safari等特定瀏覽器中適用的屬性。


3. 使用JavaScript動態控制視窗大小。

* 不建議使用此方法。捲動高度會瞬間移動,佈局會閃爍。

監聽resize事件以偵測視窗大小變化,並應用適當的樣式。


3-1. focusin事件發生時控制位置。


3-2. 虛擬鍵盤出現時控制位置。(以下範例中應用class)


最好能只用CSS解決,如果以上方法都無法解決,則需要檢查是否是position: absolute或fixed的元素,並移除top、right、left、bottom屬性,修改CSS。


其他

此外,還找到了一些在Safari開發行動網頁時需要考慮的事項。

1. 使用某些屬性時,需要使用供應商前綴。

* 供應商前綴是讓瀏覽器能夠理解和渲染特定CSS屬性的前綴,它讓不同瀏覽器以不同方式實現的CSS能夠按預期生效。藉此可以確保不同瀏覽器之間的一致性,並與舊版瀏覽器相容。


種類

-webkit-: Chrome、Safari等
-moz-: Mozilla Firefox
-ms-: Internet Explorer和Edge
-o-: Opera


需要供應商前綴的典型屬性如下所示。


此外,Safari將LocalStorage和SessionStorage的容量限制在約5MB,並且各個分頁之間不共享儲存空間,因此需要注意。



评论0