Как разместить элементы произвольной ширины друг под друга при соприкосновении?

Ссылка скопирована
8 апреля 2026 1 ответ

Привет.
Что-то, как-то я недопойму. Есть ли возможность решить задачу без JS и на флексах?
Есть три блока, идущих в один ряд. Блоки могут иметь произвольную ширину. Вот они:

Как разместить элементы произвольной ширины друг под друга при соприкосновении?

Нужно сделать так, чтобы при уменьшении размеров окна браузера при соприкосновении блоков сначала третий блок «уезжал» под первый. Вот так:

Как разместить элементы произвольной ширины друг под друга при соприкосновении?

А потом при дальнейшем уменьшении окна браузера, второй блок уезжал под первый, а третий — размещался бы под вторым. Вот так:

Как разместить элементы произвольной ширины друг под друга при соприкосновении?

Подскажите, пожалуйста, есть ли решение?

P.S.
Вот пример HTML.

Дополнительно:

Вроде стандартное поведение флексов
+ margin-right auto для второго элемента

  • у третьего убрать отступ слева, а второму добавить отступ авто справа.
  • Ankhena, в этом случае если второй и третий элементы помещаются на одну строку, то они будут на одной строке, т. е. большой первый элемент может занять всю строку, а второй и третий окажутся небольшими по ширине и займут вторую строку, но тут важна логика: каждый элемент должен занимать свою отдельную строку при нехватке ему места.
  • weranda, в вашем тексте противоречие, но ладно, поведение понятно.
    Пока думаю, что без js не выйдет
  • Ankhena, weranda, а по старинке флоатами?
  • Kentavr16, и что это меняет? Ширину расставьте по-другому и 2 и 3 снова встанут на одну строку.
  • Ответы:

    Это имел в виду?

    • Нет, не то это. Поясню. Если сделать случайную ширину элементов, то при достижении определенного размера ширины окна браузера элементы в зависимости от их ширины и доступной ширины контейнера не будут идти именно в той очередности, в которой показал я на примере в вопросе. Вот вам наглядный пример из вашего примера:

      Как разместить элементы произвольной ширины друг под друга при соприкосновении?

      А надо чтобы была универсальная логика при любых ширине элементов и ширине окна браузера, т. е. при любом раскладе: третий элемент уходит на второю строку первым, второй — на вторую вторым и никак иначе. Тут, наверное, все-таки, JS нужен.

    • weranda, изменил пример. Очередность соблюдается при любых размерах. Это то же практически что перенос слов в строках. Или дополни запрос если я не понял проблему.
    • Kentavr16, Если установить значения контейнеров, к примеру, в 250, 625 и 75 пикселей, то этот пример не сработает.

    значение minmax задайте

    Допустим. 3 блока.

    <div class="blocks"> <div class="block block1"></div> <div class="block block2"></div> <div class="block block3"></div> </div>

    <div class="blocks"> <div class="block block1"></div> <div class="block block2"></div> <div class="block block3"></div> </div>

    Тогда.

    .blocks { width: 100%; } .block { width: 30%; display: inline-block; }  /* Уменьшаем размер экрана. размер экрана 1026px */  @media screen and (max-width: 1026px) { .blocks { width: 80%; }} /* При длинне общего блока 80% от всей длинны экрана последнему блоку места не хватает, он спрыгивает вниз. */ /* А при длинне общего блока 50% уже и 2 блоку мало места, и что вам и надо, они дружно выстраиваются один под другим */   @media screen and (max-width: 900px) { .blocks { width: 50%; } .block { width: 100%; }}

    .blocks { width: 100%; } .block { width: 30%; display: inline-block; } /* Уменьшаем размер экрана. размер экрана 1026px */ @media screen and (max-width: 1026px) { .blocks { width: 80%; }} /* При длинне общего блока 80% от всей длинны экрана последнему блоку места не хватает, он спрыгивает вниз. */ /* А при длинне общего блока 50% уже и 2 блоку мало места, и что вам и надо, они дружно выстраиваются один под другим */ @media screen and (max-width: 900px) { .blocks { width: 50%; } .block { width: 100%; }}

    media screen and (max-width: 900px) {}
    Вот этой конструкцией вы задаёте стили для элементов в зависимости от размера экрана. Т.е. при размере максимальной длинны экрана (max-width), width это длинна, 900px, ваши эдементы имеют такие-то параметры. Это назыается адаптивная вёрстка.

    media screen and (max-width: 1026px) Размер для media, к прмеру 1026px, определяйте по месту. Как определить, это уже другая тема. По желанию могу ответить.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Никита Орлов Ответ

    Для размещения элементов произвольной ширины друг под другом при соприкосновении можно использовать свойство CSS flexbox. Flexbox - это мощное средство для управления распределением элементов внутри контейнера.

    Для начала, создайте контейнер, в котором будут располагаться ваши элементы. Примените к этому контейнеру следующие CSS свойства:

    .container {
      display: flex;
      flex-wrap: wrap;
    }

    .container { display: flex; flex-wrap: wrap; }

    Свойство display: flex; делает контейнер флекс-контейнером, а свойство flex-wrap: wrap; позволяет элементам переноситься на новую строку при нехватке места.

    Затем, определите стили для каждого элемента внутри контейнера. Например:

    .item {
      flex: 1 0 30%; /* ширина элемента - 30%, может изменяться */
      margin: 5px; /* отступ между элементами */
    }

    .item { flex: 1 0 30%; /* ширина элемента - 30%, может изменяться */ margin: 5px; /* отступ между элементами */ }

    В данном примере, свойство flex: 1 0 30%; указывает, что элемент будет занимать 30% доступного пространства, но при необходимости может изменяться.

    Теперь, в HTML разместите свои элементы внутри контейнера:

    <div class="container">
      <div class="item">Element 1</div>
      <div class="item">Element 2</div>
      <div class="item">Element 3</div>
    </div>

    <div class="container"> <div class="item">Element 1</div> <div class="item">Element 2</div> <div class="item">Element 3</div> </div>

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

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно