¿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?


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>

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>


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>

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


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 !! :)


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

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>

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



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>

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.


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.


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;

}

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

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í

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.