必威体育Betway必威体育官网
当前位置:首页 > IT技术

滚动条挤占内容宽度、破坏布局的解决方案

时间:2019-07-24 21:42:14来源:IT技术作者:seo实验室小编阅读:83次「手机版」
 

滚动条宽度

#问题

内容增多,滚动条从无到有时,它的出现挤压了内容宽度,导致原来设计好的布局被破坏。

#原因

滚动条的宽度是计算到内容 content 里的。

#解决思路

增加一个中间层,使得外部容器宽度保持设计宽度,内部元素排列保持不变。

#具体案例/方案

使用 antd 的 Modal 弹窗,基于其最简单的基本示例,如图:

这里写图片描述

希望的效果:

  • 弹窗定宽定高;
  • 一排4个,宽度、边距固定;
  • 当总共8艘航母,正好两排,整整齐齐停在泊位,带滚动条。

**实际的效果: **

  • 当滚动条不出现,一切正常;
  • 当滚动条出现, 004 号马上被挤了下去。

这里写图片描述

这里写图片描述

代码

基于 Modal 弹窗 最简单的基本示例

index.js

... ...
<Modal
          title="航空母舰"
          visible={this.state.visible}
          onOk={this.handleOk}
          onCancel={this.handleCancel}
        >
          <p className="card">001 辽宁号</p>
          <p className="card">002 山东号</p>
          <p className="card">003 弹射型</p>
          <p className="card">004 平甲板</p>
          <p className="card">005 核动力</p>
          <p className="card">006 电磁炮</p>
          <p className="card">007 隐形化</p>
          <p className="card">008 歼星舰</p>
        </Modal>
... ...

index.css

... ...

.ant-modal-content{
  width: 500px;
}
.ant-modal-body {
  display: flex;
  flex-wrap: wrap;
  padding: 10px;
  height: 190px;
  overflow-x: hidden;
  overflow-y: scroll;
}

... ...

不好的解决方案

查了下解决方案,有人提到加大容器宽度,然后在外层设置 overflow: hidden 隐藏掉超出的部分,隐藏滚动条。

试着做了下,效果如图:

这里写图片描述

代码

.ant-modal-content{
  width: 500px;
  overflow: hidden; /* 隐藏超出部分 */
}
.ant-modal-body {
  display: flex;
  flex-wrap: wrap;
  padding: 10px;
  height: 170px;
  overflow-x: hidden;
  overflow-y: scroll;
  width: 517px; /* 预留出滚动条的宽度,一般是17px */
}

不好的原因

如此一来,一排是整整齐齐停下了4 个。

但没了滚动条,用户很容易误认为只有这四个。

为了好看损失了必要的功能,这是不可取的。

更好的解决方案

想到“没有什么问题不是加一层中间层解决不了的”,于是加了一层 container p,如图

这里写图片描述

这里写图片描述

代码

index.js

··· ···
<Modal
          title="航空母舰"
          visible={this.state.visible}
          onOk={this.handleOk}
          onCancel={this.handleCancel}
        >
          <p className='container'>
             <p className="card">001 辽宁号</p>
             <p className="card">002 山东号</p>
             <p className="card">003 弹射型</p>
             <p className="card">004 平甲板</p>
             <p className="card">005 核动力</p>
             <p className="card">006 电磁炮</p>
             <p className="card">007 隐形化</p>
             <p className="card">008 歼星舰</p>
          </p>
        </Modal>
··· ···

index.css

... ...

.ant-modal-content{
  width: 500px;
}
.ant-modal-body {
  padding: 10px;
  height: 190px;
  overflow-x: hidden;
  overflow-y: auto;
}
.container {
  display: flex;
  flex-wrap: wrap;
  width: 517px;
}

... ...

原因

原因很简单,现在的内-中-外三层结构里,滚动条吃掉的是外层的内容宽度,中间层的定宽为内层 p 的排列提供了保障。

这里写图片描述

其他方案

可以使用这个伪类 ::-webkit-scrollbar ,不过只能作用于 Chrome 内核的浏览器。可以参考 MDN 文档。

相关阅读

css如何修改滚动条样式

默认滚动条样式如下:那如何修改呢?如下代码:<p class="inner">         <p class="innerbox">         <p style="height:

css滚动条

CSS--滚动条设置;CSS滚动条实现步骤及美化小技巧1、overflow-y : 设置当对象的内容超过其指定高度时如何管理内容;overflow-x : 设

html滚动条实现,超简单

在对应的p中,添加overflow,固定高度为400px<p class="panel-body" style="height: 400px; overflow:scroll"> <p styl

css修改overflow滚动条默认样式

html代码 <p class="inner"> <p class="innerbox"> <p style="height:200px;">这是内容111</p> <p style="

css3自定义滚动条样式写法

欢迎访问我的个人博客 http://xiaolongwu.cn/ 先简单介绍一下各个属性 ::-webkit-scrollbar :滚动条整体部分,其中的属性

分享到:

栏目导航

推荐阅读

热门阅读