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

页面缩放时图片尺寸不均,求flex-shrink:0之外的CSS解决方案

问题

我有四行堆叠的内容,每行div里都包含一张图片,正常显示时没有问题,但缩小页面尺寸后,图片的收缩程度不一致,宽度出现差异。已经尝试过用flex-shrink:0解决,现在想寻求其他可行方案。

我的代码如下:

CSS代码

.content .pop_tracks {
  margin-top: 2rem;
}

.pop_tracks .title_tracks {
  display: flex;
  justify-content: space-between;
  align-items: center;
  /* color: #fff; */
  border: 1px solid #f00;
}

.pop_tracks .part_tracks {
  display: flex;
  justify-content: space-between;
  margin-top: 1rem;
  color: #aaaaaa;
  border: 1px solid #808080;
}

.part_tracks .popsong_info {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-basis: 50%;
}

.popsong_info .popsong_name {
  display: flex;
  align-items: center;
  flex-basis: 60%;
}

.popsong_info .popsinger_name {
  flex-basis: 40%;
}

.popsong_name>p {
  /* color: #fff; */
  flex-basis: 50%;
  margin-left: 10px;
}

.popsong_name .song_number {
  font-size: 1.2rem;
  flex-basis: 1.5rem;
}

.popsong_name .track_image {
  flex-basis: 80px;
  /* flex-shrink: 0; */
  overflow: hidden;
  border-radius: 10px;
  margin-left: 10px;
}

.popsong_name img {
  width: 100%;
  vertical-align: bottom;
}

.part_tracks .popsong_user {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  flex-basis: 50%;
}

.popsong_user>div {
  margin-left: 1.8rem;
}

.popsong_user i {
  cursor: pointer;
}

.popsong_user .circle-play {
  font-size: 2rem;
}

HTML代码

<div class="pop_tracks">
  <div class="title_tracks">
    <h2>Popular Tracks</h2>
    <p>See All</p>
  </div>
  <div class="part_tracks">
    <div class="popsong_info">
      <div class="popsong_name">
        <div class="song_number">01</div>
        <div class="track_image">
          <img src="https://somethingaboutsandwiches.com/wp-content/uploads/2020/08/fried-egg-sandwich-new-size-500x500.jpg" alt="">
        </div>
        <p>Midnight</p>
      </div>
      <p class="popsinger_name">Teylor Swift</p>
    </div>
    <div class="popsong_user">
      <div>
        <i class="fa-solid fa-clock"></i>
        <span>03:09</span>
      </div>
      <div>
        <i class="fa-solid fa-headphones"></i>
        <span>46K</span>
      </div>
      <div>
        <i class="fa-regular fa-heart"></i>
        <span>6K</span>
      </div>
      <div>
        <i class="fa-regular fa-circle-play circle-play"></i>
      </div>
    </div>
  </div>
  <div class="part_tracks">
    <div class="popsong_info">
      <div class="popsong_name">
        <div class="song_number">02</div>
        <div class="track_image">
          <img src="https://www.wonderplugin.com/wp-content/uploads/2016/06/blue-grape-hyacinths.jpg" alt="">
        </div>
        <p>Rock A Chock</p>
      </div>
      <p class="popsinger_name">Mehrad Hidden</p>
    </div>
    <div class="popsong_user">
      <div>
        <i class="fa-solid fa-clock"></i>
        <span>04:35</span>
      </div>
      <div>
        <i class="fa-solid fa-headphones"></i>
        <span>84K</span>
      </div>
      <div>
        <i class="fa-regular fa-heart"></i>
        <span>4K</span>
      </div>
      <div>
        <i class="fa-regular fa-circle-play circle-play"></i>
      </div>
    </div>
  </div>
  <div class="part_tracks">
    <div class="popsong_info">
      <div class="popsong_name">
        <div class="song_number">03</div>
        <div class="track_image">
          <img src="https://upload.wikimedia.org/wikipedia/commons/a/ab/Gallet_clamshell_600x600_movement.jpg" alt="">
        </div>
        <p>Be Khod Ay</p>
      </div>
      <p class="popsinger_name">Madgal</p>
    </div>
    <div class="popsong_user">
      <div>
        <i class="fa-solid fa-clock"></i>
        <span>03:24</span>
      </div>
      <div>
        <i class="fa-solid fa-headphones"></i>
        <span>67K</span>
      </div>
      <div>
        <i class="fa-regular fa-heart"></i>
        <span>9K</span>
      </div>
      <div>
        <i class="fa-regular fa-circle-play circle-play"></i>
      </div>
    </div>
  </div>
</div>
可行解决方案

方案1:固定图片容器宽高+object-fit保持比例

给图片容器设置固定宽高,同时让图片用object-fit:cover维持比例,确保页面缩放时容器尺寸一致,图片不会变形:

.popsong_name .track_image {
  flex-basis: 80px;
  width: 80px; /* 新增固定宽度 */
  height: 80px; /* 新增固定高度 */
  overflow: hidden;
  border-radius: 10px;
  margin-left: 10px;
}

.popsong_name img {
  width: 100%;
  height: 100%; /* 新增高度100% */
  object-fit: cover; /* 新增保持图片比例 */
  vertical-align: bottom;
}

方案2:用Grid布局控制图片容器宽度

将popsong_name的flex布局替换为grid,给每个子项指定固定列宽,彻底规避flex的收缩机制问题:

.popsong_info .popsong_name {
  display: grid; /* 替换flex为grid */
  grid-template-columns: 1.5rem 80px 1fr; /* 给序号、图片、歌曲名指定列宽 */
  align-items: center;
  gap: 10px; /* 用gap代替margin-left */
  flex-basis: 60%;
}

.popsong_name .track_image {
  /* 去掉margin-left,用grid的gap代替 */
  overflow: hidden;
  border-radius: 10px;
}

.popsong_name>p {
  /* 去掉margin-left */
  /* color: #fff; */
}

方案3:给图片容器设置最小宽度

给图片容器添加min-width,确保空间不足时不会被压缩到小于设定值,同时保留flex的其他布局特性:

.popsong_name .track_image {
  flex-basis: 80px;
  min-width: 80px; /* 新增最小宽度 */
  overflow: hidden;
  border-radius: 10px;
  margin-left: 10px;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:40:55