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

父网格内Grid元素无法水平自适应调整问题求助

问题

我是Web开发新手,目前正为class为card的Grid容器内所有元素无法水平动态调整的问题困扰。我的其他项目采用相同布局都能正常运行,不清楚哪里出现了问题。尽管设置了最小和最大宽度,元素并未遵循这些值正确调整。希望能帮忙指出代码缺失部分并给出解释。

/*
  1. Use a more-intuitive box-sizing model.
*/
*,
*::before,
*::after {
  box-sizing: border-box;
}

/*
    2. Remove default margin
  */
* {
  margin: 0;
}

/*
    Typographic tweaks!
    3. Add accessible line-height
    4. Improve text rendering
  */
body {
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

/*
    5. Improve media defaults
  */
img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

/*
    6. Remove built-in form typography styles
  */
input,
button,
textarea,
select {
  font: inherit;
}

/*
    7. Avoid text overflows
  */
p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

/*
    8. Create a root stacking context
  */
#root,
#__next {
  isolation: isolate;
}

:root {
  /* Primary Colors */
  --clr--gradient: hsl(6, 100%, 80%) to hsl(335, 100%, 65%);
  /* Neutral Colors */
  --clr--pale-blue: hsl(243, 100%, 93%);
  --clr--grayish-blue: hsl(229, 7%, 55%);
  --clr--dark-blue: hsl(228, 56%, 26%);
  --clr--very-dark-blue: hsl(229, 57%, 11%);
}

:root {
  /* Font Family */
  --ff--primary: "Raleway", sans-serif;
  /* Font Size */
  --fs--regular: 14px;
  /* Font Weight */
  --fw--bold: 400;
  --fw--very-bold: 700;
}

html {
  margin: 0;
  padding: 0;
}
html ul {
  list-style: none;
  text-decoration: none;
  padding-left: 0;
}

body {
  background: url("/images/bg-mobile.png") no-repeat;
  background-position: top;
  background-size: 100% 100%;
  background-color: var(--clr--very-dark-blue);
  color: var(--clr--pale-blue);
  font-family: var(--ff--primary);
}

.card {
  display: grid;
  gap: 1rem;
  max-width: 500px;
}
.card__header, .card__info {
  background-color: var(--clr--dark-blue);
  padding: 2rem;
  text-align: left;
  border-radius: 0.8rem;
}
.card__header {
  display: flex;
  flex-direction: column;
  gap: 2rem;
}
.card__header .logo img {
  width: 150px;
}
.card__header .flex-group {
  display: flex;
  gap: 0.5rem;
}
.card__header .flex-group li {
  display: grid;
  place-items: center;
  width: 50px;
  height: 40px;
  background-color: var(--clr--very-dark-blue);
  padding: 0;
  margin: 0;
  border-radius: 0.5rem;
}
.container {
  min-height: 100vh;
  display: grid;
  place-items: center;
}/*# sourceMappingURL=style.css.map */
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!-- displays site properly based on user's device -->
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=Raleway:wght@400;700&display=swap"
      rel="stylesheet"
    />
    <link
      rel="icon"
      type="image/png"
      sizes="32x32"
      href="./images/favicon-32x32.png"
    />
    <link rel="stylesheet" href="dist/style.css" class="css" />
    <title>Frontend Mentor | Fylo data storage component</title>

    <!-- Feel free to remove these styles or customise in your own stylesheet 👍 -->
    <style>
      .attribution {
        font-size: 11px;
        text-align: center;
      }
      .attribution a {
        color: hsl(228, 45%, 44%);
      }
    </style>
  </head>
  <body>
    <div class="container">
      <main class="card">
        <section class="card__header">
          <div class="logo">
            <img src="/images/logo.svg" alt="Logo" />
          </div>
          <ul class="flex-group">
            <li><img src="/images/icon-document.svg" alt="Document" /></li>
            <li><img src="/images/icon-folder.svg" alt="Folder" /></li>
            <li><img src="/images/icon-upload.svg" alt="Upload" /></li>
          </ul>
        </section>
        <section class="card__info">
          <p>You’ve used 815 GB of your storage</p>
          <input type="range" min="1" max="1000" value="815" />
          <div>185 GB LEFT</div>
        </section>
      </main>
    </div>
    <footer class="attribution">
      Challenge by
      <a href="https://www.frontendmentor.io?ref=challenge" target="_blank"
        >Frontend Mentor</a
      >. Coded by <a href="#">Your Name Here</a>.
    </footer>
  </body>
</html>
分析与解决方案

核心问题出在**.card容器的Grid布局配置不完整**,以及缺少响应式适配的关键规则,以下是具体修复方案:

1. 补充Grid布局的列规则

