You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决父Div内两个子Div浏览器缩放时宽度重叠问题

解决缩放时两列Div重叠的问题

这个问题我碰到过好多次了——本质是浏览器处理百分比宽度时的像素舍入误差搞的鬼:当缩放比例不是100%时,75%+25%的宽度换算成实际像素后,可能因为小数取整导致总和超过父容器的可用宽度,最终触发重叠。要实现像目标页面那样任意缩放都保持比例不重叠的效果,Flexbox是最可靠的解决方案,它天生就是为这种弹性比例布局设计的。

具体修改步骤

1. 重构CSS布局,改用Flexbox

首先把父容器改成Flex容器,移除子元素的float属性,用flex比例来分配空间:

.contentDiv { 
  padding-bottom: 2em; 
  padding-top: 2em; 
  min-height: 25em; 
}
.sectionDiv { 
  border: none; 
  border-radius: 3px; 
  margin-top: -3px; 
  margin: 0 0 1em 0; 
  background: #f2f2f2; 
  padding: 1em; 
  color: #333; 
  position: relative; 
  overflow: visible;
  /* 核心改动:将父容器设置为Flex布局 */
  display: flex;
  /* 可选:如果需要两列之间留空隙,添加gap属性,比如gap: 1em; */
}
/* 移除float,用flex属性控制宽度比例 */
div.assessment-doc-div { 
  flex: 3; /* 占3份,对应75%的比例 */
  overflow: auto; 
  height: 100vh; 
  min-height: 400px; 
}
div.assessment-rubric-div { 
  flex: 1; /* 占1份,对应25%的比例 */
  overflow-y: auto; 
  height: 100vh; 
  min-height: 400px; 
}

2. 修正HTML中的类名(关键!)

我注意到你的HTML里子Div的类名是assessment-doc和assessment-rub-div,但CSS选择器是assessment-doc-div和assessment-rubric-div,这会导致样式完全不生效。必须统一类名,比如修改HTML如下:

<div class="contentDiv" id="doc">
  <div id="currentSubmission" class="sectionDiv">
    <!-- 修正类名,和CSS选择器匹配 -->
    <div class="assessment-doc-div" style="overflow-x: hidden;">
      <iframe id="sub15031550Iframe0" name="sub15031550Iframe0" width="100%" height="983px" scrolling="no" frameborder="0">IFRAME CONTENT </iframe>
    </div>
    <!-- assessment-doc-div -->
    <!-- 修正类名,和CSS选择器匹配 -->
    <div class="assessment-rubric-div">
    </div>
    <!-- assessment-rubric-div -->
  </div>
  <!-- CurrentSubmission -->
</div>
<!-- contentDiv -->

另外,把iframe的固定宽度1277px改成100%,让它自适应父容器的宽度,避免超出或留白。

3. 实现iframe的动态加载

要在页面完全加载后再加载iframe内容,添加以下JS代码:

window.addEventListener('load', function() {
  const targetIframe = document.getElementById('sub15031550Iframe0');
  // 动态设置iframe的src属性
  targetIframe.src = 'document/2339389/15031550?doc=10882892';
});

这样能确保页面所有元素都加载完成后再加载iframe内容,避免提前加载导致的布局偏移。

为什么这个方案能解决问题?

Flexbox会自动计算父容器的可用空间,按照你设置的flex比例(3:1)精确分配给两个子Div,不管浏览器怎么缩放,都会保持这个比例,完全不会出现因像素舍入导致的总和超宽问题。而且Flexbox的兼容性非常好,几乎所有现代浏览器都支持,不用考虑兼容问题。

如果你暂时不想用Flexbox,也可以尝试用calc()微调宽度(比如width: calc(75% - 1px)),但这种方式需要手动处理像素误差,不如Flexbox稳定可靠。

内容的提问来源于stack exchange,提问作者Ash_and_Perl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:45:12