Расширить фон столбца до желобов сетки

Учти это…

Вы создаете трехколоночный макет, используя систему сеток. Ваш контейнер фиксированного размера и центрирован с использованием margin: 0 auto.

В соответствии с вашими требованиями к дизайну первый столбец должен иметь цвет фона, доходящий до левого края окна браузера.

Есть идеи, как этого добиться? Я мог бы заставить его работать таким образом, что является своего рода хакерством и может не работать для определенный вид фонового изображения.

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;
}

person Pratik Mehta    schedule 23.05.2018    source источник


Ответы (2)


Вы также можете сгенерировать фон с помощью псевдоэлемента.

Значение 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>

person sol    schedule 23.05.2018
comment
на этот раз быстрее: p - person Temani Afif; 24.05.2018
comment
Спасибо, Сол и @Temani Afif! Математически оба наших решения имеют фундаментальный недостаток допущения - что, если 50% (50vw) недостаточно - что, если пространство желоба больше 50% на больших экранах? Я знаю, что сегодня такие устройства сложно найти. НО, я возьму ваше решение и помечу его как возможный ответ. :) - person Pratik Mehta; 24.05.2018
comment
@PratikMehta вы просто увеличиваете его :) сделайте 100vw и вы будете уверены, что этого достаточно;) - person Temani Afif; 24.05.2018
comment
Это правда. Тогда это станет полноценным решением. Хороший разговор !! - person Pratik Mehta; 24.05.2018

Вы можете попробовать растянуть столбцы на всю ширину контейнера, а затем выровнять содержимое внутри так, чтобы оно отображалось как три центрированных столбца.

.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>

демонстрация кода

person Michael Benjamin    schedule 24.05.2018