<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 修復(fù)一個因為 scrollbar 占據(jù)空間導(dǎo)致的 bug

          2020-5-5    seo達人

          背景

          這一個因為滾動條占據(jù)空間引起的bug, 查了一下資料, 最后也解決了,順便研究一下這個屬性, 做一下總結(jié),分享給大家看看。


          正文

          昨天, 測試提了個問題, 現(xiàn)象是一個輸入框的聚焦提示偏了, 讓我修一下, 如下圖:


          image.png


          起初認為是紅框提示位置不對, 就去找代碼看:


          <Input

           // ...

           onFocus={() => setFocusedInputName('guidePrice')}

           onBlur={() => setFocusedInputName('')}

          />


          <Table

           data-focused-column={focusedInputName}

           // ...

          />

          代碼上沒有什么問題, 不是手動設(shè)置的,而且, 在我和另一個同事, 還有PM的PC上都是OK的:


          image.png


          初步判斷是,紅框位置結(jié)算有差異, 差異大小大概是17px, 但是這個差異是怎么產(chǎn)生的呢?


          就去測試小哥的PC上看, 注意到一個細節(jié), 在我PC上, 滾動條是懸浮的:

          image.png


          在他PC上, 滾動條是占空間的:


          image.png


          在他電腦上, 手動把原本的 overscroll-y: scroll 改成 overscroll-y: overlay 問題就結(jié)局了。


          由此判定是: 滾動條占據(jù)空間 引起的bug。


          overscroll-y: overlay

          CSS屬性 overflow, 定義當(dāng)一個元素的內(nèi)容太大而無法適應(yīng)塊級格式化上下文的時候該做什么。它是 overflow-x 和overflow-y的 簡寫屬性 。

          /* 默認值。內(nèi)容不會被修剪,會呈現(xiàn)在元素框之外 */

          overflow: visible;


          /* 內(nèi)容會被修剪,并且其余內(nèi)容不可見 */

          overflow: hidden;


          /* 內(nèi)容會被修剪,瀏覽器會顯示滾動條以便查看其余內(nèi)容 */

          overflow: scroll;


          /* 由瀏覽器定奪,如果內(nèi)容被修剪,就會顯示滾動條 */

          overflow: auto;


          /* 規(guī)定從父元素繼承overflow屬性的值 */

          overflow: inherit;

          官方描述:

          overlay  行為與 auto 相同,但滾動條繪制在內(nèi)容之上而不是占用空間。 僅在基于 WebKit(例如,Safari)和基于Blink的(例如,Chrome或Opera)瀏覽器中受支持。

          表現(xiàn):

          html {

           overflow-y: overlay;

          }

          兼容性

          沒有在caniuse上找到這個屬性的兼容性, 也有人提這個問題:


          image.png


          問題場景以及解決辦法

          1. 外部容器的滾動條

          這里的外部容器指的是html, 直接加在最外層:


          html {

           overflow-y: scroll;

          }

          手動加上這個特性, 不論什么時候都有滾動寬度占據(jù)空間。


          缺點: 沒有滾動的時候也會有個滾動條, 不太美觀。


          優(yōu)點: 方便, 沒有兼容性的問題。


          2. 外部容器絕對定位法

          用絕對定位,保證了body的寬度一直保持完整空間:


          html {

           overflow-y: scroll; // 兼容ie8,不支持:root, vw

          }


          :root {

           overflow-y: auto;

           overflow-x: hidden;

          }


          :root body {

           position: absolute;

          }


          body {

           width: 100vw;

           overflow: hidden;

          }

          3. 內(nèi)部容器做兼容


          .wrapper {

             overflow-y: scroll; // fallback

             overflow-y: overlay;

          }

          總結(jié)

          個人推薦還是用 overlay, 然后使用scroll 做為兜底。


          內(nèi)容就這么多, 希望對大家有所啟發(fā)。


          文章如有錯誤, 請在留言區(qū)指正, 謝謝。

          日歷

          鏈接

          個人資料

          藍藍設(shè)計的小編 http://m.sdgs6788.com

          存檔

          久久婷婷色香五月综合激情| 蜜臀久久99精品久久久久久小说| 狠狠色丁香久久婷婷综| 久久久久国产精品三级网| 久久亚洲美女精品国产精品| 国产Av激情久久无码天堂| 亚洲乱码中文字幕久久孕妇黑人| 日本国产精品久久| 久久国产乱子伦精品免费午夜| 大香伊人久久精品一区二区| 久久99久久无码毛片一区二区| 狠狠色丁香久久综合婷婷| 中文精品久久久久人妻| 日韩精品久久久久久久电影| 久久精品亚洲日本波多野结衣| 亚洲国产精品无码久久SM| 美女写真久久影院| 国产精品午夜久久| 久久人妻少妇嫩草AV无码蜜桃| 久久99精品久久久久久野外| 久久精品蜜芽亚洲国产AV| 久久国产视屏| 情人伊人久久综合亚洲| 久久久噜噜噜久久中文福利| 亚洲国产精品无码久久青草 | 伊人久久大香线蕉亚洲| 国产aⅴ激情无码久久| 久久精品国产亚洲Aⅴ蜜臀色欲| 99久久精品毛片免费播放| 99久久精品无码一区二区毛片 | 久久这里只精品国产99热| 久久精品国产网红主播| 色欲av伊人久久大香线蕉影院| 久久久青草青青国产亚洲免观| 亚洲一区二区三区日本久久九| 国产亚洲精久久久久久无码| 久久久久亚洲AV片无码下载蜜桃| 无码精品久久久天天影视| 久久九九精品99国产精品| 国产一区二区三区久久| 91精品国产高清久久久久久国产嫩草 |