Come far galleggiare 3 div fianco a fianco usando CSS?


270

So come far fluttuare 2 div fianco a fianco, semplicemente fluttuando uno a sinistra e l'altro a destra.

Ma come fare con 3 div o dovrei usare le tabelle solo per questo scopo?


3
Informazioni insufficienti. Quanto sono larghi gli strati?
Josh Stodola,

8
Avrei display: inline-blockquei ragazzi invece di farli galleggiare. Se le loro larghezze sono in totale inferiori alla larghezza del contenitore, si siederanno uno accanto all'altro.
Adam Waite,

Consiglio di usare "display: table". È la soluzione più mantenibile e affidabile. vedi stackoverflow.com/questions/14070787/…
John Henckel,

Risposte:


300

Basta dare loro una larghezza e float: left;, ecco un esempio:

<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
Cosa succede se si desidera che si espandano tutti man mano che la pagina viene espansa?
CodyBugstein

31
@imray usa solo% invece di px
TehTris

9
Potresti approfondire il motivo per cui utilizzare <br style="clear: left;" />con quello stile in particolare.
Mike de Klerk,

2
@MikedeKlerk è una soluzione chiara, per evitare il collasso del genitore.
Angel Politis,

come ha spiegato @Nick Craver, dovresti dare a float tutti i tuoi elementi : proprietà left . Ciò accade perché la proprietà float specifica come l'elemento viene posizionato lungo il lato sinistro o destro del contenitore principale .
Nesha Zoric,

130

Il modo moderno è utilizzare la flexbox CSS , consultare le tabelle di supporto .

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

Puoi anche usare la griglia CSS , vedi le tabelle di supporto .

.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

È lo stesso che fai per i due div, fai galleggiare il terzo anche a sinistra o a destra.

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

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

3
Ma DIV è un elemento a livello di blocco, giusto? Quindi come mai vengono posizionati fianco a fianco e non nelle linee successive (poiché gli elementi a livello di blocco iniziano e terminano con un'interruzione di linea). Float ha anche qualche altro effetto su di esso?
Ashwin,

26

lasciali galleggiare tutti a sinistra

assicurati che sia specificata una larghezza che possano adattarsi tutti al loro contenitore (o un altro div o la finestra), altrimenti si avvolgeranno


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

quel codice che qualcuno ha pubblicato lassù, ha fatto il trucco !!! quando lo incollo appena prima di chiudere il DIV del contenitore, aiuta a eliminare tutti i DIV successivi dalla sovrapposizione con i DIV che ho creato fianco a fianco in alto!

<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

Fai galleggiare tutte e tre le immersioni a sinistra. Come qui:

.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
Il punto è che la mia risposta è la più corretta e quando una nuova persona cercherà questa Q su Internet troveranno la mia risposta che sarebbe la più utile per loro.
Arwen,

2
Potrebbe essere. Ma manca di spiegazioni. È ok su questo sito copiare altre risposte, unendo più risposte parziali in una migliore risposta combinata. Puoi modificare e completare il tuo. Tuttavia, i nuovi utenti hanno alcune restrizioni (upgrade, pochi link), quindi consiglierei comunque di non concentrarmi su domande vecchie e con risposta.
cfi,

@cfi grazie, lo terrò per riferimento futuro.
Arwen,

10

Di solito galleggio solo il primo a sinistra, il secondo a destra. Il terzo si allinea automaticamente tra loro quindi.

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

5
Ciò non causa disastri quando il browser viene ridimensionato?
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>

il vantaggio di questo modo è che puoi impostare la larghezza di ogni colonna in modo indipendente dall'altra purché tu la mantenga al di sotto del 100%, se usi 3 x 30% il 10% rimanente viene diviso come uno spazio di divisione del 5% tra le colonne



7

prova ad aggiungere "display: block" allo stile

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


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

6

Non ho visto la risposta bootstrap, quindi per quello che vale:

<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;" />

lascia che Bootstrap capisca le percentuali. Mi piace cancellare entrambi, per ogni evenienza.


1
In bootstrap 4, penso che devi avvolgere il tutto in un div con la classe row.
John Grabauskas,

5

Preferisco questo metodo, i float sono scarsamente supportati nelle versioni precedenti di IE (davvero? ...)

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

AGGIORNATO: Naturalmente, per usare questa tecnica e per il posizionamento assoluto è necessario racchiudere i div su un container ed eseguire un postprocessing per definire l'altezza di if, qualcosa del genere:

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

Non è la cosa più sorprendente del mondo, ma almeno non si rompe sugli IE più vecchi.


Naturalmente, per usare questa tecnica e per il posizionamento assoluto è necessario racchiudere i div su un container e fare un postprocessing per definire l'altezza di if, qualcosa del genere:
jpbourbon

jQuery (document) .ready (function () {jQuery ('. main'). height (Math.max (jQuery ('. column-left'). height (), jQuery ('. column-right'). height (), jQuery ('. column-center'). height ()));}); Non è la cosa più sorprendente del mondo, ma almeno non si rompe sugli IE più vecchi.
jpbourbon,

4

Ma funziona in Chrome?

Float ogni div e impostare chiaro; entrambi per la riga. Non è necessario impostare le larghezze se non si desidera. Funziona con Chrome 41, Firefox 37, IE 11

Fai clic per 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

Ecco come sono riuscito a fare qualcosa di simile all'interno di un <footer>elemento:

<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 questo metodo è buono ma è necessario aggiungere larghezza a tutti i div fluttuanti. Direi di renderli uguali in larghezza o assegnare larghezza fissa. Qualcosa di simile a

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

puoi assegnare nomi di classe a ciascun div piuttosto che aggiungere inline style, il che non è una buona pratica.

Assicurati di utilizzare un div clearfix o un div chiaro per evitare che i seguenti contenuti rimangano al di sotto di questi div.

Puoi trovare i dettagli su come usare il clearfix div qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.