例如我们有一个需求:做一个横向滚动的容器,内部内容从左至右横向排列,X轴超出部分通过滚动条拖动显示

  1. <ul>
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. <li>4</li>
  6. <li>5</li>
  7. <li>6</li>
  8. <li>7</li>
  9. </ul>
  1. ul {
  2. width: 300px;
  3. display: flex;
  4. justify-content: space-between;
  5. align-items: center;
  6. overflow-x: scroll;
  7. }
  8. ul li {
  9. width: 100px;
  10. height: 100px;
  11. background-color: #f90;
  12. color: #fff;
  13. list-style-type: none;
  14. flex-shrink: 0;
  15. }

效果如图:
scroll.gif
移动端效果:
image.png
如果我们不希望在移动端中出现滚动条该怎么办呢?

方法一:

使用::-webkit-scrollbar私有属性
MDN文档

注意点: _::-webkit-scrollbar__webkit_内核浏览器的私有属性
只有谷歌浏览器和Safari有效
默认情况安卓、苹果手机浏览器上自带webkit内核,所以此属性兼容手机

  1. ul {
  2. width: 300px;
  3. display: flex;
  4. justify-content: space-between;
  5. align-items: center;
  6. overflow-x: scroll;
  7. }
  8. ul::-webkit-scrollbar {
  9. display: none;
  10. }
  11. ul li {
  12. width: 100px;
  13. height: 100px;
  14. background-color: #f90;
  15. color: #fff;
  16. list-style-type: none;
  17. flex-shrink: 0;
  18. }

image.png
可以看见滚动条消失了,但是此属性并不是万能的,因为还是存在一定的兼容性问题。

方法二(奇淫巧技):

我们可以给ul父容器增加一个padding-bottom

  1. ul {
  2. width: 300px;
  3. display: flex;
  4. justify-content: space-between;
  5. align-items: center;
  6. overflow-x: scroll;
  7. padding-bottom: 200px;
  8. }
  9. ul li {
  10. width: 100px;
  11. height: 100px;
  12. background-color: #f90;
  13. color: #fff;
  14. list-style-type: none;
  15. flex-shrink: 0;
  16. }

image.png
再给这个容器最外层套一个容器,与父容器原本内容保持一样的宽高,并且超出部分不显示

  1. <div class="box">
  2. <ul>
  3. <li>1</li>
  4. <li>2</li>
  5. <li>3</li>
  6. <li>4</li>
  7. <li>5</li>
  8. <li>6</li>
  9. <li>7</li>
  10. </ul>
  11. </div>
  1. .box {
  2. width: 300px;
  3. height: 100px;
  4. overflow: hidden;
  5. }
  6. ul {
  7. width: 300px;
  8. display: flex;
  9. justify-content: space-between;
  10. align-items: center;
  11. overflow-x: scroll;
  12. padding-bottom: 200px;
  13. }
  14. ul li {
  15. width: 100px;
  16. height: 100px;
  17. background-color: #f90;
  18. color: #fff;
  19. list-style-type: none;
  20. flex-shrink: 0;
  21. }

原理:

image.png