将列背景扩展到网格间距

Extend column background into grid gutters

考虑一下……

您正在使用网格系统创建三列布局。您的容器使用 margin:0 auto.

固定大小并居中

您的设计规范要求第一列的背景颜色延伸到浏览器的左边缘。

知道如何实现吗? I could make it work this way,这是一种 hack,它可能不适用于某些类型的图像背景。

HTML:

<main>
  <section>
    <div class="container">
      <header>
        <h1>Hey There!</h1>
      </header>
      <div>
        <h2>Column 2</h2>
      </div>
      <div>
        <h2>Column 3<h2>
      </div>
    </div>
  </section>
</main>

CSS

main {
  min-width: 800px;
}

section {
  background-image: linear-gradient(to right, #dfdfdf 50%, #fff 50%);
  border-bottom: 1px solid #dfdfdf;
}

.container {
  width: 500px;
  margin:0 auto;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
}

section > * {
  min-height: 200px;
}

.container > div {
  background-color: #fff;
  padding-left: 30px;
}

您也可以使用伪元素生成背景。

left 值足够大,可以使背景延伸出屏幕。如果您需要背景图片的精确位置,可能会有问题。

此外,您可以考虑 grid-gap 而不是将 padding-left 添加到网格项目。

body {
  margin: 0;
}

main {
  min-width: 800px;
}

section {
  border-bottom: 1px solid #dfdfdf;
}

.container {
  width: 500px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
}

section>* {
  min-height: 200px;
}

.container>div {
  background-color: #fff;
  padding-left: 30px;
}

header {
  position: relative;
}

header:before {
  content: '';
  background: lightgrey;
  display: block;
  position: absolute;
  left: -50vw;
  right: 0;
  bottom: 0;
  height: 100%;
  z-index: -1;
}
<main>
  <section>
    <div class="container">
      <header>
        <h1>Hey There!</h1>
      </header>
      <div>
        <h2>Column 2</h2>
      </div>
      <div>
        <h2>Column 3</h2>
      </div>
    </div>
  </section>
</main>

您可以尝试让列伸展到容器的整个宽度,然后对齐内部内容以显示为三个居中的列。

.container {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  grid-column-gap: 20px;
  min-height: 50px;
}

header {
  background-color: lightgray;
  display: flex;
  justify-content: flex-end;
}

section {
  border-bottom: 1px solid #dfdfdf;
}

body {
  margin: 0;
}

p { text-align: center;}
p > span { padding: 5px; background-color: aqua; }
<main>
  <section>
    <div class="container">
      <header>
        <h1>Hey There!</h1>
      </header>
      <div>
        <h2>Column 2</h2>
      </div>
      <div>
        <h2>Column 3</h2>
      </div>
    </div>
  </section>
</main>
<p><span>True Center</span></p>

codepen demo