【问题标题】:Grid items overflowing the container溢出容器的网格项
【发布时间】:2021-02-24 11:59:35
【问题描述】:

我在尸体上准备了三个容器。页眉,主要和页脚。主要使用网格并包含几个孩子。问题是较低的孩子在高度上溢出了一个容器,在这种情况下他们也溢出了一个页脚。

我拥有的元素越多,溢出越多。

我的目标是“主”包含没有溢出的子元素。

我也将不胜感激解释,考虑到我没有任何固定尺寸,为什么主不自动授权高度。

您可以检查一下它现在在 codepen 上的工作方式: https://codepen.io/kornavol/pen/gOLXKKo

body {
  width: 80%;
  text-align: center;
  margin: auto;
}

.grid-container {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr);
  gap: 3%;
  margin: 20px auto 20px
}

.card {
  box-shadow: 0 0 20px #777;
  border-radius: 25px;
  text-align: center;
}

.card>img {
  width: 100%;
  height: 40%;
  object-fit: cover;
  border-radius: 0;
  border-top-left-radius: 25px;
  border-top-right-radius: 25px;
}

.card>a {
  text-decoration: none;
  color: black;
}

.card>a>h4 {
  width: 100px;
  background-color: rgb(255, 150, 22);
  border-radius: 5px;
  margin: auto;
}

.banner {
  width: 100%;
  height: 20vw;
  object-fit: cover;
}

header>h1 {
  height: 60px;
  line-height: 60px;
  border-left: 10px solid #00ffff;
  background-color: rgb(96, 104, 111);
  border-top-right-radius: 15px;
  color: white;
}

footer>img {
  border-top-left-radius: 15px;
  border-top-right-radius: 15px;
}

footer>h1 {
  height: 60px;
  line-height: 60px;
  border-left: 10px solid #00ffff;
  background-color: rgb(96, 104, 111);
  border-radius: 0;
  border-bottom-left-radius: 15px;
  color: white;
}
<div id="root">
  <div class="App">
    <header>
      <h1>Welcome on My Store</h1><img class="banner" style="border-bottom-left-radius: 25px; border-bottom-right-radius: 25px;" src="https://images.unsplash.com/photo-1472851294608-062f824d29cc?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1050&amp;q=80"
        alt="Something went wrong! Please try again later." title="How's the scene">
    </header>
    <main class="grid-container">
      <div class="card"><img src="https://images.unsplash.com/photo-1512499617640-c74ae3a79d37?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=966&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
        <h3>Iphone</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
        <h4>Price: $1100</h4>
        <a href="">
          <h4>Add to Cart</h4>
        </a>
      </div>
      <div class="card"><img src="https://images.unsplash.com/photo-1593642632505-1f965e8426e9?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=925&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
        <h3>Samsung</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
        <h4>Price: $1200</h4>
        <a href="">
          <h4>Add to Cart</h4>
        </a>
      </div>
      <div class="card"><img src="https://images.unsplash.com/photo-1550029402-226115b7c579?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=701&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
        <h3>Huawei</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
        <h4>Price: $1300</h4>
        <a href="">
          <h4>Add to Cart</h4>
        </a>
      </div>
      <div class="card"><img src="https://images.unsplash.com/photo-1491933382434-500287f9b54b?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=700&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
        <h3>Nokia</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
        <h4>Price: $1400</h4>
        <a href="">
          <h4>Add to Cart</h4>
        </a>
      </div>
      <div class="card"><img src="https://images.unsplash.com/photo-1516163109866-e9d98630a0a6?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1050&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
        <h3>Pixel</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
        <h4>Price: $1500</h4>
        <a href="">
          <h4>Add to Cart</h4>
        </a>
      </div>
      <div class="card"><img src="https://images.unsplash.com/photo-1572797258555-4f33f86f443f?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1048&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
        <h3>Test</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
        <h4>Price: $1600</h4>
        <a href="">
          <h4>Add to Cart</h4>
        </a>
      </div>


    </main>
    <footer><img class="banner" style="border-top-left-radius: 25px; border-top-right-radius: 25px;" src="https://images.unsplash.com/photo-1542581509-7e87190743b6?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1050&amp;q=80"
        alt="Something went wrong! Please try again later." title="How's the scene">
      <p>- 2021 -</p>
      <h1 class="la">We're looking forward to see you again</h1>
    </footer>
  </div>
</div>

