Расположение элементов в html

Можно ли создать эту структуру с помощью html + css?

Но вместо этого вертикального пространства между оранжевыми блоками я хочу быть один над другим.

Я использовал flex и grid, но пока не преуспел :(

jsfiddle:

.container {
  padding: 10px;
  border: 1px solid red;
  display: flex;
  flex-flow: row wrap;
  justify-content: space-between;
}

.big {
  width: calc(60% - 22px);
  padding: 10px;
  background: lime;
  height: 100px;
  margin-bottom: 10px;
}

.small {
  width: calc(40% - 22px);
  height: 100px;
  padding: 10px;
  background: orange;
  margin-bottom: 10px;
}
<div class = "container">
  <div class = "big"> I AM BIG 1</div>
  <div class = "small"> I AM SMALL 1</div>
  <div class = "big"> I AM BIG 2</div>
  <div class = "big"> I AM BIG 3</div>
  <div class = "big"> I AM BIG 4</div>
  <div class = "small"> I AM SMALL 2 </div>
</div>

Расположение элементов в html

Вы можете изменить структуру div <div class = "container"> <div class = "big"c> Я БОЛЬШОЙ 1</div> <div class = "small"> Я МАЛЕНЬКИЙ 1</div> <div class = "big"> Я БОЛЬШОЙ 2</div> <div class = "small"> Я МАЛЕНЬКИЙ 2 </div> <div class = "big"> Я БОЛЬШОЙ 3</div> <div class= "big"> I AM BIG 4</div> </div> или если вы не хотите переупорядочивать структуру html, вы можете использовать свойство порядка в css. ссылка: css-tricks.com/almanac/properties/o/order

Mangesh 23.05.2019 08:40

Возможно, вы сможете сделать это с помощью grid-area. Вот очень полезное руководство: css-tricks.com/snippets/css/complete-guide-grid

Fabio Zanchi 23.05.2019 08:41

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

SylvesterTheKid 23.05.2019 09:14
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
3
207
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Вы можете легко сделать это с помощью макета сетки CSS:

  • вы можете использовать grid-template-columns: 3fr 2fr;, потому что у вас есть соотношение 60% к 40% элементов big и small,

  • высоту строки можно установить с помощью grid-auto-rows: 100px,

  • отступ между строками можно установить с помощью свойства grid-row-gap,

  • теперь установите big, чтобы всегда занимать первый столбец, используя grid-column: 1, и small, чтобы всегда занимать второй столбец.

См. демонстрацию ниже для конфигурации до сих пор:

.container {
  padding: 10px;
  border: 1px solid red;
  display: grid;
  grid-template-columns: 3fr 2fr;
  grid-auto-rows: 100px;
  grid-row-gap: 10px;
}

.big {
  padding: 10px;
  background: lime;
  grid-column: 1;
}

.small {
  padding: 10px;
  background: orange;
  grid-column: 2;
}
<div class = "container">
  <div class = "big"> I AM BIG 1</div>
  <div class = "small"> I AM SMALL 1</div>
  <div class = "big"> I AM BIG 2</div>
  <div class = "big"> I AM BIG 3</div>
  <div class = "big"> I AM BIG 4</div>
  <div class = "small"> I AM SMALL 2 </div>
</div>

Теперь просто добавьте grid-auto-flow: dense, чтобы вытащить оранжевые блоки наверх — см. демо ниже:

.container {
  padding: 10px;
  border: 1px solid red;
  display: grid;
  grid-template-columns: 3fr 2fr; /* two columns */
  grid-auto-rows: 100px; /* row height */
  grid-row-gap: 10px; /* gap between rows */
  grid-auto-flow: dense; /* added */
}

.big {
  padding: 10px;
  background: lime;
  grid-column: 1; /* in first column */
}

.small {
  padding: 10px;
  background: orange;
  grid-column: 2; /* in second column */
}
<div class = "container">
  <div class = "big"> I AM BIG 1</div>
  <div class = "small"> I AM SMALL 1</div>
  <div class = "big"> I AM BIG 2</div>
  <div class = "big"> I AM BIG 3</div>
  <div class = "big"> I AM BIG 4</div>
  <div class = "small"> I AM SMALL 2 </div>
</div>

Это выглядит красиво и именно то, что мне нужно, но если у меня есть 3 размера, это будет возможно? Я имею в виду 3 блока типа 30% 40% и еще 30%

BurebistaRuler 23.05.2019 08:58

Вы можете просто изменить это, изменив порядок ваших divs как

<div class = "container">
    <div class = "big"> I AM BIG 1</div>
    <div class = "small"> I AM SMALL 1</div>
    <div class = "big"> I AM BIG 2</div>
    <div class = "small"> I AM SMALL 2 </div>
    <div class = "big"> I AM BIG 3</div>
    <div class = "big"> I AM BIG 4</div>  
</div>

Надеюсь, это то, что вы искали.

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

HTML

<div class = "d-flex flex-row">
  <div class = "d-flex flex-column mr-1">
    <div class = "big-box">
      BOX 1
    </div>
    <div class = "big-box">
      BOX 2
    </div>
    <div class = "big-box">
      BOX 3
    </div>
    <div class = "big-box">
      BOX 4
    </div>
  </div>
  <div class = "d-flex flex-column">
    <div class = "small-box">
      BOX 5
    </div>
    <div class = "small-box">
      BOX 6
    </div>
  </div>
</div>

CSS

.d-flex {
  display: flex;
}

.flex-row {
  flex-direction: row;
}

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

.big-box {
  background-color: green;
  width: 400px;
  height: 100px;
  margin: 2px 0;
  padding: 10px;
}

.small-box {
  background-color: orange;
  width: 300px;
  height: 100px;
  margin: 2px 0;
  padding: 10px;
}

.mr-1 {
  margin-right: .5rem;
}

Ссылка на скрипт JS: https://jsfiddle.net/SJ_KIllshot/uvr0hzkw/

.main{
border: 1px solid red;
padding: 5px;
display:flex;
justify-content:space-between;
}
.left{
width:59.8%; 
}
.right{
width:39.8%;
position:relative;
display:block;
}
.right .orange-block:last-child{
  position:absolute;
  display:block;
  bottom:0;
  width: -webkit-fill-available;
}
.lime-block,.orange-block{
  margin-bottom:5px;
  height:80px;
  padding:5px;
}
.lime-block:last-child,.orange-block:last-child{
  margin-bottom:0px;
}
.lime-block{
  background:lime;
}
.orange-block{
  background:orange;
}
<body>
<div class = "main">
<div class = "left">
  <div class = "lime-block">I AM BIG 1</div>
  <div class = "lime-block">I AM BIG 2</div>
  <div class = "lime-block">I AM BIG 3</div>
  <div class = "lime-block">I AM BIG 4</div>
</div>
<div class = "right">
  <div class = "orange-block">I AM SMALL 1</div>
  <div class = "orange-block">I AM SMALL 2</div>
</div>
</div>
</body>

это простой код, как вы хотите, на основе гибкости, а также поддержка динамического содержимого.

Akash Singh 23.05.2019 09:02

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