当前.card仅声明了display: grid和间隙,但未定义列的自适应逻辑,导致元素无法随屏幕宽度调整。需添加grid-template-columns并配合媒体查询实现响应式布局:

  • 移动端:默认单列,元素占满可用宽度
  • 桌面端:按比例分配两列宽度

2. 完善容器的宽度控制

.card仅设置了max-width,缺少width: 100%让容器在小屏幕上占满空间,同时补充min-width保证最小显示区域,避免元素过度压缩。

3. 修复背景图的响应式显示

当前body的背景图在桌面端会显示异常,需通过媒体查询切换背景图的位置和尺寸。


修改后的完整CSS代码

/* 基础重置代码保持不变 */
*,
*::before,
*::after {
  box-sizing: border-box;
}

* {
  margin: 0;
}

body {
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

input,
button,
textarea,
select {
  font: inherit;
}

p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

#root,
#__next {
  isolation: isolate;
}

:root {
  /* Primary Colors - 修复渐变语法错误 */
  --clr--gradient: linear-gradient(to right, hsl(6, 100%, 80%), hsl(335, 100%, 65%));
  /* Neutral Colors */
  --clr--pale-blue: hsl(243, 100%, 93%);
  --clr--grayish-blue: hsl(229, 7%, 55%);
  --clr--dark-blue: hsl(228, 56%, 26%);
  --clr--very-dark-blue: hsl(229, 57%, 11%);
}

:root {
  /* Font Family */
  --ff--primary: "Raleway", sans-serif;
  /* Font Size */
  --fs--regular: 14px;
  /* Font Weight */
  --fw--bold: 400;
  --fw--very-bold: 700;
}

html {
  margin: 0;
  padding: 0;
}
html ul {
  list-style: none;
  text-decoration: none;
  padding-left: 0;
}

body {
  background: url("/images/bg-mobile.png") no-repeat;
  background-position: top;
  background-size: 100% 100%;
  background-color: var(--clr--very-dark-blue);
  color: var(--clr--pale-blue);
  font-family: var(--ff--primary);
}

/* 修改后的.card样式 */
.card {
  display: grid;
  gap: 1rem;
  width: 100%;
  max-width: 900px;
  min-width: 300px;
  padding: 0 1rem;
}
.card__header, .card__info {
  background-color: var(--clr--dark-blue);
  padding: 2rem;
  text-align: left;
  border-radius: 0.8rem;
}
.card__header {
  display: flex;
  flex-direction: column;
  gap: 2rem;
  border-top-right-radius: 6rem; /* 还原设计图的特殊圆角 */
}
.card__header .logo img {
  width: 150px;
}
.card__header .flex-group {
  display: flex;
  gap: 0.5rem;
}
.card__header .flex-group li {
  display: grid;
  place-items: center;
  width: 50px;
  height: 40px;
  background-color: var(--clr--very-dark-blue);
  padding: 0;
  margin: 0;
  border-radius: 0.5rem;
}
.container {
  min-height: 100vh;
  display: grid;
  place-items: center;
}

/* 添加媒体查询实现桌面端布局 */
@media (min-width: 768px) {
  body {
    background: url("/images/bg-desktop.png") no-repeat bottom center;
    background-size: 100% 50%;
    background-color: var(--clr--very-dark-blue);
  }
  .card {
    grid-template-columns: 1fr 2fr;
    align-items: end;
    gap: 2rem;
  }
}

/* 补充进度条基础样式(还原设计效果) */
.card__info input[type="range"] {
  width: 100%;
  height: 12px;
  border-radius: 6px;
  background-color: var(--clr--very-dark-blue);
  outline: none;
  -webkit-appearance: none;
}
.card__info input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: white;
  cursor: pointer;
}
.card__info input[type="range"]::-moz-range-thumb {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: white;
  cursor: pointer;
  border: none;
}
.card__info > div {
  text-align: right;
  font-weight: var(--fw--very-bold);
}

关键修改点说明

  1. .card容器优化:

    • 添加width: 100%让容器在小屏幕上占满可用宽度
    • 调整max-width适配桌面端,添加min-width保证最小显示区域
    • 添加padding: 0 1rem避免元素贴边显示
  2. Grid列规则配置:

    • 移动端默认单列(Grid默认行为,无需额外声明)
    • 桌面端通过媒体查询设置grid-template-columns: 1fr 2fr,让card__header和card__info按1:2比例分配宽度
  3. 背景图适配:

    • 桌面端切换背景图位置为底部居中,尺寸改为100%宽度、50%高度,还原设计效果
  4. 细节修复:

    • 修复:root中渐变颜色的语法错误
    • 给card__header添加右上角大圆角,匹配设计图
    • 补充进度条的自定义样式,提升视觉一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:10:57