html - 带填充的 CSS 网格溢出容器

标签 html css overflow css-grid

我正在尝试创建一个宽度为 100%(正文)的页脚。在页脚的左侧,我想要一个 Logo 。在页脚的右侧,我想要一些文字。所以我决定尝试使用 CSS 网格。

这几乎正是我想要的:

.footer {
  background-color: #2D1975;
  width: 100%;
  height: 350px;
  display: grid;
  grid-template-columns: 30% 70%;
}

.footerGridLogo {
  background-color: red;
}

.footerGridQuestions {
  background-color: green;
}
<div class="footer">
  <div class="footerGridLogo"></div>
  <div class="footerGridQuestions"></div>
</div>

但是,我想在网格左侧添加一些填充,比如说 10%,这样 Logo 就不会太靠近左边缘。因此,我尝试 10-25-65 拆分,而不是 30-70 拆分。然而,网格最终会溢出。这是为什么?

问题的证明:

.footer {
  background-color: #2D1975;
  width: 100%;
  height: 350px;
  display: grid;
  padding-left: 10%;
  grid-template-columns: 25% 65%;
}

.footerGridLogo {
  background-color: red;
}

.footerGridQuestions {
  background-color: green;
}
<div class="footer">
  <div class="footerGridLogo">
  </div>
  <div class="footerGridQuestions">
  </div>
</div>

我意识到只需添加另一个 10% 的网格项而不是填充即可解决我的问题,但我很好奇为什么填充的工作方式不同。

最佳答案

首先,不要使用百分比单位,而是使用 fr 单位。这些单位表示剩余空间,并在呈现固定长度(例如填充)后被考虑在内。

所以不是这个:

grid-template-columns: 30% 70%

试试这个:

grid-template-columns: 3fr 7fr

更多详情:


其次,移除容器上的width: 100%

.footer {
  background-color: #2D1975;
  width: 100%; <---------- remove
  height: 350px;
  display: grid;
  padding-left: 10%;
  grid-template-columns: 25% 65%;
}

当您将 .footer 设置为 display: grid 时,它会变成(或保持) block 级元素。这样的元素会自动占据父元素的整个宽度。

但是,如果您将 width: 100% 添加到 block 级元素,它会在计算中添加任何填充、边距和边框,从而导致溢出。所以只需将其删除即可。


第三,如果将 padding-left 添加到 Logo 本身,而不是添加到网格容器或网格项,则可以避免整个问题。

关于html - 带填充的 CSS 网格溢出容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50500305/

相关文章:

CSS - 溢出高度和宽度,以及自动换行

javascript - 如何完全显示溢出元素。 'overflow-x : visible ' 不工作

html - 在哪里放置我的 base.html 文件?

html - 将 C++ 字符串放入 HTML 代码中以在网络服务器上显示值

Javascript .css ("font-weight") 行为改变

javascript - 菜单栏,它不在顶部,但是一旦向下滑动菜单栏就会粘在顶部

html - 悬停在 <li> 上不起作用!

android - 部分手机浏览器水平滚动div渲染(主要是android 2.2)

html - 固定定位元素不适应窗口/视口(viewport)的宽度

javascript - 添加事件监听器不是带有queryselector的函数