一、Flex 布局高频问题汇总

1. flex子元素宽度被内容撑开,设置width无效

原因:flex默认子元素flex-shrink:1,内容过宽时不会自动收缩。

/* 解决方案 */
.child {
    flex-shrink: 0; /* 禁止收缩 */
    flex: 0 0 固定宽度;
}

2. 垂直居中失效常见场景

  • 父元素未设置高度,align-items:center看不出效果;
  • 子元素自身margin:auto会覆盖父级对齐方式;
  • 行内元素需要先转为flex容器。

二、Grid 布局实用踩坑

grid-template-columns百分比搭配gap时总宽度溢出问题:百分比是基于容器可用宽度,gap会额外占用空间,移动端极易横向滚动。

/* 推荐写法 */
.container{
  display:grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap:20px;
}

三、移动端适配经典问题

  • 忘记设置viewport导致手机缩放错乱;
  • 固定px单位在小屏显示拥挤,优先flex、百分比、rem;
  • 定位fixed在ios下偶尔抖动,搭配backdrop-filter时尽量简化层级。

四、总结

布局问题大多是盒模型、弹性收缩规则、定位上下文理解不到位,遇到错乱优先排查:box-sizing、父容器是否有多余padding/margin、定位是否形成BFC。