【问题标题】:CSS Grids. Different gap between each gridCSS 网格。每个网格之间的不同间隙
【发布时间】:2017-10-11 21:51:29
【问题描述】:

我正在尝试在每个网格元素之间应用不同的间隙,例如我们有以下代码。 4 条网格线、3 个元素和每个网格框之间的 10 像素宽度。如何在每个网格框之间应用自定义宽度?比如 element1 和 element2 之间 20px,然后 element2 和 element3 之间 30px?

我可以用 css 网格实现吗?

编辑:不使用填充。 Edit2:提供图片。

Click for picture preview

html, body {height: 100%; margin: 0; padding: 0;}
body {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-row: 1fr 1fr;
grid-column-gap: 10px;
grid-row-gap: 10px;
 
}
#element1 {
grid-column: 1/2;
grid-row: 1/2; 
border: 1px solid #2e2e2e;
color: #000;
}

#element2 {
grid-column: 2/3;
grid-row: 1/2; 
border: 1px solid #2e2e2e;
color: #000;
}

#element3 {
grid-column: 3/4;
grid-row: 1/2; 
border: 1px solid #2e2e2e;
color: #000;
}
<div id="element1">element1</div>
<div id="element2">element2</div>
<div id="element3">element3</div>

【问题讨论】:

    标签: css css-grid


    【解决方案1】:

    嗯,我喜欢与 css-grid 一起使用的一般方法是制作额外的列。如果您有相同的填充,显然使用grid-column-gapgrid-row-gap,但如果没有,您可以添加标记列。

    为什么不用填充/边距?

    您完全可以为此使用填充/边距,但我更喜欢额外的列,因为在 css-grid 中,您可以在包装器中定义布局,这在语义上属于该列。您也不必将其应用于这些列中的每个项目。 (另外,你是把它应用到左边还是右边或两个项目上?)。

    但这弄乱了我的编号

    是的,这就是为什么您从不使用数字来描述 CSS 网格中的区域!

    您可以命名您的线路并使用它来命名您的区域。用这个!您可以使用 grid-template-areas 来命名该矿石,只需将其命名为:

    grid-template-columns: [left-start] auto [left-end right-start] auto [right-end];
    

    哦,你想要额外的填充?给你:

    grid-template-columns: [left-start] auto [left-end] 10px [right-start] auto [right-end];
    

    请注意,我绝不是经验丰富的网络开发人员(恰恰相反),但我认为这种方法可能 - 通常 - 是最好的。

    【讨论】:

    • “制作额外的列”是什么意思?您添加空列,例如
      ?
    • 就像我在最后的例子中展示的那样。没有名称,最初是 auto auto,但后来我在中间添加了另一列,因此 CSS 为 auto 10px auto &lt;div&gt;&lt;/div&gt; 使用 css-grid 时 not 是否一定要添加一个空列。默认情况下,它将自动填充下一列,但正如我在回答中所描述的,您应该使用名称来指定列,例如grid-area: left;.
    • 这是一个很好的 css-grids 参考:css-tricks.com/snippets/css/complete-guide-grid
    【解决方案2】:

    对于您的情况,我在 Grid 上没有看到任何具体内容,但您可以通过添加填充轻松实现所需的结果。

    HTML

    <div id="grid">
      <div id="element1">
        <div class="content">element1</div>
      </div>
      <div id="element2">
        <div class="content">element2</div>
      </div>
      <div id="element3">
        <div class="content">element3</div>
      </div>
    </div>
    

    CSS

    #element1 {
      padding-right: 5px;
    }
    
    #element2 {
      padding-left: 5px;
      padding-right: 10px;
    }
    
    #element3 {
      padding-left: 10px;
    }
    
    .content {
      height: 100%;
      border: 1px solid #2e2e2e;
    }
    

    JsFiddle 示例:
    https://jsfiddle.net/wkt39kk8/

    【讨论】:

    • 是的,我可以提供填充,但不知何故,我的布局没有达到预期的效果。也许我应该使用另一种方法?请问目前布局的最佳做法是什么?
    • 您在使用填充时遇到了什么问题?
    • 我有很多元素和很多网格。为了解释这个问题,我在这里简单地做了几个网格来询问。在我的布局中,我有一些图像位于几个 div 中,其中一个甚至在图片上方有一个框架,而框架本身在其他网格中溢出。这就是为什么我正在寻找一种在它们之间留出一些空间的方法。填充没有按预期工作,我给了它 30px 的填充,但它只填充了 20px。然后我去尝试了 200px 的 pad。再一次,它只移动了 20px。很抱歉我无法提供屏幕截图。
    • @Knightwalker,您应该在问题中提供所有这些详细信息,并发布足够的代码来重现实际问题。如果您需要针对特定​​问题的帮助,请提出特定问题。
    • 具体!我正在寻找一种在 3 个网格之间添加自定义宽度的方法。这就是重现问题所需的所有代码!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2018-05-23
    • 2020-09-07
    • 1970-01-01
    • 2019-11-16
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多