Плавание было бы моим выбором, но это действительно зависит от того, чего вы хотите достичь. Если бы вы могли привести более конкретный пример, я мог бы дать вам четкую причину того, что и почему я думаю, что вы должны использовать. Однако вот краткий набор плюсов и минусов, с которыми я столкнулся (я предполагаю, что под позиционированием вы подразумеваете абсолютное позиционирование):
Позиционирование плюсов:
- очень точное позиционирование по отношению к следующему предку, помеченному как относительное положение - обеспечивает большую гибкость
- позволяет визуально располагать элементы в другом порядке, чем в DOM
Позиционирование минусов:
- Труднее совмещаться с другими элементами, поскольку позиционированный элемент больше не находится в потоке документов, а также из-за требуемого уровня точности.
- Другие элементы игнорируют абсолютно позиционированный элемент, что означает, что вы можете иметь потенциальное перекрытие, если только вы не учитываете минимальный и максимальный размер позиционируемого элемента
- сложнее реализовать нижний колонтитул, если вы используете абсолютное позиционирование для своих столбцов.
Плюсы:
- действительно легко создавать простые и сложные макеты
- без проблем нижнего колонтитула
- не беспокойтесь о точности, браузер позаботится об этом за вас
- родительский контейнер растягивается
Минусы поплавка:
- Множество ловушек для тех, кто менее опытен в размещении поплавков, что может привести к тому, что многие вопросы будут задаваться по SO:)
Что касается ясности: оба элемента, о которых говорил Себастьян, есть простой способ обойти это. Допустим, у вас есть контейнер div и 2 плавающих блока внутри.
Html:
<div id="con">
<div class="float"></div>
<div class="float"></div>
</div>
CSS:
#con { background:#f0f; }
.float { float:left; width:100px; height:100px; background:#0ff; }
если бы вы запустили этот код, вы бы заметили, что контейнерный div (пурпурный цвет) имеет высоту всего в один пиксель, тогда как плавающие div были правильными - это проблема, о которой говорил Себастьян. Теперь вы можете воспользоваться его советом и добавить контейнер br или float, который будет не слишком семантическим, поэтому здесь есть более элегантное решение. Просто добавьте переполнение: скрыто; в контейнер div примерно так:
#con { background:#f0f; overflow:hidden; }
Теперь ваш контейнер должен правильно обернуть плавающие элементы.