为什么 grid-gap 会改变 CSS Grid 中列的宽度?

2023-12-25

使用 css-grid,我在容器内设置了一个 1002px 宽的 24 列网格。

在容器 div 内,有一个跨 21 列的子 div。我期望子 div 的宽度是:

21/24 * 1002 = 876.75

当添加 grid-gap 属性时,列的宽度减小到 873px,这是不希望的。

如何编写 CSS 以使 div 的宽度为 876.75px?

参见示例:https://codepen.io/edtalmadge/pen/MvLrqW?editors=1100 https://codepen.io/edtalmadge/pen/MvLrqW?editors=1100

HTML

<div class="container1">
  <div class="column">
    <p>No grid-gap ...width is 876px as expected</p>
  </div>
</div>

<div class="container2">
  <div class="column">
    <p>grid-gap: 30px; ...width becomes 873px (3px too narrow)</p>
  </div>
</div>

CSS

   /* no grid gap */
   .container1 {
      display: grid;
      grid-template-columns: repeat(24, 1fr);
      width: 1002px;
      background-color: #ededed;
    }

    /* has grid gap */
    .container2 {
      grid-gap: 30px; // This causes the width of .column to increase
      display: grid;
      grid-template-columns: repeat(24, 1fr);
      width: 1002px;
      background-color: #ededed;
    }

    .column {
      grid-column: span 21;
      background-color: gray;
    }
.container1 {
  display: grid;
  grid-template-columns: repeat(24, 1fr);
  width: 1002px;
  background-color: #ededed;
}

.container2 {
  display: grid;
  grid-template-columns: repeat(24, 1fr);
  width: 1002px;
  background-color: #ededed;
  grid-gap: 30px;
  border-top: 1px solid yellow;
}

.column {
  grid-column: span 21;
  background-color: gray;
}

p {
  text-align: center;
  color: #fff;
  font-family: Helvetica, Arial, sans-serif;
}
<div class="container1">
  <div class="column">
    <p>No grid-gap ...width is <strong style="color: lime;">876px</strong> as expected</p>
  </div>
</div>

<div class="container2">
  <div class="column">
    <p>grid-gap: 30px; ...width becomes <strong style="color: #fb665e;">873px</strong> (3px too narrow)</p>
  </div>
</div>

两个网格容器都有 24 列,宽度为 1002px:

grid-template-columns: repeat(24, 1fr);
width: 1002px

您的问题仅涉及前 21 列:

.column {
   grid-column: span 21;
}

这意味着最后三列和网格间隙应从计算中排除。

Using Firefox's grid overlay tool https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_grid_layouts. The striped bars are the gutters.


第一个集装箱

在第一个容器中,没有排水沟,每个fr单位等于 41.75px。

1002 / 24 = 41.75

这意味着 21 列等于 876.75 像素的宽度。

41.75 * 21 = 876.75px

第二个容器

关于第二个容器,首先要记住的是fr单位仅代表可用空间。这是考虑其他尺寸后剩下的空间,包括排水沟.

7.2.3.灵活的长度:fr unit https://www.w3.org/TR/css3-grid-layout/#valdef-flex-fr

灵活的长度或<flex>是一个维度fr单位,代表一部分可用空间在网格容器中。

可用空间 https://www.w3.org/TR/css3-grid-layout/#free-space

等于可用网格空间减去基本尺寸的总和 所有网格轨道(包括排水沟),都归零。如果可供使用的话 网格空间是无限的,自由空间也是无限的。

在第一个容器中,所有空间都是可用空间。在第二个容器中则不然。

另外值得注意的是:grid-gap属性仅适用于网格项目之间,而不适用于项目和容器之间。

10.1.排水沟:grid-column-gap, grid-row-gap, and grid-gap特性 https://www.w3.org/TR/css3-grid-layout/#gutters

这些属性指定网格行和网格之间的间距 列,分别。

因此,在 24 列的网格中,有 23 个装订线(见上图)。

因此,对于第二个容器,我们必须首先减去排水沟所占用的空间:

1002 - (30 * 23) = 312

我们现在知道第二个容器中的可用空间是 312px。

