直接写 .container { max-width: 1200px } 无效且引发横向滚动,因绕过 Bootstrap 断点媒体查询链:大屏被原生 @media (min-width: 1200px) 覆盖不生效,小屏却强制应用导致溢出;!important 更破坏响应式。
因为你绕过了 Bootstrap 的断点媒体查询链。Bootstrap 的 .container 宽度不是单条 CSS 控制的,而是靠一组 @media (min-width: ...) 规则阶梯生效:大屏下你的规则被原生 @media (min-width: 1200px) 覆盖,压根不生效;小屏(如 iPhone 竖屏 ≈390px)下却强制生效,把容器撑到 1200px,触发横向滚动。!important 更糟——所有断点都变成同一宽度,响应式彻底失效。
这是引入 bootstrap.min.css 时最稳妥的做法,关键在“断点对齐”和“加载顺序”:
xl: 1200px、xxl: 1400px;v4.x 只有 xl: 1200px,没有 xxl
xl 断点(≥1200px)从默认 1140px 改为 1280px:@media (min-width: 1200px) {.container { max-width: 1280px; }
}
xxl 断点:@media (min-width: 1400px) {.container { max-width: 1440px; }
}
div .container 这类降权选择器,保持 .container 简洁即可这是最彻底的方式,但极易静默失效——编译不报错,但检查 computed style 就会发现宽度根本没变:
@import "bootstrap/scss/variables" 之后、@import "bootstrap/scss/container" 之前$container-max-widths 必须包含全部 key:xs、sm、md、lg、xl、xxl,缺一个,对应断点就会回退到默认值xxxl),必须同步更新 $grid-breakpoints 和 $container-max-widths,否则不生效map-merge 只改局部,避免漏掉其他断点:$container-max-widths: map-merge($container-max-widths, (
xl: 1280px,
xxl: 1440px
));
v4 和 v5 的断点命名和阈值不同,改错就白忙:
sm(≥576px)→540px,md(≥768px)→720px,lg(≥992px)→960px,xl(≥1200px)→1140px,xxl(≥1400px)→1320pxxxl,只有 xl(≥1200px)→1140px@media 被命中”,不是区间map-merge 或静默回退,默认值不变xs 或拼错 xxl,整个断点链就断了,但浏览器不会报错,你只能靠 computed style 逐个比对。