¿Cómo flotar 3 divs lado a lado usando CSS?

270

Sé cómo hacer que 2 divs floten uno al lado del otro, simplemente floten uno a la izquierda y el otro a la derecha.

Pero, ¿cómo hacer esto con 3 divs o debería usar tablas para este propósito?

Dameon
fuente
3
No hay suficiente información. ¿Qué tan anchas son las capas?
Josh Stodola
8
Me gustaría display: inline-blockesos tipos en lugar de flotarlos. Si sus anchos son en total menores que el ancho del contenedor, se sentarán uno al lado del otro.
Adam Waite
Recomiendo usar "display: table". Es la solución más fácil de mantener y confiable. ver stackoverflow.com/questions/14070787/…
John Henckel

Respuestas:

300

Solo dales un ancho y float: left;, aquí hay un ejemplo:

<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>
Nick Craver
fuente
66
¿Qué sucede si desea que todos se expandan a medida que se expande la página?
CodyBugstein
31
@imray solo usa% en lugar de px
TehTris
9
¿Podría explicar por qué usar <br style="clear: left;" />ese estilo en particular?
Mike de Klerk
2
@MikedeKlerk es una solución clara, para evitar que el padre se derrumbe.
Angel Politis
como explicó @Nick Craver, debe dar a todos sus elementos la propiedad flotante: izquierda . Esto sucede porque la propiedad flotante especifica cómo se coloca el elemento a lo largo del lado izquierdo o derecho de su contenedor principal .
Nesha Zoric
130

La forma moderna es usar CSS flexbox , ver tablas de soporte .

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

También puede usar la cuadrícula CSS , consulte las tablas de soporte .

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

Pegatinas
fuente
52

Es lo mismo que haces para los dos divs, solo flota el tercero a izquierda o derecha también.

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

<div class="left">...</div>
<div class="left">...</div>
<div class="left">...</div>
Sarfraz
fuente
3
Pero DIV es un elemento de nivel de bloque, ¿verdad? Entonces, ¿cómo es que se colocan uno al lado del otro y no en las siguientes líneas (a medida que los elementos de nivel de bloque comienzan y terminan con un salto de línea). ¿El flotador tiene algún otro efecto también?
Ashwin
26

flotarlos todos a la izquierda

asegúrese de que se especifique un ancho para que todos puedan caber en su contenedor (ya sea otro div o la ventana), de lo contrario, se envolverán

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

ese código que alguien publicó allí, ¡funcionó! cuando lo pego justo antes de cerrar el DIV de contenedor, ¡ayuda a eliminar todos los DIV posteriores que se superpongan con los DIV que he creado uno al lado del otro en la parte superior!

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

tadaa !! :)

Migisha
fuente
16

Flota los tres divs a la izquierda. Como aquí:

.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;
}
Arwen
fuente
66
El punto es que mi respuesta es la más correcta y cuando una nueva persona esté buscando esta Q en Internet, se encontrará con mi respuesta, que sería la más útil para ellos.
Arwen
2
Podría ser. Pero le falta alguna explicación. Está bien en este sitio copiar otras respuestas, fusionando múltiples respuestas parciales en una mejor respuesta combinada. Podrías editar y completar el tuyo. Sin embargo, los nuevos usuarios tienen algunas restricciones (votación positiva, pocos enlaces), por lo que aún así recomendaría no centrarse en las preguntas antiguas y respondidas.
cfi
@cfi gracias, lo guardaré para referencia futura.
Arwen
10

Por lo general, floto el primero a la izquierda, el segundo a la derecha. El tercero se alinea automáticamente entre ellos entonces.

<div style="float: left;">Column 1</div>
<div style="float: right;">Column 3</div>
<div>Column 2</div>
Nick Travers
fuente
55
¿Eso no causa problemas cuando se cambia el tamaño del navegador?
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>

La ventaja de esta manera es que puede establecer el ancho de cada columna independientemente de la otra, siempre que lo mantenga por debajo del 100%, si usa 3 x 30%, el 10% restante se divide como un espacio divisor del 5% entre las columnas

SugaComa
fuente
7

puede flotar: izquierda para todos ellos y establecer el ancho en 33.333%

Daniel A. White
fuente
7

intenta agregar "display: block" al estilo

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


<div class="left">...</div>
<div class="left">...</div>
<div class="left">...</div>
Ana
fuente
6

No vi la respuesta de arranque, así que para lo que 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;" />

deje que Bootstrap calcule los porcentajes. Me gusta aclarar ambos, por si acaso.

John Grabauskas
fuente
1
En Bootstrap 4, creo que tienes que envolver todo en un div con la clase de fila.
John Grabauskas
5

Prefiero este método, los flotadores no son compatibles con versiones anteriores de IE (¿en serio? ...)

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

ACTUALIZADO: Por supuesto, para usar esta técnica y debido al posicionamiento absoluto, debe encerrar los divs en un contenedor y realizar un procesamiento posterior para definir la altura de if, algo como esto:

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

No es lo más asombroso del mundo, pero al menos no se rompe con los IE más antiguos.

jpbourbon
fuente
Por supuesto, para usar esta técnica y debido al posicionamiento absoluto, debe encerrar los divs en un contenedor y realizar un procesamiento posterior para definir la altura de if, algo como esto:
jpbourbon
jQuery (documento) .ready (function () {jQuery ('. main'). height (Math.max (jQuery ('. column-left'). height (), jQuery ('. column-right'). height (), jQuery ('. columna-centro'). altura ()));}); No es lo más asombroso del mundo, pero al menos no se rompe con los IE más antiguos.
jpbourbon
4

¿Pero funciona en Chrome?

Flota cada div y deja claro; ambos para la fila. No es necesario establecer anchos si no lo desea. Funciona en Chrome 41, Firefox 37, IE 11

Haga clic para 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;

}
AndrewD
fuente
3

Así es como logré hacer algo similar a esto dentro de 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;
}
Leniel Maccaferri
fuente
2

@Leniel, este método es bueno, pero debe agregar ancho a todos los div flotantes. Yo diría que sean del mismo ancho o asignen un ancho fijo. Algo como

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

puede asignar nombres de clase a cada div en lugar de agregar inline style , lo cual no es una buena práctica.

Asegúrese de usar un clearfix div o clear div para evitar que el contenido siguiente permanezca debajo de estos div.

Puede encontrar detalles sobre cómo usar clearfix div aquí

aguamarina
fuente