现在我们需要确定每个的值fr unit.

312 / 24 = 13

So each fr单位等于13px。

现在我们需要计算 21 列的装订线和 fr 的总宽度:

21 * 13 = 273px (total width of free space)
20 * 30 = 600px (total width of gutters)
          -----
          873px

或者你可以直接减去三fr总宽度中的单位和三个装订线:

1002px - (13 * 3) - (30 * 3) = 873px

Solution

由于您正在使用fr由于建立长度的单位以及容器之间的可用空间量不同,因此您的代码只能在全宽(24 列)下为两个容器实现相同的宽度。

要在小于全宽的情况下实现相等宽度,您需要使用不同的调整大小方法,例如px or em,对于列。

根据您的总体目标,可能还有其他解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 grid-gap 会改变 CSS Grid 中列的宽度? 的相关文章

  • span 和 iframe 正文中的宽度(以像素为单位)

    我需要知道 a 的宽度 nbsp 以像素为单位 以及是否取决于字体大小 另外 页面中不同元素的情况是否有所不同 还有 就是 nbsp 与常规不同 目的 nbsp 不间断空格 位于正常空格之上是为了防止单词之间出现换行 您可以使用多个 nbs
  • 由于绝对定位的抽屉,移动键盘可以向上推内容

    我正在制作一个带有 3 个抽屉的网站 元素绝对位于屏幕外 一个在左侧 一个在右侧 一个在底部 看看这里的网站 看看我在说什么https sjbuysse github io javascriting index html https sjb
  • 使用 CSS 的样式选择选项

    我正在尝试使用 CSS 设置选择选项列表的样式 我希望列表的时间之间有更多的填充 因为它们似乎被压在一起 我尝试向选项元素添加填充 但这似乎不起作用 有任何想法吗 这是我的代码 HTML
  • JavaFX ScrollPane 样式

    我正在尝试在 JavaFX 中创建一个黑白 ScrollPane 我已经创建了一个 CSS 文件 它工作得很好 除了这个小方块 无论我尝试什么 我都无法将其变黑 这是我的 CSS 文件 scroll pane fx background c
  • 使用 RGBA 颜色覆盖背景图像,并使用 CSS3 过渡

    今天早些时候我问使用 rgba 背景颜色覆盖背景图像 https stackoverflow com q 17134929 1544337 我的目标是拥有一个带有背景图像的 div 当有人将鼠标悬停在 div 上时 背景图像会覆盖有 rgb
  • 如何为多个元素添加Class?

    我正在使用这段 javascript 向多个元素添加一个类 我试图引用多个 div 并向它们添加类 它只适用于第一个 JavaScript
  • 恢复默认的CSS属性

    我正在编写一个可在多个网站上使用的组件 每个网站都有自己的样式表 并且以不同的方式显示某些内容 我的所有 html 都包含在一个带有 id 的 div 中 div div 然而 我的组件是在所有网站上看起来一致 这很好 因为我将样式应用于组
  • 为什么插入符号在具有position:relative的contenteditable中不可见?

    When a contenteditable元素有position relative和背景颜色 插入符号放置在该元素中时是不可见的 这是一个例子 bug position relative background color lightgre
  • 是否可以使materialize.css模态更大并删除垂直滚动条?

    我刚刚创建了按钮 单击后会弹出一个模式 每个按钮都有一个显示不同练习 gif 的模式 然而 模态框太小 导致用户无法看到整个 gif 迫使他们向下滚动 我想删除滚动条并使模态更大 以便用户可以看到整个 gif 任何帮助都会很棒 这是我的代码
  • Flexbox 调整大小和可滚动溢出[重复]

    这个问题在这里已经有答案了 我有正在调整大小的内容 并且我想要一个固定标题 该标题不会增大 缩小 并且不属于可滚动内容的一部分 如果空间不足 下面的内容将变得可滚动 内容外包装 flexGrowWrapper has a flex grow
  • 正常显示截断的文本,但悬停时显示完整文本

    我有一个 div 里面有一段左右的文本 我希望它正常显示前几个单词 但在悬停时展开以显示全文 理想情况下 我想仅使用 CSS 来完成此操作 而不需要重复数据 这是我尝试过的 div 1 ONE div
  • 如何在asp.net背后的代码中获取css样式

    我需要从 asp net c 中的代码后面获取 css 样式 在网上没有找到解决方案 是否可以直接从 styles css 文件获取它 还是需要解决方法 我在我的网络应用程序中使用主题 但我还需要进行一些服务器处理 并且我需要 ccs 文件
  • 使用非常大的背景位置偏移是否存在性能问题?

    我正在构建一个进度条控件 并且正在研究它实际上并不显示进度 而只是旋转 正在发生某事 的指示器的情况 我的设计基本上是交替的对角条纹 本质上是一个像这样的理发杆 但是 旋转 由于希望将尽可能多的负载转移给渲染引擎 我想为此使用 CSS 过渡
  • Twitter Bootstrap - 下拉菜单 - 箭头键不适用于 Firefox 中的输入标签

    要求 我想在带有用户名和密码字段的下拉菜单中放置一个登录表单 我可以做到这一点 除了以下问题之外 一切正常 Issue 打字时我无法使用箭头键 上 下 firefox 当输入位于下拉代码之外时 这很有效 这适用于其他浏览器 例如 googl
  • 有什么方法可以让 css 选择除第一页之外的所有内容吗?

    我刚刚找到了 CSS page指令 并将其与 first将 CSS 应用到 html 打印的第一页 有没有办法反其道而行之 将 CSS 应用于所有页面except首先 使用 CSS3 not https developer mozilla
  • 在“onClick”上切换 DIV 高度

    我想切换分区的高度 我尝试过将 animate 与 if else 语句一起使用 但它只会反弹 我现在使用的代码将隐藏我的分区而不是切换高度 点击时会触发 document ready function content1 toggle fu
  • 居中

    我的问题 http i56 tinypic com ff3jmo png http i56 tinypic com ff3jmo png 项目符号点未对齐 我要做的只是 text align center ing ul 所在的类 我可以对齐
  • 删除下拉链接并在导航栏菜单中显示其所有项目

    我正在使用 Twitter Bootstrap 及其响应式设计来实现顶部典型的 Twitter Bootstrap 导航栏菜单 在那里我有一些链接和一个下拉菜单 当我将浏览器大小调整为768px或者更少 它会转变为一种新的导航菜单 这一切开
  • 如果 jquery 验证激活,如何在单选按钮中放置红色边框[重复]

    这个问题在这里已经有答案了 我的问题是 如果 jquery 验证像示例图片中那样激活 我无法使单选按钮具有红色边框 任何人都可以帮我解决这个问题吗 http i38 photobucket com albums e149 eloginko
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L

