Элементы блока CSS в строке

Каков наиболее распространенный способ работы с серией блочных элементов, которые должны находиться в строке (например, если javascript должен иметь возможность изменять их ширину)? Каковы плюсы и минусы применения float: left для каждого из них по сравнению с использованием позиционирования для их размещения?

Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
8
0
28 668
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Родительский контейнер не растягивается вместе с ними, если ему также не назначен тег с плавающей запятой или нет br с clear: both; внизу.

Я бы пошел с float: left вместо позиционирования. Браузер выполняет все выравнивание, когда один объект растягивается. Так что вам будет меньше забот.

Я думаю, что я бы не стал позиционировать элементы явно, а скорее проинструктировал бы браузер использовать встроенный макет для элементов с помощью display: inline и позволить браузеру обрабатывать позиционирование.

Что касается поплавка и позиционирования, я думаю, что единственный способ выровнять их с помощью позиционирования - использовать абсолютное позиционирование, а это означает, что вам нужно обрабатывать изменение размеров (порта просмотра браузера), чтобы элементы оставались на месте.

Я думаю, что с помощью свойства float браузер решает проблемы с изменением размера за вас и повторно отображает элемент в нужном месте.

Проблема с display: inline заключается в том, что он исключает множество параметров для сценариев, включая динамическое изменение ширины.

Dan Monego 22.11.2008 01:07
Ответ принят как подходящий

Я бы выбрал плавание, но это действительно зависит от того, чего вы хотите достичь. Если вы можете привести более конкретный пример, я смогу дать вам четкую причину того, что и почему, я думаю, вам следует использовать. Однако вот краткий набор плюсов и минусов, с которыми я столкнулся (я предполагаю, что под позиционированием вы подразумеваете абсолютное позиционирование):

Плюсы позиционирования:

  • очень точное позиционирование по отношению к следующему предку, отмеченному как относительное положение - обеспечивает большую гибкость
  • позволяет визуально располагать элементы в другом порядке, чем в DOM

Минусы позиционирования:

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

Плюсы поплавка:

  • действительно легко создавать простые и продвинутые макеты
  • нет проблем с нижним колонтитулом
  • не беспокойтесь о точности, браузер позаботится об этом за вас
  • родительский контейнер растягивается

Минусы поплавков:

  • Множество ловушек для тех, кто менее опытен с макетами поплавков, которые могут привести к множеству вопросов, которые задают SO :)

Что касается ясности: оба элемента, упомянутые Себастьяном, есть простой способ обойти это. Допустим, у вас есть контейнер div и 2 плавающих div внутри.

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, что было бы не очень семантически - так что вот немного более элегантное решение. Просто добавьте overflow: hidden; в контейнер div так:

#con { background:#f0f; overflow:hidden; }

Теперь ваш контейнер должен правильно обернуть плавающие блоки.

Единственным недостатком плавания в подобных ситуациях для меня было то, что вам нужно было либо выровнять их по левому краю, либо по правому краю - центрирование не вариант. Однако вы упомянули, что используете абсолютные значения для ширины, поэтому вы можете просто вложить все плавающие элементы в элемент DIV и добавить либо margin-right, либо margin-left к родительскому DIV, чтобы имитировать выравнивание по центру.

Что ж, если вы не слишком озабочены старыми браузерами (я смотрю на вас, IE6), лучший способ здесь - пойти с

display:inline-block;

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

попробуйте firefox .. у него также есть проблемы с этим свойством .. если я не ошибаюсь, есть -moz-inline-block или что-то для этого ..

Davy Landman 22.11.2008 02:02

Буквально сегодня я кое-что использовал с его помощью (FF3) и не имел никаких проблем, выглядел так же в FF, Opera, Chrome и IE 7.

Gabe 22.11.2008 02:04

Плохая идея, есть простые способы реализовать то, о чем он говорит, без использования схематичных элементов, которые не поддерживаются во многих браузерах (IE6 по-прежнему является основным браузером, несмотря на то, что мы все к нему относимся)

Andrew G. Johnson 22.11.2008 02:04

IE6 может поддерживать его правильно с небольшими изменениями (quirksmode.org/css/display.html), но, как и многие другие вещи в веб-дизайне, способ решения проблемы напрямую зависит от публики сайта. Вот почему я сказал, что он может использовать его, если его не интересуют старые браузеры.

Gabe 22.11.2008 02:14

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