FlexBox: как я могу фиксировать коробки один под другим

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

Моя проблема сейчас в том, что я не могу сделать так, чтобы каждое поле (изображение + текст) оставалось на своем месте по вертикали, ящики плавают, и у них разное пространство между собой в зависимости от того, что я использую для просмотра (большой экран, ноутбук).

Я не эксперт по FlexBox, могу ли я это сделать?

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

Любая помощь будет приветствоваться, и я буду продолжать учиться :)

  body {
  margin: 0;
}

.container {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  height: 100vh;
}

.top {
  border: 1px solid white;
  width: 50%;
  height: 10%;
  align-self: flex-start;
  text-align: center;
}

.inner-container {
  border: 1px solid white;
  width: 50%;
  height: 60%;
  display: flex;
}

.center {
  position: absolute;
  width: 50%;
    text-align: left;
    align-self: flex-end;
}

.off-center {
  position: absolute;
  vertical-align: bottom;
    text-transform: uppercase;
    padding-left: 10px;
    min-width: 200px;
    align-self: flex-end;
}

.center, .off-center {
  position: absolute;
}

.center img {width: 100%;}

.off-center h2 {font-size:12px; font-family: 'Open Sans', sans-serif; font-weight: 400;text-transform: uppercase; color:black; display: block!important;margin: 0px;}
.off-center p {font-size: 20px; font-family:'aileronbold', sans-serif; display: block!important;margin: 0px;text-transform: none;}

.row.subscriptionBar {display:flex; background-color: black; display: block; padding:20px;}
.subscriptionBar h2 {color:white;}
.firstPart {display: }

@media screen and (min-width: 769px) {
  .off-center {
    margin-left: 50%;
  }


@media screen and (max-width: 768px) {
  .off-center {
    margin-top: 105px;
  }
}
<div class = "container">
  <div class = "top"><img src = "https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width = "80px"></div>
  <div class = "inner-container">
    <div class = "center">
    	<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
    <div class = "off-center">
    	<h2 class = "">ArtistName 1</h2>
		<p>509476ZclHtqXy</p></div>
  </div>
  <div class = "inner-container">
    <div class = "center">
    	<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
    <div class = "off-center">
    	<h2 class = "">ArtistName 2</h2>
		<p>Title lala 1</p></div>
  </div>
  <div class = "inner-container">
    <div class = "center">
      <img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
    <div class = "off-center">
      <h2 class = "">ArtistName 3 444</h2>
    <p>Title 093830</p></div>
  </div>

</div>

FlexBox: как я могу фиксировать коробки один под другим

Ваш код действительно очень близок к тому, чего вы пытаетесь достичь. Не могли бы вы подробнее объяснить, в чем проблема?

Serg Chernata 18.09.2018 21:54

Конечно, спасибо. Проблемы: 1) Изображения / прямоугольники перемещаются вертикально, иногда над логотипом вверху. Я привык работать с Bootstrap и CSS, но с flexbox я не знаю, как устанавливать границы. 2) Та же проблема, что и в предыдущем пункте, я думаю, но как я могу установить горизонтальные изображения и вертикальные изображения, чтобы сохранить те же пропорции. Посмотрите пример / каркас, прикрепленный к моему сообщению. В настоящее время вертикальное изображение перекрывается с другими полями. 3) Горизонтальная полоса: посередине страницы, я хочу, чтобы она была после третьего поля.

Soledad Cánepa Docampo 18.09.2018 22:14

Я не вижу горизонтальной полосы в вашем макете. Кроме того, вы можете упростить вопрос, немного разбив проблему. Может быть, сфокусируйтесь на этом вопросе на одной проблеме. Как только об этом позаботятся, сосредоточьтесь на следующем в новом вопросе. Это упростит понимание проблем и сделает их более привлекательными для участников.

Michael Benjamin 18.09.2018 23:52

Я думаю, что ваш макет был бы намного проще, если бы вы добавили flex-direction: column; в свой контейнер.

Bricky 19.09.2018 00:12
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
4
1 303
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

.wrapper {
  display: flex;  
  flex-flow: row wrap;
  font-weight: bold;
  text-align: center;
}

.wrapper > * {
  padding: 10px;
  flex: 1 100%;
}

header{
  background: tomato;
}

section{
  display: flex
}
.main {
  background: deepskyblue;
}

.main img{
  max-width: 100%;
}

.full-width {
  background: lightgreen;
}