随机推荐

  • 如何使用 C# 检查邮件已读或未读属性 (Lotus Notes)

    我想使用 C 检查邮件已读和未读属性 即想检查邮件是否被阅读 使用Domino dll 未读标记表不会通过 后端类 这是您最有可能在 Domino dll 中使用的类 公开 这可以通过较低级别的 C API 获得 需要处理更多的工作 但如果
  • 带有 PL/pgSQL 的 CRC32 函数

    如何计算 32 位循环冗余校验 CRC 32 作为 PostgreSQL 中的函数 方法与MySQL http dev mysql com doc refman 5 7 en mathematical functions html func
  • decltype(..., void()) 和 void_t 之间的区别

    上次我发现了许多关于 SFINAE 的答案 建议使用void t帮手 但我似乎不明白它有什么特别之处 decltype void 考虑这个例子 template
  • 类继承,强制新类实现某些功能

    好吧 我正在搞一些事情 特别是接口 假设我有一个类 猫 其基础为 动物 动物有一个方法 如下所示 public virtual void Walk Do walking stuff 所以 Cat 会用以下内容覆盖它 public overr
  • 如何为同源的 iframe 提供单独的 sessionStorage

    标准 W3C 标准对 localStorages 的描述如下 不同的作者共享一个主机名 例如用户在geocities com 所有共享一个本地存储对象 没有通过路径名限制访问的功能 因此 敦促共享主机上的作者避免使用这些功能 因为其他作者读
  • 在 Flask 中上传图片

    我必须在项目目录的静态文件夹中上传一些图像 但我不知道如何对我的代码说 在下面的 code py 中 我可以上传图像并将其存储在静态文件夹同一级别的项目目录中 但我希望该图像可以存储在静态文件夹内 app route uploader me
  • 根据 python 中的列表测试用户输入

    我需要测试用户输入是否与列表的元素相同 现在我正在这样做 cars red yellow blue guess str input if guess cars 1 or guess cars 2 print success 但是我正在处理更
  • 包私有类中的公共方法

    将方法标记为有什么区别吗public在包私有类中 class SomePackagePrivateClass void foo package private method public void bar public method 之间的
  • 如何将参数传递到 Flex/actionscript 中的事件侦听器函数中?

    因为当使用 sql lite 时 如果你尝试同时执行一个函数 它会抛出一个错误 我只是想创建一个函数来检查它是否正在执行 如果它在 10 毫秒内重试 这个函数就可以正常工作如果我不必向函数传递任何参数 但我很困惑如何将变量传递回它将执行的函
  • Pandas 到 Excel 条件格式整列

    我想将 Pandas 数据框写入 Excel 并格式化 为此我正在使用xlsxwriter 我的问题有两个 首先 如何将条件格式应用于整列 在里面examples http xlsxwriter readthedocs io example
  • 如何在Python内部列表中运行嵌套循环,以便外部循环始终从列表的下一个元素开始,依此类推

    我有一个类似的列表 16777230 0 16777226 1 16777252 2 16777246 0 我想在 python 中的操作的循环 嵌套循环 内创建一个循环 以便内部循环始终从外部循环的下一个元素开始 例如 外循环将在每次迭代
  • '(' 或 '[' 预期

    尝试编译我的程序时出现以下错误 预期为 或 public AccountArrayList line one below is the hi lighted code ArrayList accounts new ArrayList acc
  • Python 模块初始化

    在模块代码中初始化模块中的对象是不好的做法吗 in Module py class Foo object def init self self x Foo Foo Foo 与用户代码相比 您可以 gt gt gt from Module i
  • 同时支持 Android 和 Android TV 的 Android Studio 项目

    我正在尝试创建一个同时支持 Android 手机 平板电脑 和 AndroidTV 的 AndroidStudio 项目 目标是在手机 平板电脑和 AndroidTV 上拥有类似的功能 同时不需要另一个来操作 并重用代码 当我创建一个新项目
  • 在 iPhone 上的 iOS Safari 中访问相机

    I have 单页网络应用程序 SPA 那个verifies用户作为注册过程的一部分 验证的一部分是捕获selfie用户的 为此 我实现了以下代码的一个版本来获取camera输入到一个video网页上的元素 然后我可以从中sample图像转
  • 如何在添加数据后调整android webview的大小

    在布局 线性 垂直 层次结构中 我有多个视图 其中之一是 WebView 它们都有相同的参数 android layout width fill parent android layout height wrap content 对于所有视
  • c++filt 不会分解 typeid 名称

    我正在 GCC 上运行代码C 编译器 输出 type info name include
  • SQLException:等待空闲的可用连接超时

    我正在用 java 构建一个应用程序Play Framework 2 0 4 该应用程序部署在heroku使用cleardb数据库 用户不断收到此偶尔的错误 PlayException Execution exception Persist
  • WPF 应用程序中的 IIS 平滑流处理

    我怎样才能玩IIS 平滑流式传输 http www iis net expand SmoothStreamingWPF 应用程序中的视频 我知道 Silverlight 对其有内置支持 但我找不到 WPF 的太多信息 会不会MediaEle
  • 为什么 grid-gap 会改变 CSS Grid 中列的宽度?

    使用 css grid 我在容器内设置了一个 1002px 宽的 24 列网格 在容器 div 内 有一个跨 21 列的子 div 我期望子 div 的宽度是 21 24 1002 876 75 当添加 grid gap 属性时 列的宽度减