当前位置: 首页 > 知识库问答 >
问题:

如何收缩-包装一个css网格?

赫连冠玉
2023-03-14

假设网格布局如下:

null

div {
  display: grid;
  grid-template-columns: auto auto;
  grid-row-gap: 1em;
  border: 5px solid green;
  margin: 50px;
}
h3 {
  grid-column: 1 / -1;
  margin: 0;
}
span {
  background-color: pink;
}
h3, span {
  padding: 0.5em;
}
span + span {
  background-color: salmon;
}
<div>
  <h3>1. A heading here</h3>
  <span>some text here</span>
  <span>some  more text here as well thanks</span>
</div>

null

我想‘收缩包装’网格项,这样

1)网格的最大宽度将仅与内容一样宽,但

2)如果没有足够的空间容纳内容-项目将相应地包装。

在上面的演示中,第一个约束失败了--网格列伸展以适应它们各自的内容,并且所有额外的视口宽度在列之间平分(添加)。

Codepen演示-(调整大小看看我在说什么)

我尝试了几种方法来解决这一问题,但它们都将网格项“收缩包装”成与实际网格本身相对应的方式:

1)将max-content设置为音轨长度,而不是auto

grid-template-columns: max-content max-content;

null

div {
  display: grid;
  grid-template-columns: max-content max-content;
  grid-row-gap: 1em;
  border: 5px solid green;
  margin: 50px; 
}
h3 {
  grid-column: 1 / -1;
  margin: 0;
}
span {
  background-color: pink;
}
h3, span {
  padding: 0.5em;
}
span + span {
  background-color: salmon;
}
<div>
  <h3>1. A heading here</h3>
  <span>some text here</span>
  <span>some text here</span>
</div>

null

2)在网格容器上设置justify-content:flex-start;

null

div {
  display: grid;
  grid-template-columns: auto auto;
  grid-row-gap: 1em;
  border: 5px solid green;
  margin: 50px; 
  justify-content: flex-start;
}
h3 {
  grid-column: 1 / -1;
  margin: 0;
}
span {
  background-color: pink;
}
h3, span {
  padding: 0.5em;
}
span + span {
  background-color: salmon;
}
<div>
  <h3>1. A heading here</h3>
  <span>some text here</span>
  <span>some text here</span>
</div>

null

3)添加一个伪造的第3列,该列用一个空的第3列填充剩余的视区宽度:

grid-template-columns: auto auto 1fr;

null

div {
  display: grid;
  grid-template-columns: auto auto 1fr;
  grid-row-gap: 1em;
  border: 5px solid green;
  margin: 50px; 
}
h3 {
  grid-column: 1 / -1;
  margin: 0;
}
span {
  background-color: pink;
}
h3, span {
  padding: 0.5em;
}
span + span {
  background-color: salmon;
}
<div>
  <h3>1. A heading here</h3>
  <span>some text here</span>
  <span>some text here</span>
</div>

null

那么我该如何“收缩”网格呢?

共有1个答案

广晔
2023-03-14

在元素上设置display:grid会使其生成块级网格容器框。

这就是导致网格填充视区宽度并相应地拉伸项的原因。

在这种情况下,我们可以通过在网格容器上设置以下内容之一来阻止网格的拉伸:

1)显示:内联网格

null

div {
  display: inline-grid; /* <-- modified */
  grid-template-columns: auto auto;
  grid-row-gap: 1em;
  border: 5px solid green;
  margin: 50px;
}
h3 {
  grid-column: 1 / -1;
  margin: 0;
}
span {
  background-color: pink;
}
h3, span {
  padding: 0.5em;
}
span + span {
  background-color: salmon;
}
<div>
  <h3>1. A heading here</h3>
  <span>some text here</span>
  <span>some text here</span>
</div>
 类似资料:
  • 我正在使用Shrinkwrap解析DAO中的.xml 我在测试中得到2个错误: java.lang.NoClassDefoundError 而且 java.lang.RuntimeException:无法调用部署方法 我有一些DAO测试在工作,但是当a继续编写剩余的测试时,这个错误开始了,并且影响了我正在编写的测试和之前正常的测试。 我更改了一些内容:我使用了,而不是添加了一百万个。 我最好的猜测

  • 问题内容: 签入node_module是社区标准,但现在我们也可以选择使用wrapwrap。后者对我来说更有意义,但是总会有人进行“强制发布”并引入错误。还有其他缺点吗? 问题答案: 我最喜欢的关于这个主题的文章/哲学可以追溯到2011年(在node.js领域很长一段时间): https://web.archive.org/web/20150116024411/http://www.futurea

  • 我们有一个使用< code>Spring OAuth2的rest API。用户通过身份验证后,所有JSON响应都采用以下格式: 但是,身份验证失败的JSON响应与上述格式不符,因为这是由Spring处理的。 例如,在凭据不正确的情况下,客户端会获得带有JSON响应的HTTP状态代码400,如下所示: 如果用户帐户被锁定,客户端将获得 HTTP 状态代码 400,并按 JSON 响应进行如下操作 所

  • 有一个应用是这样安装的,以root身份登陆vps(debian11): 我可否为这个应用制作一个docker镜像呢?用docker run来达到我上面那些代码的目的? 报错了 我的镜像源 我的本地代理可以使用 在构建镜像时,使用代理 还是报错

  • 问题内容: 我想将特定类的每个方法包装在python中,并且希望通过最少地编辑该类的代码来实现。我应该怎么做? 问题答案: Michael Foord的Voidspace博客的一个条目中介绍了一种优雅的实现方法,该条目在“方法修饰元类的方法”部分中介绍了什么是元类以及如何使用它们。稍微简化一下,然后将其应用于您的情况会导致以下结果: 在Python中,函数/方法装饰器只是函数包装器和一些语法糖,以

  • 我正在使用来自Grav(https://getgrav.org/downloads/skeletons)的Saturn站点主题,并希望更改主页的背景图像(以及最终的其他样式)。在主题的自定义CSS()中,我更改了背景图像,但除非同时更新和,否则不会呈现新图像。 我相信两个档案都改是不合适的;系统应该生成一个缩微CSS的新版本。阅读Grav文档(https://learn.getgrav.org/t