CSS floats - ¿cómo los mantengo en una línea?


Quiero tener dos elementos en la misma línea usando 'float: left' para el elemento de la izquierda.

No tengo problemas para lograr esto solo. El problema es que quiero que los dos elementos permanezcanen la misma línea incluso cuando redimensiona el navegador muy pequeño. Ya sabes... como era con las mesas.

El objetivo es evitar que el elemento de la derecha se envuelva pase lo que pase.

Entonces, ¿cómo le digo al navegador que usa css que preferiría estirar la que contiene div que lo envuelva de modo que el div float: right; está por debajo de la div float: left;?

Ejemplo: lo que quiero:

                                             \
 +---------------+  +------------------------/
 | float: left;  |  | float: right;          \
 |               |  |                        /
 |               |  |content stretching      \   Screen Edge
 |               |  |the div off the screen  /  <---
 +---------------+  +------------------------\
                                             /
Author: Brian Tompsett - 汤莱恩, 2008-11-05

10 answers

Envuelve tus <div>s flotantes en un contenedor <div> que usa este hack de ancho mínimo entre navegadores:

.minwidth { min-width:100px; width: auto !important; width: 100px; }

puede que también necesite establecer "desbordamiento", pero probablemente no.

Esto funciona porque:

  • La declaración !important, combinada con min-width hacen que todo permanezca en la misma línea en IE7 +
  • IE6 no implementa min-width, pero tiene un error tal que width: 100px reemplaza la declaración !important, causando que el ancho del contenedor sea 100px.
 77
Author: Eric Wendelin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-16 15:54:42

Otra opción es, en lugar de flotar, establecer la propiedad de espacio en blanco nowrap en un div padre:

.parent {
     white-space: nowrap;
}

Y restablezca el espacio en blanco y use una pantalla de bloque en línea para que los divs permanezcan en la misma línea, pero aún puede darle un ancho.

.child {
    display:inline-block;
    width:300px;
    white-space: normal;
}

Aquí hay un JSFiddle: https://jsfiddle.net/9g8ud31o /

 123
Author: Innovaat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-05 08:22:00

Envuelva sus flotadores en un div con un ancho mínimo mayor que el ancho+margen combinado de los flotadores.

No se necesitan hacks o tablas HTML.

 15
Author: Czar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-05 05:10:09

Solución 1:

Pantalla: celda de tabla (no ampliamente soportada)

Solución 2:

Cuadros

(Odio los hacks.)

 10
Author: pkario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-08 07:21:16

Otra opción: No flotar la columna derecha; simplemente dale un margen izquierdo para moverla más allá del flotador. Necesitarás un hack o dos para arreglar IE6, pero esa es la idea básica.

 8
Author: Steve Clay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-05 23:15:28

¿Está seguro de que los elementos flotantes a nivel de bloque son la mejor solución a este problema?

A menudo con dificultades CSS en mi experiencia resulta que la razón por la que no puedo ver una manera de hacer lo que quiero es que me he quedado atrapado en una visión de túnel con respecto a mi marcado ( pensando "¿cómo puedo hacer estos elementos hacen esto?") en lugar de retroceder y mirar qué es exactamente lo que necesito lograr y tal vez reelaborar mi html ligeramente para facilitar que.

 4
Author: glenatron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-05 17:54:47

Recomiendo usar tablas para este problema. estoy teniendo un problema similar y siempre y cuando la tabla se utiliza solo para mostrar algunos datos y no para el diseño de la página principal que está bien.

 2
Author: Rob Elliott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-26 16:03:39

Agregue esta línea a su selector de elementos flotantes

.floated {
    float: left;
    ...
    box-sizing: border-box;
}

Evitará que el relleno y los bordes se agreguen al ancho, por lo que el elemento siempre permanecerá en la fila, incluso si tiene por ejemplo. tres elementos con anchura de 33.33333%

 2
Author: Nebojsha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-30 10:18:58

Cuando el usuario reduce el tamaño de la ventana horizontalmente y esto hace que los flotadores se apilen verticalmente, elimine los flotadores y en el segundo div (que era un flotador) use margin-top: -123px (su valor) y margin-left: 444px (su valor) para posicionar los divs tal como aparecían con los flotadores. Cuando se hace de esta manera, cuando la ventana se estrecha, el div del lado derecho permanece en su lugar y desaparece cuando la página es demasiado estrecha para incluirla. ... que (para mí) es mejor que tener el div del lado derecho "saltar" por debajo de la div del lado izquierdo cuando la ventana del navegador es reducida por el usuario.

 0
Author: Bruce Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-25 04:56:27

La forma en que conseguí evitar esto fue usar un poco de jQuery. La razón por la que lo hice de esta manera fue porque A y B eran anchos porcentuales.

HTML:

<div class="floatNoWrap">
    <div id="A" style="float: left;">
        Content A
    </div>
    <div id="B" style="float: left;">
        Content B
    </div>
    <div style="clear: both;"></div>
</div>

CSS:

.floatNoWrap
{
    width: 100%;
    height: 100%;
}

JQuery:

$("[class~='floatNoWrap']").each(function () {
    $(this).css("width", $(this).outerWidth());
});
 -3
Author: ScubaSteve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-18 20:38:33