.main    { order: 2; flex: 3 0px; }
.aside { flex: 1 auto; }
.aside-1 { order: 1; background: gold; width: 10%} 
.aside-2 { order: 3; background: hotpink; position: relative; width: 10%}
.aside-2 > span {
    position: absolute;
    bottom: 0;
    left: 0;
}
.vertical {
  width: 15%; /* Modify this value for different screen size*/
}
/* .full-width  { order: 4; } */
/*@media all and (min-width: 600px) {
  .aside { flex: 1 auto; }
}

@media all and (min-width: 800px) {
  .main    { flex: 3 0px; }
  .aside-1 { order: 1; } 
  .main    { order: 2; }
  .aside-2 { order: 3; }
  .footer  { order: 4; }
}*/
body {
  padding: 2em; 
}
<div class = "wrapper">
    <header><img src = "https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width = "80px"></header>
    <section>
        <div class = "main">
        <img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = "">
        </div>
        <aside class = "aside aside-1"></aside>
        <aside class = "aside aside-2"><span>Aside Right</span></aside>
    </section>
        <section>
       <div class = "main">
          <img src = "https://picsum.photos/200/300" alt = "">
       </div>
       <aside class = "aside aside-1 vertical"></aside>
       <aside class = "aside aside-2 vertical"><span>Aside Right</span></aside>
   </section>
    <section>
     <div class = "main">
          <img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = "">
        </div>
        <aside class = "aside aside-1"></aside>
        <aside class = "aside aside-2"><span>Aside Right</span></aside>
    </section>

   <section class = "full-width">Full Width</section>
    <section>
        <div class = "main">
        <img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = "">
        </div>
        <aside class = "aside aside-1"></aside>
        <aside class = "aside aside-2"><span>Aside Right</span></aside>
    </section>
</div>

Я просто делаю небольшой образец, потому что неясно, что вы ищете. Если вы надеетесь двигаться в этом направлении, возможно, я смогу вам помочь.

Ты классный, спасибо! Это именно то, что мне нужно. Из того, что я вижу, одной из моих основных проблем была настройка flexbox, вы добавляли заказы в flexbox, а затем внутри каждого раздела вы использовали абсолютное позиционирование для позиционирования изображения + текста, и это имело смысл. Я буду работать над медиа-запросами. У меня есть только один вопрос, потому что я не вижу его в этом ответе: если я поставлю изображение с вертикальной ориентацией, я попытаюсь использовать 100% ширину. Если вы видите прилагаемый пример, разница между горизонтальным и вертикальным изображением. В настоящее время, когда используется vertica, растяните изображение до 100% ширины.

Soledad Cánepa Docampo 20.09.2018 04:46

Вопрос: Насколько динамичной будет ваша страница? Какую точку соотношения вы собираетесь использовать для установки изображений? или он будет полностью статичным? Если вы не хотите, чтобы изображение использовало 100% ширину, вы можете установить его max-width: 100% вместо width: 100%. Если ваша страница будет статической, вы можете использовать модификацию, но она не идеальна, больше похожа на временное исправление, чтобы получить представление. Если он будет динамичным, есть другие способы справиться с этим. Дайте мне знать!

Victoria Le 20.09.2018 18:38

Не уверен, что вы имеете в виду под динамическим и статическим ... Чего я не хочу, так это использовать 100% ширину для вертикальных изображений ... потому что вертикально ориентированное изображение пытается использовать 100% ширины, и оно стало больше, чем горизонтальный, потому что приоритет отдается сохранению 100% ширины, и я не хочу этого ... по вертикали должна отображаться "меньшая" ширина, по центру ... проверьте мой исходный пост с изображениями, есть вертикальное изображение . Я попробую с max-width, чтобы посмотреть, поможет ли это. Спасибо!

Soledad Cánepa Docampo 20.09.2018 21:21

О, я думаю, я понимаю ... он будет полностью статичным, это временный веб-сайт, и я могу управлять обновлениями с помощью кода.

Soledad Cánepa Docampo 20.09.2018 21:36

Я забыл упомянуть об этом, но я обновил коды раньше, проверьте, если это то, что вы хотите

Victoria Le 20.09.2018 21:37

Спасибо, да, мне это помогает. Я сделал то же самое, что и вы, и это сработало (добавление вертикального класса и изменение размера), поскольку это 100% статический веб-сайт и временный, мы можем перейти к не очень динамичным / приятным параметрам, но они должны работать нормально. Спасибо!

