Як плавати 3 діви поруч за допомогою CSS?


270

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

Але як це зробити за допомогою 3 дівок чи мені просто використовувати для цього таблиці?


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 , дивіться таблиці підтримки .

.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

Це точно так само, як і для двох дівок, просто пливіть третій вліво або вправо теж.

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

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

3
Але DIV - це елемент рівня блоку, правда? Тоді як їх розміщують поруч, а не в наступних рядках (як елементи рівня блоку починаються і закінчуються переривом рядка). Чи впливає на нього поплавок ще якийсь вплив?
Ешвін

26

пливіть їх усі ліворуч

переконайтеся, що вказана ширина, що всі вони можуть поміститися в контейнері (або іншому діві або вікні), інакше вони завернуться


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

той код, який хтось розмістив там, він зробив трюк !!! коли я вставляю його безпосередньо перед закриттям контейнера 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>

тадаа !! :)


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
Справа в тому, що моя відповідь є найбільш правильною, і коли нова людина буде шукати цей Q в Інтернеті, вони натрапляють на мою відповідь, яка була б найбільш корисною для них.
Арвен

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 я думаю, що вам доведеться загортати все в діві з класом рядків.
Джон Грабаускас

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; }

ОНОВЛЕНО: Звичайно, щоб скористатися цією технікою і завдяки абсолютному позиціонуванню, потрібно укласти divs на контейнер і зробити пост-обробку, щоб визначити висоту if, щось подібне:

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

Не найдивовижніша річ у світі, але, принаймні, не порушується на старих ІЕ.


Звичайно, щоб скористатися цією технікою і завдяки абсолютному позиціонуванню, вам потрібно вкласти divs на контейнер і зробити
пост-обробку,

jQuery (документ) .ready (функція () {jQuery ('. головний'). висота (Math.max (jQuery ('. стовпець-ліворуч'). висота (), jQuery ('. стовпець-правий'). висота (), jQuery ('. колонка-центр'). висота ()));}); Не найдивовижніша річ у світі, але, принаймні, не порушується на старих ІЕ.
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 цей метод хороший, але вам потрібно додати ширину для всіх плаваючих дівів. Я б сказав, зробити їх рівною шириною або призначити фіксовану ширину. Щось на зразок

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

ви можете призначити імена класів кожному ділу, а не додавати inline style, що не є хорошою практикою.

Обов’язково використовуйте чіткий виправлення div або clear div, щоб уникнути наступного вмісту нижче цих div.

Докладні відомості про те, як користуватися clearfix div можна знайти тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.