【问题标题】:CSS Grid with fixed size scrolling: How to solve issue where bottom margin/padding isn't shown?具有固定大小滚动的 CSS Grid:如何解决未显示底部边距/填充的问题?
【发布时间】:2018-12-18 05:34:45
【问题描述】:

编辑

所以我看到了指向的重复链接,在我看来,这个问题是为了解决您给出固定尺寸(固定宽度或固定高度)的问题。

原始问题的解决方案更多是关于使用 hacky 方法修复容器。我决定采用不同的方法来解决它,同时也解决了我自己在这个问题中提出的问题。


在 CSS 中,当使用display: gridfixed height 时,打开overflow: auto,你可能会得到这种布局,如下所示:

.scroll {
  overflow:  auto;
  background-color: #bbddee;
}

.container {
  padding: 10px;
  display: grid;
  grid-template-columns: 1fr;
  grid-row-gap: 10px;
  height: 420px;
}

.itemContainer {
  border: 1px solid #efefef;
  padding: 10px 20px;
  background-color: #fff;
}

.itemTitle {
  text-align:center;
  margin: 0 auto;
}

.itemLink {
  text-align: center; 
  margin: 0 auto;
}
<div id="retailerContent" class="tab-pane fade in active show">
  <div class="scroll">
    <div id="retailerOffersContainer" class="container">

      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      <div class="itemContainer">
        <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
        <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
      </div>
      
    </div>
  </div>
</div>

发生这种情况时,会出现滚动列表最底部没有填充/边距的问题。应该如何修改 HTML 和 CSS,以便底部填充/边距显示在可滚动的 CSS 网格布局中?

【问题讨论】:

  • @Michael_B 这似乎是一个可能的重复,但我的回答主要集中在使用元素的大小来拉伸容器的边界。也许这只是众多之一?
  • @Michael_B 我确实在代码 sn-p 下方提供了解释。这可以接受吗?
  • 一个重复的问题是针对相同的初始问题和不同的答案...所以如果我们考虑这个问题,您的问题与另一个问题相同
  • 谢谢大家。

标签: html css margin padding css-grid


【解决方案1】:

这是我在使用 CSS 网格时的修复:

/* Fix scrollbar removing padding-bottom */
@supports (-moz-appearance:none) {
  .container::after {
    content: "";
    height: 1px;
    margin: calc(var(--padding) - var(--gap));
  }
}

【讨论】:

    【解决方案2】:

    这是一个解决方案(可能是众多解决方案之一),它展示了如何解决在固定高度divdisplay: grid 中缺少底部填充/边距的问题:

    .container {
    	padding: 10px;
    	display: grid;
    	grid-row-gap: 10px;
    	grid-template-columns: 1fr;
    	width: 100%;
     }
     
     .itemContainer {
    	border: 1px solid #efefef;
    	background-color: #fff;
    	max-height: 100%;
    	padding: 10px 20px;
    	height: 100%;
     }
     
     .itemTitle {
    	text-align: center;
    	margin: 0 auto;
    	line-height: 20px;
     }
     
     .itemLink {
    	text-align: center;
    	margin: 0 auto;
    	line-height: 20px;
     }
    <div id="retailerContent" class="tab-pane fade in active show">
      <div style="height: 420px;background-color: #bbddee;">
        <div id="retailerOffersContainer" class="container">
    
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          <div class="itemContainer">
            <div class="itemTitle">15% Off Room Essentials Cubes &amp; Bins</div>
            <div class="itemLink"><a>Get Offer&nbsp;&gt;</a></div>
          </div>
          
        </div>
      </div>
    </div>

    这里的主要区别是:

    • 网格容器不应指定高度属性。让网格自动适应总内容的高度和网格间隙。
    • 相反,使网格容器内的元素具有最大高度,由所述元素的内部内容定义。

    这将拉伸网格容器,而网格元素内容不会溢出到网格容器之外。

    【讨论】:

    • 如果我错了,请告诉我需要修复的地方,以便我从您的批评中吸取教训。谢谢。
    • 对不起,但这与 CSS-grid 完全无关,这是一个简单的填充溢出问题,我们可以轻松调整。处理这个问题有很多问题
    • @TemaniAfif 我明白了。如果它是填充溢出问题,那么调整它的正确方法是什么,所以原来的问题是固定的?谢谢。
    • @TemaniAfif 啊,这是我以前不知道的。感谢分享。
    • @TemaniAfif CSS-Grid 确实发挥了作用,因为我的修复必须为 CSS Grid/Flux 间隙做额外的工作。否则,您的新填充就是您的间隙大小。如果您的间隙和填充相同,很容易错过。
    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多