Проблемы с HTML + css макет (позиционирование элементов) - PullRequest
0 голосов
/ 18 марта 2020

У меня есть этот код:

Моя скрипка: https://jsfiddle.net/v5j3L6e9/

В основном у меня есть 6 ящиков (деления с изображением и текстом поверх).

Я пытаюсь центрировать "нижнюю зону" (это может быть, например, макет с жидкостью, с верхней зоной в качестве заголовка, а затем с основным содержимым, с максимальной шириной)

Идея состоит в том, что «нижняя зона» имеет фиксированную максимальную ширину, поэтому, когда разрешение больше, она должна оставаться в центре (в то время как «верхняя зона» будет расширена с шириной разрешения).

Я не понимаю, как чтобы центрировать нижнюю зону без разрыва расположения ящиков (ящики должны поддерживать распределение и сохранять центрирование).

Кроме того, не уверен, что я сделал хорошую иерархию элементов (довольно новое для html + css).

Спасибо.

.topzone {
  height: 100px;
  background-color: blue;
}

.topzone h1 {
  text-align: center;
}

.bottomzone {
  margin-top: 50px;
  max-width: 800px;
  text-align: center;
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
}

.bottomzone div {
  position: relative;
  width: 30%;
  margin: 0px 10px 0px 10px;
}
.bottomzone img {
  width: 100%;
}
.bottomzone div h3 {
  position: absolute;
  top: 20px;
  width: 100%;
}
<div class="topzone">
  <h1>Title 1</h1>
  <h2>Title 2</h2>
</div>
<div class="bottomzone">
  <div>
    <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
    <h3>Box 1</h3>
  </div>
  <div>
    <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
    <h3>Box 2</h3>
  </div>
  <div>
    <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
    <h3>Box 3</h3>
  </div>
  <div>
    <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
    <h3>Box 4</h3>
  </div>
  <div>
    <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
    <h3>Box 5</h3>
  </div>
  <div>
    <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
    <h3>Box 6</h3>
  </div>
</div>

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Если вы хотите использовать flex-box, вы можете просто использовать элемент-оболочку centering-wrapper и установить align-items: center и flex-direction: column для центрирования элементов по горизонтали.

.centering-wrapper {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.topzone {
  height: 100px;
  background-color: blue;
}

.topzone h1 {
  text-align: center;
}

.bottomzone {
  margin-top: 50px;
  max-width: 800px;
  text-align: center;
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
}

.bottomzone div {
  position: relative;
  width: 30%;
  margin: 0px 10px 0px 10px;
}
.bottomzone img {
  width: 100%;
}
.bottomzone div h3 {
  position: absolute;
  top: 20px;
  width: 100%;
}
<div class="topzone">
  <h1>Title 1</h1>
  <h2>Title 2</h2>
</div>
<div class="centering-wrapper">
  <div class="bottomzone">
    <div>
      <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
      <h3>Box 1</h3>
    </div>
    <div>
      <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
      <h3>Box 2</h3>
    </div>
    <div>
      <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
      <h3>Box 3</h3>
    </div>
    <div>
      <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
      <h3>Box 4</h3>
    </div>
    <div>
      <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
      <h3>Box 5</h3>
    </div>
    <div>
      <img src="https://etc.usf.edu/clipart/21900/21988/square_21988_md.gif" alt="Just a box">
      <h3>Box 6</h3>
    </div>
  </div>
</div>
0 голосов
/ 18 марта 2020

Добавьте эти CSS правила к селектору .bottomzone:

margin-left: auto;
margin-right: auto;

Это гарантирует, что браузер вычислит одинаковое количество пространства для использования для левого и правого полей. Поскольку вы используете margin-top в своем коде, вы можете упростить его следующим образом:

.bottomzone {
  margin: 50px auto 0;
  ...
}

, где 0 - нижнее поле.

...