Jump to content
  • 0

Как занять блоками всю ширину родителя


Xerol
 Share

Question

Вот такая задачка появилась.

1. Есть контейнер резиновой ширины.

2. Есть блоки (например заметка с картинкой) в контейнере, их количество - любое от 1 до бесконечности. Реально надо обрабатывать хотя бы до 10. Количество блоков заранее не известно.

3. Блоки должны выводиться в контейнере равной ширины и занимать всю ширину контейнера.

4. (самое сложное) У блоков должна быть минимальная ширина: если контейнер сильно сужается, не влезающие блоки должны переноситься на следующую строку.

Последний пункт отметает вариант с table-cell. Указать ширину в % тоже нельзя - ведь заранее количество блоков не известно.

Вариант с justify + inline-block тоже не подходит, потому что блоки занимают не всю ширину, а их ширина зависит от содержания.

Если бы блоков было 1 или 2 - проходил бы вариант с :only-child, но их может быть и 3 и 4...

Не проходит вариант с JS - явы быть не должно.

Не проходит column-count - расположение блоков должно быть построчным.

PS: На старые браузеры можно забить.

PPS: Ощущение, что решение где-то в селекторах типа nth-child(2):before - но как заставить подвинуть первый блок свойствами второго?

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Не пойдет сразу по нескольким причинам:

1. По факту получаются блоки фиксированной ширины (100px)

2. Блоки не занимают всю ширину, а только кратную 100px, хотя это не критично.

3. Если в блок поместить текст - этот текст разопрёт блок. Нужно чтобы все блоки были одинаковой ширины независимо от наполнения.

Link to comment
Share on other sites

  • 0

1. По факту они схлопнулись до min-width. Положите в них контент и они растянутся.

2. Это вообще :dash:

3. Вы можете по человечески объяснить?

дайте им фиксированную ширину!

или что Вы хотите? Вычислять самый длинный блок с контентом, делить нацело ширину резинового для ближайшего значения, вычислять одинаковую ширину для всех блоков, задавать им при уменьшении основного блока сужение ширины, а при критическом значении минимальной ширины переносить вниз? и всё это без JS? :blink:

Тут и c JS возни-то!...

Link to comment
Share on other sites

  • 0

скажите минимальную и макимальную ширину всего сайта и каждого блока

выоты у блоков одинаковые?

можно попробовать совместить @media с min-width и max-width

знать сколько блоков нужно в любом случае, чтобы им выставлять какую часть от общего контента им можно занимать

как формируются данные блоки, это статичная траница или php. Ели php формирует разметку, то количество блоков подсчитать не проблема, если страница статичная то элементарно можно вместе с добавлением/удалением блока менять один class или id

Edited by Switch74
Link to comment
Share on other sites

  • 0

> Тут и c JS возни-то!

На JS всё давно реализовано, делов на 10 минут.

> дайте им фиксированную ширину! или что Вы хотите?

Я хочу резиновую ширину.

Поведение должно быть таким, как если бы я задал ширину 33% при трёх блоках, или 25% при четырёх, а внутрь блоков вставил другие блоки с width: auto; и min-width: 200px;

Проблема в том, что количество блоков не известно заранее.

> Не мучайтесь и юзайте таблицу для этих целей.

Я уже пояснил, что таблица не подходит - требуется перенос блоков при достижении критической ширины. Таблица просто съест часть столбцов если внешний блок будет узким. Сейчас так и реализовано - и это не универсально.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy