滾動條出現擠壓頁面寬度,影響布局


問題描述:當頁面突然出現滾動條的時候,頁面會突然被擠壓,因為滾動條也是需要占位的呀。

解決思路:現在目標就是滾動條出現,但是內容位置不變,依然不動。

* {
  margin: 0;
  padding: 0;
}
html {
  overflow-y: overlay;
}
.container {
  height: 200px;
  padding: 17px;
  background-color: #00b83f;
  text-align: right;
}


<div class="container">
  <h1>我是容器內容</h1>
</div>

1、新屬性overlay

chrome下overflow有個新的屬性值overlay,這個屬性簡直就是為了這個問題而生,他和auto有點像,但是區別就是在觸發滾動條時候並不擠壓空間。但是非常遺憾,這個屬性值目前只有chrome支持。

html {
  overflow-y: overlay;
}

2、margin-right: calc(100% - 100vw)

100vw相對於瀏覽器的window.innerWidth,是瀏覽器的內部寬度,注意,滾動條寬度也計算在內!而100%是可用寬度,是不含滾動條的寬度。沒有滾動條的時候,相當於margin-right:0,沒什么影響;有滾動條的時候就相當於margin-right:-17px(17px就是滾動條的寬度啦),被滾動條占據了17px后,內容再重新往右延伸了17px,效果如同overflow:overlay,很完美,並且兼容性還不錯,起碼高版本的ie和ff都沒問題了。

* {
  margin: 0;
  padding: 0;
}
html {
  overflow-y: auto;
  overflow-x: hidden;
}
.container {
  height: 2000px;
  margin-right: calc(100% - 100vw);
  padding: 17px;
  background-color: #00b83f;
  text-align: right;
}

3、絕對定位--來自張鑫旭大佬

:root選擇器:對於 HTML 來說,:root 表示 <html> 元素,除了優先級更高之外,與 html 選擇器相同。

html {
  overflow-y: scroll; //這是為了兼容ie8,不支持:root, vw
}

:root {
  overflow-y: auto;
  overflow-x: hidden;
}

:root body {
  position: absolute;
}

body {
  width: 100vw;
  overflow: hidden;
}

記錄一下,厚積薄發,一飛沖天。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM