flex居中布局引起滚动溢出问题

场景

有一个flex布局的容器,item每个都有自己的固定宽度,如果item数量超过一定数值,则这个容器需要出现滚动条,代码如下:

html 复制代码
<div class="wrapper">
    <div>111</div>
    <div>222</div>
    <div>333</div>
    <div>444</div>
    <div>555</div>
</div>
css 复制代码
.wrapper{
  width: 800px;
  background-color: blue;
  display: flex;/*父div设置该属性*/
  overflow-x: scroll;
  justify-content: space-around;
  align-items: center;
}  
.wrapper::-webkit-scrollbar {
  display: none;  
}
.wrapper>div{
  width: 100px;
  height: 50px;
  border: 1px solid black;
  flex-shrink: 0;
}

效果如下:

目前是没问题的,但是当容器宽度变小后,我们期望出现滚动条,结果如下:

js 复制代码
.wrapper{
  width: 200px;  /*修改此处*/
  background-color: blue;
  display: flex;
  overflow-x: scroll;
  justify-content: space-around;
  align-items: center;
}  

chrome下没问题:

在safari上有问题,左侧无法看全,相当于溢出了

问题解决

方法有多种,我看到网上也挺多,我这里主要是多套一层的方式

方式一

多套一层,最外层设置flex布局

html 复制代码
<div class="next-main">
    <div class="next-main-div">
      <div>111</div>
      <div>222</div>
      <div>333</div>
      <div>444</div>
      <div>555</div>
    </div>
</div>
css 复制代码
.next-main {
  width: 200px;
  background-color: salmon;
  display: flex;/*父div设置该属性*/
  overflow-x: scroll;
  justify-content: space-around;
} 
.next-main .next-main-div {
  width: 100%;
  display: flex;
}  
.next-main-div > div {
  width: 100px;
  height: 50px;
  border: 1px solid black;
  flex-shrink: 0;
} 

通过外层多套一个容器,限定好width,当item数量不够时,自然居中,数量多余当前外容器宽度时候,则自动进行滚动,效果如下:

方法二

多套一层容器+inline-flex

inline-flex和flex区别在于inline-flex的外容器会根据内部item进行自动调整

html 复制代码
<div class="next-next-main">
    <div class="next-main-div">
      <div>111</div>
      <div>222</div>
      <div>333</div>
      <div>444</div>
      <div>555</div>
    </div>
</div>
css 复制代码
.next-next-main {
  width: 200px;
  background-color: darkgreen;
  overflow-x: scroll;
} 
.next-next-main .next-main-div {
  display: inline-flex;
  justify-content: space-around;
  align-items: center;
}
.next-main-div > div {
  width: 100px;
  height: 50px;
  border: 1px solid black;
  flex-shrink: 0;
} 

两种方案区别在于flex布局在那一层容器,最终结果都是一样的,第二种方案效果如下

以上就是两种嵌套父级方案了,至于其他方式,大家可以自行去查一下,比如margin: auto

相关推荐
小羊没烦恼!4 分钟前
浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色
前端·数据库·后端·python·web安全·oracle
myaifas7 分钟前
新人的第一个任务该怎么选
前端·产品经理
怕浪猫18 分钟前
前端转全栈最低成本的技术栈选择
前端·javascript·面试
狂师20 分钟前
AI时代我们要如何玩抓包测试:Reqable + AI Agent
前端·程序员·测试
data analyse 45622 分钟前
页面卸载时埋点上报总丢失?sendBeacon 上报与补偿方案
大数据·运维·服务器·前端·数据库·人工智能·数据分析
WebInfra30 分钟前
Rsdoctor 2.0 发布:Agent 驱动的全自动优化工具
前端·javascript·node.js
乘风gg31 分钟前
AI Coding 时代最值钱的东西,软件工程(上)
前端·ai编程·claude
IT_陈寒37 分钟前
一文搞懂Vite的核心概念
前端·人工智能·后端
data analyse 45644 分钟前
前端白屏问题按路由和资源加载顺序定位
大数据·前端·人工智能·数据分析·html
mldong1 小时前
推荐一款支持AI的数据可视化一站式报表平台
前端·人工智能