Как плавать 3 деления рядом с помощью CSS?


270

Я знаю, как заставить 2 элемента плавать рядом, просто плавать один слева, а другой справа.

Но как сделать это с 3 div или я должен просто использовать таблицы для этой цели?


3
Не хватает информации. Насколько широки слои?
Джош Стодола

8
Я бы display: inline-blockэтих парней, а не отпустить их. Если их ширина в целом меньше ширины контейнера, они будут сидеть рядом друг с другом.
Адам Уэйт

Я рекомендую использовать «display: table». Это самое удобное и надежное решение. см. stackoverflow.com/questions/14070787/…
Джон Хенкель

Ответы:


300

Просто дайте им ширину и float: left;вот пример:

<div style="width: 500px;">
 <div style="float: left; width: 200px;">Left Stuff</div>
 <div style="float: left; width: 100px;">Middle Stuff</div>
 <div style="float: left; width: 200px;">Right Stuff</div>
 <br style="clear: left;" />
</div>

6
Что если вы хотите, чтобы все они расширялись по мере расширения страницы?
CodyBugstein

31
@imray просто используйте% вместо px
TehTris

9
Не могли бы вы уточнить, почему использовать именно <br style="clear: left;" />этот стиль в частности.
Майк де Клерк

2
@MikedeKlerk - это четкое исправление, чтобы избежать краха родителей.
Ангел Политис

как объяснил @Nick Craver, вы должны дать всем своим элементам свойство float: left . Это происходит потому, что свойство float указывает, как элемент размещается вдоль левой или правой стороны его родительского контейнера .
Неша Зорич

130

Современный способ - использовать CSS flexbox , см. Таблицы поддержки .

.container {
  display: flex;
}
.container > div {
  flex: 1; /*grow*/
}
<div class="container">
  <div>Left div</div>
  <div>Middle div</div>  
  <div>Right div</div>
</div>

Вы также можете использовать CSS сетку , см. Таблицы поддержки .

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* fraction*/
}
<div class="container">
  <div>Left div</div>
  <div>Middle div</div>  
  <div>Right div</div>
</div>


52

Это так же, как вы делаете для двух div, просто плавайте третий слева или справа тоже.

<style>
  .left{float:left; width:33%;}
</style>

<div class="left">...</div>
<div class="left">...</div>
<div class="left">...</div>

3
Но DIV - это элемент блочного уровня, верно? Тогда почему они располагаются рядом, а не в следующих строках (поскольку элементы уровня блока начинаются и заканчиваются разрывом строки). Есть ли у поплавка какое-то другое влияние на это?
Эшвин

26

отпустить их всех осталось

убедитесь, что указана ширина, что все они могут поместиться в свой контейнер (либо в другой div, либо в окно), иначе они будут перенесены


23
<br style="clear: left;" />

тот код, который кто-то разместил там, он сделал свое дело !!! когда я вставляю его непосредственно перед закрытием Container DIV, это помогает очистить все последующие DIV от наложения с DIV, которые я создал рядом вверху!

<div>
<div class="left"></div>
<div class="left"></div>
...
...
<div class="left"></div>
<!--  then magic trick comes here  -->
<br style="clear: left;" />
</div>

tadaa !! :)


16

Перемести все три деления влево. Как здесь:

.first-div {
  width:370px;
  height:150px;
  float:left;
  background-color:pink;
}

.second-div {
  width:370px;
  height:150px;
  float:left;
  background-color:blue;
}

.third-div {
  width:370px;
  height:150px;
  float:left;
  background-color:purple;
}

6
Дело в том, что мой ответ является наиболее правильным, и когда новый человек будет искать этот вопрос в Интернете, он встретит мой ответ, который будет наиболее полезным для них.
Арвен

2
Это может быть. Но этому не хватает объяснения. На этом сайте можно копировать другие ответы, объединяя несколько частичных ответов в один лучший ответ. Вы можете редактировать и дополнить свой. Однако у новых пользователей есть несколько ограничений (голосование, несколько ссылок), поэтому я все же рекомендую не сосредотачиваться на старых и отвеченных вопросах.
Cfi

@cfi спасибо, я сохраню это для дальнейшего использования.
Арвен

10

Я обычно просто плаваю первым слева, вторым справа. Третий автоматически выравнивается между ними.

<div style="float: left;">Column 1</div>
<div style="float: right;">Column 3</div>
<div>Column 2</div>

5
Разве это не вызывает путаницы при изменении размера браузера?
CodyBugstein

