原生CSS布局易错位源于盒模型、浮动、定位及Flex/Grid默认行为在不同环境下的不一致;Bootstrap 5通过栅格系统和工具类固化结构逻辑,Tailwind则需显式声明布局模式并规避外边距合并等问题。
不是写法错了,而是盒模型、浮动、定位、flex/gird 的默认行为在不同浏览器、不同嵌套层级下表现不一致。比如 box-sizing 默认是 content-box,但很多人按 border-box 直觉写 padding;又比如 display: inline-block 元素间有看不见的空白字符,导致宽度超限换行;再比如未重置 margin 的 h1、p 在父子容器中意外撑开间隙。
Bootstrap 5 已移除 jQuery 依赖,纯 CSS + 少量 JS,适合现代项目。关键不是“全量引入”,而是按需用它的栅格系统和工具类固化结构逻辑:
container / container-fluid 自动处理内边距和响应式断点col-* 类(如 col-md-8),内部自动计算 flex-basis 和 flex-grow,避开手算百分比+float 的坑row 包裹列,它自带 margin-left: -15px 和 margin-right: -15px 抵消列的 padding,防止横向溢出text-center、mb-3、d-flex 等工具类,避免零散的自定义 class 冲突.header {
background: #0d6efd;
}
/* 不要这样写——易被其他样式覆盖或计算错误 */
.header h1 {
margin-top: 20px;
width: 100%;
}
/ 推荐这样:用 Bootstrap 工具类组合 /
标题
Tailwind 不是“框架”而是原子类系统
,错位往往源于过度组合或忽略响应式前缀。常见问题:
md:w-1/2 却忘了父容器没设 flex 或 grid,宽度生效但布局仍塌陷mt-4 给子元素加顶边距,结果触发外边距合并(margin collapse),实际距离不对flex 容器里混用 float 或 position: absolute,破坏 flex 流解决方式很直接:所有布局容器必须显式声明布局模式,例如:
侧栏主内容
注意 gap 替代手动设 margin,flex-col/flex-row 明确流向,w-full 防止子项收缩。
不用一上来就重写 CSS,先定位根源:
Computed 面板里的 box-sizing、display、flex 相关属性是否符合预期overflow: hidden 或 transform,它们会创建新的 BFC,影响子元素定位getComputedStyle(document.querySelector('.your-element')),看 width、marginLeft 等是否被 JS 动态修改过框架能压住大部分边界情况,但一旦混入自定义绝对定位、CSS 变量计算宽高、或动态插入 DOM,错位就会重现——这时候得回到布局模型本身,而不是怪框架不灵。