Как выровнять промежутки или блоки по горизонтали?


88

Моя единственная проблема состоит в том, чтобы выровнять их по три и иметь равные промежутки. Очевидно, промежутки не могут иметь ширину, а блоки div (и промежутки с display: block) не отображаются горизонтально рядом друг с другом. Предложения?

<div style='width:30%; text-align:center; float:left; clear:both;'> Это то, что у меня есть сейчас.


2
Почему ты не хочешь использовать стол?
— DOK,

63
Потому что данные не табличные.
— Томас Оуэнс,

10
Приведенные ниже ответы подходят, но учтите, что использование таблицы доставит вам меньше головной боли, если вы в конечном итоге все усложните. Можно использовать стол, если он облегчает вашу работу. Будьте прагматичны! :-)
— Рахул

5
серьезно, не используйте стол. Это легко сделать с помощью CSS.
— Сэм Мюррей-Саттон,

26
«Можно использовать стол, если он облегчает вашу работу». это совершенно ужасный совет. Пожалуйста, игнорируйте! :)
— Бобби Джек

Ответы:


78

Вы можете использовать div с float: left;атрибутом, который заставит их располагаться горизонтально рядом друг с другом, но тогда вам может потребоваться очистка следующих элементов, чтобы убедиться, что они не перекрываются.


17
Собственно, можно просто установить overflow: hidden. См .: stackoverflow.com/questions/323599/…
— Дэвид Уолевер

1
Я считаю, что это может нарушить макет в последующих div. Например, если я воспользуюсь вашим решением, а затем попытаюсь сделать это padding-leftв div справа, оно будет проигнорировано.
— Себастьян Мах

2
Нет причин переоценивать: все <div style="display: in-line"></div><div style="display: in-line"></div>должно работать нормально.
— zoltar

использование float создает массу новых проблем. overflow: hiddenлучшее решение.
— saran3h

39

Ты можешь использовать

.floatybox {
     display: inline-block;
     width: 123px;
}

Если вам нужна только поддержка браузеров, которые поддерживают встроенные блоки. Встроенные блоки могут иметь ширину, но быть встроенными, как элементы кнопок.

Да, и вы можете добавить vertical-align: top к элементам, чтобы убедиться, что все выровнено


1
вертикальное выравнивание не работает с элементами уровня блока. В данном случае мы говорим об элементах, отображение которых было установлено на встроенный блок.
— runeh

1
inline-block теперь поддерживается во всех браузерах класса A, кроме IE6 / 7, но есть хитрость, чтобы заставить inline-block работать в IE6 / 7.
— Александр Бёрд,

12

Мой ответ:

<style>
 #whatever div {
  display: inline;
  margin: 0 1em 0 1em;
  width: 30%;
}
</style>

<div id="whatever">
 <div>content</div>
 <div>content</div>
 <div>content</div>
</div>

Зачем?

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

Одна вещь, которую вы определенно не хотите делать, - это clear:bothустанавливать на div. Установка этого значения будет означать, что браузер не позволит каким-либо элементам располагаться на одной строке с ними. В результате ваши элементы будут складываться.

Обратите внимание, использование display:inline. Это касается ошибки удвоения маржи ie6. При необходимости вы можете решить эту проблему другими способами, например, с помощью условных таблиц стилей.

Я добавил обертку (#whatever), поскольку предполагаю, что это не единственные элементы на странице, поэтому вам почти наверняка потребуется отделить их от других элементов страницы.

В любом случае, я надеюсь, что это поможет.


Это не сработало, когда я вырезал и вставил его в jsfiddle
— Джейми Фристром,

1
Извините, опечатка; Я должен был поставить точку с запятой после каждой из этих строк, тогда это сработает; Я отредактировал соответственно. Хотя я еще раз рассмотрел этот вопрос, я бы предположил, что OP нужно добавить немного больше кода в свой пример. Как показывают ответы здесь, здесь можно использовать множество подходов, и то, что именно вы будете использовать, будет зависеть от контекста.
— Сэм Мюррей-Саттон,

4

ты можешь сделать:

<div style="float: left;"></div>

или

<div style="display: inline;"></div>

Любой из них приведет к тому, что div будет располагаться горизонтально.


3

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

<style>
html, body {
    margin: 0;
    padding: 0;
}

.content {
    float: left;
    width: 30%;
    border:none;
}

.rightcontent {
    float: right;
    width: 30%;
    border:none
}

.hspacer {
    width:5%;
    float:left;
}

.clear {
    clear:both;
}
</style>

<div class="content">content</div>
<div class="hspacer">&nbsp;</div>
<div class="content">content</div>
<div class="hspacer">&nbsp;</div>
<div class="rightcontent">content</div>
<div class="clear"></div>

2

Я хотел бы использовать:

<style>
.all {
display: table;
}
.maincontent {
float: left;
width: 60%; 
}
.sidebox { 
float: right;
width: 30%; 
}
<div class="all">
   <div class="maincontent">
       MainContent
   </div>
   <div class="sidebox"> 
       SideboxContent
   </div>
</div>

Я впервые использую этот «инструмент кода» от переполнения ... но я должен сделать это сейчас ...


1

Возможно, вам захочется найти макеты на основе CSS-сетки. Этот метод компоновки включает определение некоторых классов CSS для выравнивания содержимого страницы по структуре сетки. Он более тесно связан с макетом с распечаткой, чем с веб-интерфейсом, но этот метод используется на многих веб-сайтах для размещения содержимого в структуре без использования таблиц.

Попробуйте это для начала из журнала Smashing Magazine.


0

Посмотрите на свойство css Float. http://w3schools.com/css/pr_class_float.asp

Он работает с блочными элементами, такими как div. В качестве альтернативы, то, что вы пытаетесь отобразить, таблицы не являются злом, если вы действительно пытаетесь показать таблицу с некоторой информацией.


Но это не стол. Это всего лишь три вещи, которые я хочу поставить рядом друг с другом.
— Томас Оуэнс,

404 страница не найдена
— Али Юсефи

0

Я бы постарался дать им все display: block;атрибуты и использование float: left;.

Затем вы можете установить widthи / или heightпо своему усмотрению. Вы даже можете указать некоторые правила вертикального выравнивания.


0
    <!-- CSS -->
<style rel="stylesheet" type="text/css">
.all { display: table; }
.menu { float: left; width: 30%; }
.content { margin-left: 35%; }
</style>

<!-- HTML -->
<div class="all">
<div class="menu">Menu</div>
<div class="content">Content</div>
</div>

другой ... попробуйте использовать float: left;или right;, изменить widthна другие значения ... он должен работать ... также обратите внимание, что 10%, которые не используются div, его между ними ... извините за плохой английский :)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.