把浏览器窗口从宽慢慢调窄时,中间内容块的宽度不是平滑变化的,而是"一蹦一蹦"地从一档跳到另一档。
具体表现:
用户原话:
当我把这个浏览器的宽度从宽逐渐调窄的时候,中间内容块的宽度是一蹦一蹦变化的,也就是说它好像从一个档调到另外一个档。 这就导致了一个什么样的问题呢?就是在某些固定的宽度下面,它两边有两个非常宽的空白。当调整到下一个档的时候,他就会马上变化,也就是内容的宽度和网页浏览器的宽度基本上就一致了。然后如果再拉宽或者是再缩减的话,它又变成这样子。 这是不是响应式布局的特定问题?也就是说,它只有几个档。这个问题能解决吗?
当我把这个浏览器的宽度从宽逐渐调窄的时候,中间内容块的宽度是一蹦一蹦变化的,也就是说它好像从一个档调到另外一个档。
这就导致了一个什么样的问题呢?就是在某些固定的宽度下面,它两边有两个非常宽的空白。当调整到下一个档的时候,他就会马上变化,也就是内容的宽度和网页浏览器的宽度基本上就一致了。然后如果再拉宽或者是再缩减的话,它又变成这样子。
这是不是响应式布局的特定问题?也就是说,它只有几个档。这个问题能解决吗?
来源:assets/css/bootstrap.min.css 里 Bootstrap 的 .container 固定档位 ——
assets/css/bootstrap.min.css
.container
.container{ width:100%; padding-right:15px; padding-left:15px; margin-right:auto; margin-left:auto } @media (min-width:576px){ .container{ max-width:540px } } @media (min-width:768px){ .container{ max-width:720px } } @media (min-width:992px){ .container{ max-width:960px } } @media (min-width:1310px){ .container{ max-width:1280px } }
max-width 是离散的平台:一旦视口跨过某个断点,容器宽度就瞬间从旧上限跳到新上限,中间没有任何过渡。这就是"一蹦一蹦"的全部原因 —— 不是断点太少,而是容器宽度本身只有 4 个取值。
max-width
视口 320~1920 每 1px 一档,量 .container 实测宽度(getBoundingClientRect):
getBoundingClientRect
结论:1920 宽屏下单边空出 320px,1920 视口有 521 个宽度落在"留白 ≥60px"区间里。 用户说"某些固定宽度下两边有两个非常宽的空白"完全成立。
col-lg-*
single.php 用 Bootstrap 栅格:
single.php
$col_array = array('one_side' => 'col-lg-12', 'two_side' => 'col-lg-8');
col-lg-* 在 992px 以下失效、变成整行,所以侧栏消失的同时正文宽度也突变。这是第二个跳变源(与容器档位叠加,992 那一跳最难解释)。
.container 宽 1280 padding 15/15 margin 44/44 max-width 1280px border-box .row 宽 1280 margin -15/-15 .details 宽 853.33 max-width 66.6667%(col-lg-8) .sidebar 宽 426.66 max-width 33.3333%(col-lg-4)
让内容区宽度随视口平滑连续变化,消除"平台 + 突变"的跳变观感,同时避免两边出现过宽的空白。
具体验收标准(待确认方案后细化):
bootstrap.min.css
width:100%
width: min(某上限px, 100% - 2×边距)
clamp()
assets/css/
site.css
index.php
与 #28(图片 text-indent 溢出)、#29(h3/h4 样式区分度)都无关:那条讲正文元素样式,本条讲外层容器 .container 的固定 max-width 档位导致整块内容宽度随视口跳变,改的是布局容器宽度策略,可以单独验收。
bootstrap.min.css 里 .container 只有 4 个固定 max-width:
档内宽度恒定不变,所以窗口越宽留白越宽;跨断点瞬间跳一格。1920 视口下每边白 320px(约占窗口 1/3),有 521 个宽度落在"留白 ≥60px"区间。
所以"加密断点"解决不了 —— 加密只是让台阶变矮(1 档变 2 档变成 0.5 档),台阶还在。
宽度不再查表,改成算:
width: min(1440px, 100% - 2 * max(16px, 2.5vw))
min()
@media
max(16px, 2.5vw)
配套三件事缺一不可:
max-width: none
width
padding
.row
-15px
.k-nav
.navbar
_geom31.js
_shot31.js
_align31.js
_mkzip364.py
_mkzip364_falsify.py
反证注入:把旧的 4 档注回去 ⇒ 红出 4 个平台、单步突变 320px、1167 个宽度留白超标。另单独验了"只改容器不改行元素"⇒ 红出 1601 个视口缩进变 0px。
992px 处正文宽度仍会从 941 突变到 628 —— 那是侧栏出现导致的(col-lg-8 在 992 以下失效、正文变整行),不是台阶。你选的是「侧栏行为保持现状」,所以这版没动栅格结构。如果希望这一处也平滑,需要另外改布局,可以新开一单。
col-lg-8
ac1575f
kratos_yang-3.2.64.zip
9bb342b66353bbe0df5ec17ffe44df4d
升级后我再量一次线上真实几何确认,然后关单。
探测到 kratos.min.css?ver=3.2.64、site.css?ver=3.2.64,确认 3.2.64 已上线。
kratos.min.css?ver=3.2.64
site.css?ver=3.2.64
commit ac1575f,包 md5 9bb342b66353bbe0df5ec17ffe44df4d,readme 13→14 节。
992px 处正文宽度仍有较大变化(941→628),原因是侧栏出现/消失(col-lg-8 在 992 以下失效), 不是档位跳变。用户选择「侧栏行为保持现状」,不在本单范围。
用户已验收通过,关单。
No dependencies set.
The note is not visible to the blocked user.
现象
把浏览器窗口从宽慢慢调窄时,中间内容块的宽度不是平滑变化的,而是"一蹦一蹦"地从一档跳到另一档。
具体表现:
用户原话:
已实测确认的根因(线上真实页面,Playwright 逐 1px 扫描)
来源:
assets/css/bootstrap.min.css里 Bootstrap 的.container固定档位 ——max-width是离散的平台:一旦视口跨过某个断点,容器宽度就瞬间从旧上限跳到新上限,中间没有任何过渡。这就是"一蹦一蹦"的全部原因 —— 不是断点太少,而是容器宽度本身只有 4 个取值。实测:四个档位与各自的留白
视口 320~1920 每 1px 一档,量
.container实测宽度(getBoundingClientRect):实测:跳变点与留白突变幅度
实测:用户抱怨的"非常宽的空白"
结论:1920 宽屏下单边空出 320px,1920 视口有 521 个宽度落在"留白 ≥60px"区间里。 用户说"某些固定宽度下两边有两个非常宽的空白"完全成立。
附带发现:
col-lg-*让正文宽度也跟着跳single.php用 Bootstrap 栅格:col-lg-*在 992px 以下失效、变成整行,所以侧栏消失的同时正文宽度也突变。这是第二个跳变源(与容器档位叠加,992 那一跳最难解释)。容器盒模型(实测,视口 1400)
需求
让内容区宽度随视口平滑连续变化,消除"平台 + 突变"的跳变观感,同时避免两边出现过宽的空白。
具体验收标准(待确认方案后细化):
.container实测宽度单调不减,且相邻 1px 之间变化量 ≤ 2px。不允许出现"跨度 ≥ 8px 而宽度完全不变"的平台。bootstrap.min.css),在主题自有样式里覆盖,便于以后升级 Bootstrap。方案(待用户选定)
width:100%(减去左右 padding),去掉所有max-width档位。永远没有空白,但超宽屏正文会超长,阅读体验差。width: min(某上限px, 100% - 2×边距)或clamp())跟随视口,到上限后居中。台阶彻底消失,超宽屏仍保留可读性。上限需要定一个值(正文区域宽度上限)。影响范围
assets/css/里新增/修改容器相关规则(预计在site.css末尾追加,不碰bootstrap.min.css)single.php/index.php的col-lg-*调整(若采用非 8/4 比例的方案)验收方式
为什么单独建单
与 #28(图片 text-indent 溢出)、#29(h3/h4 样式区分度)都无关:那条讲正文元素样式,本条讲外层容器 .container 的固定 max-width 档位导致整块内容宽度随视口跳变,改的是布局容器宽度策略,可以单独验收。
已发布 3.2.64,等升级后确认
根因(不是"断点太少",是宽度只有 4 个取值)
bootstrap.min.css里.container只有 4 个固定max-width:档内宽度恒定不变,所以窗口越宽留白越宽;跨断点瞬间跳一格。1920 视口下每边白 320px(约占窗口 1/3),有 521 个宽度落在"留白 ≥60px"区间。
所以"加密断点"解决不了 —— 加密只是让台阶变矮(1 档变 2 档变成 0.5 档),台阶还在。
改法
宽度不再查表,改成算:
min()是连续取值,@media是离散判断 —— 这是两者的本质区别max(16px, 2.5vw):窄屏保底 16px 不贴边,宽屏按比例放大配套三件事缺一不可:
max-width: none必须显式写 —— Bootstrap 那 4 个档位和我们的基础规则同优先级、且它更晚出现在bootstrap.min.css里。只写width压不住,宽屏仍被 1280 卡住(等于没改)。padding归零 +.row的-15px同步归零 —— 原来两者互相抵消。现在边距由 width 承担,padding 留着就是双重扣减(窄屏吃 30px);.row留着 -15px 会把内容往外顶 15px、贴到容器边框上。.k-nav同时带 Bootstrap 的.navbar,左右各有 16px padding,容器嵌在已内缩的盒子里。用正文公式会得到正确宽度但差 16px 位置。实测(线上真实页面,逐 1px)
判据(三套,全绿)
_geom31.js16/0 —— 扫满 1601 档。W1 无固定档位 / W2 单步 ≤2px / W3 单调 / W4 封顶 1440 且左右对称 / W5 留白 ≤40px / W6 无溢出 / W7 三容器一致 / W8 正文占比 66.7% / W9 正文缩进 15px_shot31.js33/0 —— 7 档截图 + 表格/代码/图片不溢出、页脚同宽、目录块不越界、暗色模式_align31.js5/0 —— 可见对齐(容器对齐 ≠ 内容对齐,这条量最终像素)_mkzip364.py43/0 +_mkzip364_falsify.py11/0(10 条注入全部命中预期条目)反证注入:把旧的 4 档注回去 ⇒ 红出 4 个平台、单步突变 320px、1167 个宽度留白超标。另单独验了"只改容器不改行元素"⇒ 红出 1601 个视口缩进变 0px。
一处需要说明的
992px 处正文宽度仍会从 941 突变到 628 —— 那是侧栏出现导致的(
col-lg-8在 992 以下失效、正文变整行),不是台阶。你选的是「侧栏行为保持现状」,所以这版没动栅格结构。如果希望这一处也平滑,需要另外改布局,可以新开一单。交付
ac1575f,已推送kratos_yang-3.2.64.zip,md59bb342b66353bbe0df5ec17ffe44df4d(本地/服务器/HTTP 三方一致)升级后我再量一次线上真实几何确认,然后关单。
线上复验通过,关单
线上已生效
探测到
kratos.min.css?ver=3.2.64、site.css?ver=3.2.64,确认 3.2.64 已上线。线上真实几何复验(1440 视口,不拦截 CSS,量真实生效样式)
判据结论
_geom31.js16/0 —— 逐 1px 扫 320~1920 共 1601 档,唯一平台 1440(封顶段),最大单步 1px_shot31.js33/0 —— 7 档截图 + 溢出/页脚/目录/暗色_align31.js5/0 —— 导航/正文/页脚左边缘逐像素一致,logo 与首段偏移稳定 -31px_mkzip364.py43/0 +_mkzip364_falsify.py11/0(10 条注入全部命中预期条目)交付
commit
ac1575f,包 md59bb342b66353bbe0df5ec17ffe44df4d,readme 13→14 节。已知且用户确认保留的
992px 处正文宽度仍有较大变化(941→628),原因是侧栏出现/消失(
col-lg-8在 992 以下失效),不是档位跳变。用户选择「侧栏行为保持现状」,不在本单范围。
用户已验收通过,关单。