【问题标题】:How to avoid an image overflowing container in CSS Grid?如何避免 CSS Grid 中的图像溢出容器?
【发布时间】:2019-05-12 12:31:27
【问题描述】:

我尝试在 CSS Grid 上创建一个高度为 100% 的页面,但是当我将图像放入其容器中并缩小窗口时,内容在我的另一个容器上垂直溢出。它只发生在基于 100vh 的页面上。我只使用 Grid 属性进行了努力,但没有任何效果

有人有解决方案吗?

我当前的代码:https://jsfiddle.net/kxaobqcr/3/ HTML

    <header>
      <div class="type"> <h1>Title</h1> </div>
      <div class="nav">
        <a href="#"> x </a>
        <a href="#"> x </a>
        <a href="#"> x </a>
        <a href="#"> x </a>
        <a href="#"> x </a>
        <a href="#"> x </a>
      </div>
    </header>

    <section class="content">
      <div class="library"> <img src="https://i.pinimg.com/originals/2d/8f/3e/2d8f3ef4a6bac30d0a4c7a44f7b3d574.jpg" alt=""> 
      </div>
    </section>
  </body>

CSS

html,body {
  margin: 0;
  padding: 0;
  height: 100%;
  width: auto;
  font-family: 'Libre Baskerville', serif;
}

body {
  display: grid;
  width: 100vw;
  height: 100vh;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(12, 1fr);
  grid-gap: 10px 10px;
}

header {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(2, 1fr);
  grid-row: 1/ 3;
  grid-column: 1/ 13;
  grid-gap: 10px 10px;
  background-color: grey;
}

.type {
  display: grid;
  grid-row: 1/ 2;
  grid-column: 1/ 8;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr;
  align-self: center;
  background-color: lightcoral;
}

.nav {
  display: grid;
  grid-row: 2/ 3;
  grid-column: 1/ 8;
  grid-template-columns: repeat(8, 1fr);
  grid-template-rows: 1fr;
  align-self: center;
  background-color: crimson;
}

a {
   color: black;
   text-decoration: none;
   padding: 10px;
 }

img {
  max-width: 100%;
  max-height: 100%;
  object-fit: cover;
}

.content {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(12, 1fr);
  grid-column: 1/ 13;
  grid-row: 3 / 13;
  grid-gap: 10px 10px;
 }

 .library {
   grid-column: 4/ 10;
   grid-row: 4 / 10;
   justify-self: center;
   align-self: center;
 }

我还在学习网格布局,欢迎提出一些最小化 CSS 代码的建议 :-)

【问题讨论】:

  • 使用前请阅读标签说明
  • header 的内容是否溢出?将min-height: 0 添加到type 元素...参见jsfiddle.net/4j5m1s6r
  • @TemaniAfif 当然,我会小心的。对不起
  • @kukkuz 谢谢你让它变得更好,但你能解释一下为什么 min-height 属性会影响它吗?
  • 默认grid items取其内容的宽/高(类似于flex items)可以参考here..几个例子herehere

标签: css image css-grid


【解决方案1】:

我找到了解决方案。删除 css 代码上的 align-items,溢出问题消失。要使图像居中,只需使用边距:自动。

新代码:https://jsfiddle.net/k1fmodv5/

CSS

html,body {
  margin: 0;
  padding: 0;
  height: 100%;
  width: auto;
  font-family: 'Libre Baskerville', serif;
}

body {
  display: grid;
  width: 100vw;
  height: 100vh;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(12, 1fr);
  grid-gap: 10px 10px;
}

header {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(2, 1fr);
  grid-row: 1/ 3;
  grid-column: 1/ 13;
  grid-gap: 10px 10px;
  background-color: grey;
}

.type {
  display: grid;
  grid-row: 1/ 2;
  grid-column: 1/ 8;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr;
  align-self: center;
  background-color: lightcoral;
  min-height: 0;
}

.nav {
  display: grid;
  grid-row: 2/ 3;
  grid-column: 1/ 8;
  grid-template-columns: repeat(8, 1fr);
  grid-template-rows: 1fr;
  align-self: center;
  background-color: crimson;
}

a {
   color: black;
   text-decoration: none;
   padding: 10px;
 }

img {
  max-width: 100%;
  max-height: 100%;
  object-fit: cover;
}

.content {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(12, 1fr);
  grid-column: 1/ 13;
  grid-row: 3 / 13;
  grid-gap: 10px 10px;
 }

 .library {
   grid-column: 4/ 10;
   grid-row: 4 / 10;
   margin:auto;
 }

感谢大家的帮助!

【讨论】:

    【解决方案2】:

    我尽量让这个视图变得简单

    这是jsfiddle的链接,看一下:https://jsfiddle.net/dupinderdhiman/zum2kxpw/5/

    a{
      padding: 10px;
      border-top: 1px solid blue;
      border-bottom: 1px solid blue;
    }
    
    img {
      max-width: 100%;
      max-height: 100%;
      object-fit: cover;
    }
    <!-- 
      Bootstrap docs: https://getbootstrap.com/docs
    -->
    
    <div class="container">
      <div class="row">
        <div class="col-12">
         <h1>Title</h1> 
        </div>
        <div class="col-12">
           <div class="nav">
            <a href="#"> x </a>
            <a href="#"> x </a>
            <a href="#"> x </a>
            <a href="#"> x </a>
            <a href="#"> x </a>
            <a href="#"> x </a>
          </div>
        </div>
      </div>
      <div class="row">
      <div class='col-12 mt-1'>
        <img src="https://i.pinimg.com/originals/2d/8f/3e/2d8f3ef4a6bac30d0a4c7a44f7b3d574.jpg" alt="">
      </div>
      </div>  
    </div>

    【讨论】:

    • 它不起作用..当我缩小窗口时,图像超出了它的内容
    • 那么我可以提供一个带有引导程序的解决方案吗?
    • 当然,即使我更喜欢纯网格,但为什么不呢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2018-04-13
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2010-11-30
    相关资源
    最近更新 更多