10
<style>
.left-column
{
float:left;
width:30%;
background-color:red;
}
.right-column
{
float:right;
width:30%;
background-color:green;
}
.center-column
{
margin:auto;
width:30%;
background-color:blue;
}
</style>

<div id="container">
<section class="left-column">THIS IS COLUMN 1 LEFT</section>
<section class="right-column">THIS IS COLUMN 3 RIGHT</section>
<section class="center-column">THIS IS COLUMN 2 CENTER</section>
</div>

Преимущество этого способа заключается в том, что вы можете устанавливать ширину каждого столбца независимо от других, если вы сохраняете ее менее 100%, если вы используете 3 x 30%, оставшиеся 10% делятся как 5% -ое пространство делителя между столбцами



7

попробуйте добавить "display: block" в стиль

<style>
   .left{
          display: block;
          float:left; 
          width:33%;
    }
</style>


<div class="left">...</div>
<div class="left">...</div>
<div class="left">...</div>

6

Я не увидел ответ начальной загрузки, так что стоит:

<div class="col-xs-4">Left Div</div>
<div class="col-xs-4">Middle Div</div>
<div class="col-xs-4">Right Div</div>
<br style="clear: both;" />

пусть Bootstrap определит проценты. Мне нравится очищать оба, на всякий случай.


1
В начальной загрузке 4, я думаю, вы должны обернуть все это в div с классом строки.
Джон Грабаускас

5

Я предпочитаю этот метод, поплавки плохо поддерживаются в старых версиях IE (правда? ...)

.column-left{ position:absolute; left: 0px; width: 33.3%; background: red; }
.column-right{position:absolute; left:66.6%; width: 33.3%; background: green; }
.column-center{ position:absolute; left:33.3%; width: 33.3%; background: yellow; }

ОБНОВЛЕНО: Конечно, чтобы использовать эту технику и из-за абсолютного позиционирования, вам нужно заключить div в контейнер и выполнить постобработку, чтобы определить высоту if, что-то вроде этого:

jQuery(document).ready(function(){ 
    jQuery('.main').height( Math.max (
        jQuery('.column-left').height(),
        jQuery('.column‌​-right').height(),
        jQuery('.column-center').height())
    ); 
});

Не самая удивительная вещь в мире, но, по крайней мере, не ломается на старых IE.


Конечно, чтобы использовать эту технику, и из-за абсолютного позиционирования вам необходимо заключить div в контейнер и выполнить постобработку, чтобы определить высоту if, что-то вроде этого:
jpbourbon

jQuery (документ) .ready (function () {jQuery ('. main'). height (Math.max (jQuery ('. column-left'). height (), jQuery ('. column-right'). height (), jQuery ('. column-center'). height ()));}); Не самая удивительная вещь в мире, но, по крайней мере, не ломается на старых IE.
jpbourbon

4

Но работает ли он в Chrome?

Плавайте каждый div и устанавливайте очистить, оба для ряда. Нет необходимости устанавливать ширину, если вы не хотите. Работает в Chrome 41, Firefox 37, IE 11

Нажмите для JS Fiddle

HTML

<div class="stack">
    <div class="row">
        <div class="col">
            One
        </div>
        <div class="col">
            Two
        </div>
    </div>
        <div class="row">
        <div class="col">
            One
        </div>
        <div class="col">
            Two
        </div>
                    <div class="col">
            Three
        </div>
    </div>
</div>

CSS

.stack .row { 
clear:both;

}
.stack .row  .col    {
    float:left;
      border:1px solid;

}

3

Вот как мне удалось сделать нечто подобное в <footer>элементе:

<div class="content-wrapper">

    <div style="float:left">
        <p>&copy; 2012 - @DateTime.Now.Year @Localization.ClientName</p>
    </div>

    <div style="float:right">
        <p>@Localization.DevelopedBy <a href="http://leniel.net" target="_blank">Leniel Macaferi</a></p>
    </div>

    <div style="text-align:center;">
        <p>☎ (24) 3347-3110 | (24) 8119-1085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;✉ @Html.ActionLink(Localization.Contact, MVC.Home.ActionNames.Contact, MVC.Home.Name)</p>
    </div>

</div>

CSS:

.content-wrapper
{
    margin: 0 auto;
    max-width: 1216px;
}

2

@Leniel этот метод хорош, но вам нужно добавить ширину ко всем плавающим элементам div. Я бы сказал, сделать их равными по ширине или назначить фиксированную ширину. Что-то вроде

.content-wrapper > div { width:33.3%; }

вы можете назначать имена классов каждому div, а не добавлять inline style, что не является хорошей практикой.

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

Вы можете найти подробную информацию о том, как использовать clearfix div здесь

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