Я искал другие вопросы, и, хотя эта проблема кажется похожей на пару других, ничто из того, что я видел до сих пор, похоже, не решает проблему, с которой я столкнулся.
У меня есть div, который содержит ряд других div, каждый из которых перемещается влево. Каждый из этих элементов содержит фотографию и подпись. Все, что я хочу, чтобы группа фотографий была сосредоточена внутри содержащего элемента div.
Как видно из приведенного ниже кода, я попытался использовать оба overflow:hidden
и margin:x auto
родительские элементы div, а также добавил clear:both
(как было предложено в другой теме) после фотографий. Ничто, кажется, не имеет значения.
Спасибо. Я ценю любые предложения.
<div style="position: relative; margin: 0 auto; overflow: hidden; text-align: center;">
<h4>Section Header</h4>
<div style="margin: 2em auto;">
<div style="float: left; margin: auto 1.5em;">
<img src="photo1.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo2.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo3.jpg" /><br />
Photo Caption
</div>
<div style="clear: both; height: 0; overflow: hidden;"> </div>
</div>
</div>
Ответы:
Сначала удалите
float
атрибут на внутренней сторонеdiv
s. Затем наденьтеtext-align: center
главное внешнееdiv
. А для внутреннегоdiv
с, используйтеdisplay: inline-block
. Также может быть целесообразно дать им явную ширину.источник
С Flexbox вы можете легко горизонтально (и вертикально) центрировать плавающих детей внутри div.
Так что если у вас есть простая разметка, например:
с помощью CSS:
(Это (ожидаемый - и нежелательный) РЕЗУЛЬТАТ )
Теперь добавьте следующие правила в оболочку:
и плавающие дети выровнены по центру ( DEMO )
Просто для удовольствия, чтобы получить вертикальное выравнивание, а также просто добавьте:
DEMO
источник
Я выполнил вышеупомянутое, используя относительное расположение и плавая вправо.
HTML код:
CSS:
JSFiddle: http://jsfiddle.net/MJ9yp/
Это будет работать в IE8 и выше, но не раньше (сюрприз, сюрприз!)
К сожалению, я не помню источник этого метода, поэтому не могу отдать должное первоначальному автору. Если кто-то еще знает, пожалуйста, разместите ссылку!
источник
Следующее решение не использует встроенные блоки. Однако для этого требуется два вспомогательных элемента div:
источник
display: inline-block;
не будет работать ни в одном из браузеров IE. Вот что я использовал.источник
Решение:
источник
В моем случае я не смог заставить ответ @Sampson работать на меня, в лучшем случае я получил один столбец по центру страницы. Однако в процессе я узнал, как на самом деле работает поплавок, и создал это решение. По сути, это исправление очень простое, но его трудно найти, что видно по этой теме, у которой на момент публикации было более 146 тысяч просмотров без упоминания.
Все, что нужно, это подсчитать количество ширины экранного пространства, которое займет требуемый макет, затем сделать родительский размер такой же ширины и применить margin: auto. Это оно!
Элементы в макете будут определять ширину и высоту «внешнего» элемента div. Возьмите ширину или высоту каждого элемента myFloat или элемента + его границы + поля и отступы и сложите их все вместе. Затем добавьте остальные элементы таким же образом. Это даст вам родительскую ширину. Все они могут иметь несколько разные размеры, и вы можете сделать это с меньшим или большим количеством элементов.
Пример (каждый элемент имеет 2 стороны, поэтому границы, поля и отступы умножаются на 2)
Таким образом, элемент шириной 10px, границей 2px, полем 6px, отступом 3px будет выглядеть так: 10 + 4 + 12 + 6 = 32
Затем сложите все значения ширины вашего элемента.
В этом примере ширина для "внешнего" div будет 112.
источник