【问题讨论】:

    标签: html css css-grid


    【解决方案1】:

    容器中的gap: 3% 规则导致main 元素溢出页脚。

    尝试改用grid-column-gap: 3%。您可以将剩余的间隙添加到网格项本身:.card { margin: 10px }

    或者,计算一下gap 属性可以在容器中独立工作。

    body {
      width: 80%;
      text-align: center;
      margin: auto;
    }
    
    .grid-container {
      display: grid;
      grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
      grid-template-rows: minmax(0, 1fr);
      grid-column-gap: 3%; /* adjustment */
      margin: 20px auto 20px
    }
    
    .card {
      margin: 10px; /* new */
      box-shadow: 0 0 20px #777;
      border-radius: 25px;
      text-align: center;
    }
    
    .card>img {
      width: 100%;
      height: 40%;
      object-fit: cover;
      border-radius: 0;
      border-top-left-radius: 25px;
      border-top-right-radius: 25px;
    }
    
    .card>a {
      text-decoration: none;
      color: black;
    }
    
    .card>a>h4 {
      width: 100px;
      background-color: rgb(255, 150, 22);
      border-radius: 5px;
      margin: auto;
    }
    
    .banner {
      width: 100%;
      height: 20vw;
      object-fit: cover;
    }
    
    header>h1 {
      height: 60px;
      line-height: 60px;
      border-left: 10px solid #00ffff;
      background-color: rgb(96, 104, 111);
      border-top-right-radius: 15px;
      color: white;
    }
    
    footer>img {
      border-top-left-radius: 15px;
      border-top-right-radius: 15px;
    }
    
    footer>h1 {
      height: 60px;
      line-height: 60px;
      border-left: 10px solid #00ffff;
      background-color: rgb(96, 104, 111);
      border-radius: 0;
      border-bottom-left-radius: 15px;
      color: white;
    }
    <div id="root">
      <div class="App">
        <header>
          <h1>Welcome on My Store</h1><img class="banner" style="border-bottom-left-radius: 25px; border-bottom-right-radius: 25px;" src="https://images.unsplash.com/photo-1472851294608-062f824d29cc?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1050&amp;q=80"
            alt="Something went wrong! Please try again later." title="How's the scene">
        </header>
        <main class="grid-container">
          <div class="card"><img src="https://images.unsplash.com/photo-1512499617640-c74ae3a79d37?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=966&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
            <h3>Iphone</h3>
            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
            <h4>Price: $1100</h4>
            <a href="">
              <h4>Add to Cart</h4>
            </a>
          </div>
          <div class="card"><img src="https://images.unsplash.com/photo-1593642632505-1f965e8426e9?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=925&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
            <h3>Samsung</h3>
            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
            <h4>Price: $1200</h4>
            <a href="">
              <h4>Add to Cart</h4>
            </a>
          </div>
          <div class="card"><img src="https://images.unsplash.com/photo-1550029402-226115b7c579?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=701&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
            <h3>Huawei</h3>
            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
            <h4>Price: $1300</h4>
            <a href="">
              <h4>Add to Cart</h4>
            </a>
          </div>
          <div class="card"><img src="https://images.unsplash.com/photo-1491933382434-500287f9b54b?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=700&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
            <h3>Nokia</h3>
            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
            <h4>Price: $1400</h4>
            <a href="">
              <h4>Add to Cart</h4>
            </a>
          </div>
          <div class="card"><img src="https://images.unsplash.com/photo-1516163109866-e9d98630a0a6?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1050&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
            <h3>Pixel</h3>
            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
            <h4>Price: $1500</h4>
            <a href="">
              <h4>Add to Cart</h4>
            </a>
          </div>
          <div class="card"><img src="https://images.unsplash.com/photo-1572797258555-4f33f86f443f?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1048&amp;q=80" alt="Something went wrong! Please try again later." title="How's the scene">
            <h3>Test</h3>
            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Enim, distinctio facilis dolores ullam autem ad commodi.</p>
            <h4>Price: $1600</h4>
            <a href="">
              <h4>Add to Cart</h4>
            </a>
          </div>
    
    
        </main>
        <footer><img class="banner" style="border-top-left-radius: 25px; border-top-right-radius: 25px;" src="https://images.unsplash.com/photo-1542581509-7e87190743b6?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1050&amp;q=80"
            alt="Something went wrong! Please try again later." title="How's the scene">
          <p>- 2021 -</p>
          <h1 class="la">We're looking forward to see you again</h1>
        </footer>
      </div>
    </div>

    【讨论】:

      【解决方案2】:

      这样合适吗?

      .grid-container {
          display: grid;
          grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) ;
          grid-template-rows: minmax(0, 1fr);
          margin: 20px auto 20px
         
      }
      
      
      .card {
          box-shadow: 0 0 20px #777;
          border-radius: 25px;
          text-align: center;
          display: inline-table;
          padding: 3%;
          margin: 3%;
      }
      
      .card > img {
          width: 100%;
          height: 40%;
          max-height: 250px;
          object-fit: cover;   
          border-radius: 0;
          border-top-left-radius: 25px;
          border-top-right-radius: 25px;
      }
      

      【讨论】:

        【解决方案3】:

        您好,问题是在将值分配给页脚时,您还必须将其定义为网格,因此要在 3 行中解决此问题,您只需向页脚添加一个 id 并声明它
        作为网格之后,只需将顶部填充分配给该 id html

        css css #footer{ 显示:网格;填充顶部:150 像素;}

        【讨论】:

          猜你喜欢
          • 2023-02-10
          • 2019-10-17
          • 2018-11-14
          • 1970-01-01
          • 1970-01-01
          • 2018-11-03
          • 1970-01-01
          • 1970-01-01
          • 2021-08-09
          相关资源
          最近更新 更多