Soledad Cánepa Docampo 21.09.2018 01:01

У вас просто слишком много всего происходит с вашей комбинацией flexbox и абсолютного позиционирования. Ниже представлена ​​версия вашего фрагмента, в которой большая часть ненужных css закомментирована (так что вы можете точно видеть, что это такое) плюс пара новых дополнений.

Наиболее важные изменения, кроме удаления некоторых из абсолютного позиционирования, - это удаление flex-wrap из вашего .container и добавление flex-direction: column, а также согласование ширины .center и .off-center, чтобы вы могли использовать position: absolute на .off-center (хорошее использование в этом случае) вместе с эквивалентом margin-left. на ширину, чтобы убедиться, что он расположен справа от контейнера изображений.

  body {
  margin: 0;
}

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  /*justify-content: center;
  flex-wrap: wrap;
  height: 100vh;*/
}

.top {
  border: 1px solid white;
  /*width: 50%;*/
  height: 10%;
  /*align-self: flex-start;*/
  text-align: center;
}

.inner-container {
  border: 1px solid white;
  /*width: 50%;*/
  height: 60%;
  display: flex;
  justify-content: space-around;
}

.center {
  /*position: absolute;*/
  width: 50%;
  min-width: 200px;
  text-align: left;
  /*align-self: flex-end;*/
}

.off-center {
  position: absolute;
  /*vertical-align: bottom;*/
  text-transform: uppercase;
  padding-left: 10px;
  width: 50%;
  min-width: 200px;
  align-self: flex-end;
  margin-left: 50%;
}


/*.center, .off-center {
  position: absolute;
}*/

.center img {
  width: 100%;
}

.off-center h2 {
  font-size: 12px;
  font-family: 'Open Sans', sans-serif;
  font-weight: 400;
  text-transform: uppercase;
  color: black;
  display: block!important;
  margin: 0px;
}

.off-center p {
  font-size: 20px;
  font-family: 'aileronbold', sans-serif;
  display: block!important;
  margin: 0px;
  text-transform: none;
}

.row.subscriptionBar {
  display: flex;
  background-color: black;
  display: block;
  padding: 20px;
}

.subscriptionBar h2 {
  color: white;
}

.firstPart {
  display:
}

/*@media screen and (min-width: 769px) {
  .off-center {
    margin-left: 50%;
  }
  @media screen and (max-width: 768px) {
    .off-center {
      margin-top: 105px;
    }
  }*/
<div class = "container">
  <div class = "top"><img src = "https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width = "80px"></div>
  <div class = "inner-container">
    <div class = "center">
      <img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = "">
    </div>
    <div class = "off-center">
      <h2 class = "">ArtistName 1</h2>
      <p>509476ZclHtqXy</p>
    </div>
  </div>
  <div class = "inner-container">
    <div class = "center">
      <img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
    <div class = "off-center">
      <h2 class = "">ArtistName 2</h2>
      <p>Title lala 1</p>
    </div>
  </div>
  <div class = "inner-container">
    <div class = "center">
      <img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
    <div class = "off-center">
      <h2 class = "">ArtistName 3 444</h2>
      <p>Title 093830</p>
    </div>
  </div>

</div>

Благодарю за ваш ответ. У меня это не работает, потому что у меня все еще проблемы с плаванием. Я не могу загрузить, как я это вижу, но поля отделяются друг от друга, если у вас рабочий стол меньшего размера ...

Soledad Cánepa Docampo 20.09.2018 04:37

Должен быть какой-то другой CSS или конфликтующая библиотека, которая вызывает вашу проблему. Html и css во фрагменте ответа не вызовут разделения между изображениями на устройствах разных размеров (вы можете развернуть фрагмент до полной страницы, а затем протестировать устройства различной ширины в своем браузере, чтобы понять, о чем я говорю). Тем не менее, похоже, что вы нашли то, что вам нужно, в другом ответе, который очень хорошо составлен @KendraChu.

benvc 20.09.2018 05:03

Да, отличный ответ от @KendraChu. Теперь у меня просто есть некоторые проблемы с отзывчивостью изображения ... если я удалю width:100% из .main img, я получу то, что мне нужно, а именно сохранение соотношений и пропорций изображений (вертикальное изображение не должно использовать ту же ширину, что и горизонтальное), НО если я это сделаю, изображение не будет реагировать.

Soledad Cánepa Docampo 20.09.2018 05:38

Другие вопросы по теме