¿Cómo puedo evitar que los elementos div flotantes se ajusten cuando se cambia el tamaño del navegador?

5 minutos de lectura

avatar de usuario
marcus

¿Cómo hace que los DIV que flotan uno al lado del otro no se ajusten cuando se cambia el tamaño del navegador para que la ventana gráfica se vuelva más pequeña?

div {
  float: left;
}

Por ejemplo, cuando el navegador está completamente maximizado, el divse alinean así:

|div| |div| |div| |div| |div| |div| |div| |div|

Pero cuando el navegador cambia de tamaño más pequeño sucede esto:

|div| |div| |div| |div| |div|
|div| |div| |div|

¿Cómo puedo hacer el div¿No se ajusta cuando el navegador se redimensiona más pequeño?

avatar de usuario
aaronsieb

Envuélvalos en otro div, que tenga un ancho (o ancho mínimo) especificado.

<div class="parentContainer">
    <div class="floater"></div>
    <div class="floater"></div>
    <div class="floater"></div>
</div>

.parentContainer {
    /* The width of the parent needs to be equal to the total width of the children.
    Be sure to include margins/padding/borders in the total. */
    width: 600px;
    overflow: auto;
}

También ayuda tener overflow: auto especificado en el div contenedor, para permitir que su altura coincida con los flotantes secundarios.

  • @ajkochanowicz ¿Qué no te funciona? Cuando cambio el tamaño de la ventana de “resultados” a menos de 400 px, los flotadores permanecen en su configuración 3,3,2 como se anuncia.

    – Aaron Sieb

    12/03/2012 a las 17:30

  • Cada div flota a la izquierda. No sé qué es “publicitar” una configuración 3,3,2. Si todos están flotando a la izquierda, ¿por qué no continúan saliendo del div horizontalmente?

    – Adán Grant

    12 de marzo de 2012 a las 17:33

  • @ajkochanowicz El div envolvente debe ser tan ancho como la suma de todos sus elementos secundarios si desea que estén en una línea. Esta técnica no hace que los flotadores dejen de envolverse en general, simplemente evita que vuelvan a fluir a medida que el navegador se reduce. En su caso, desea que .vertical-scroll tenga un ancho de 816 px (800 px para el ancho de todos los elementos secundarios, más 16 px para tener en cuenta el borde de los elementos secundarios).

    – Aaron Sieb

    12/03/2012 a las 19:11

  • Gracias, @AaronSieb En aras de una buena documentación, aquí está mi versión del problema con una (especie de) solución stackoverflow.com/questions/9672176/…

    – Adán Grant

    13 de marzo de 2012 a las 13:38

avatar de usuario
jacobthedev

Llegué bastante tarde al juego, pero esto es lo que he encontrado que funciona:

Digamos que tienes una navegación estructurada como:

<nav>
    <ul>
        <li><a href="#">Example Link</a></li>
        <li><a href="#">Example Link</a></li>
        <li><a href="#">Example Link</a></li>
    </ul>
</nav>

Para que muestre los enlaces en línea, sin envolverlos nunca, simplemente puede usar:

nav ul {
    white-space: nowrap;
}

nav ul li {
    display: table-cell;
}

No se requieren anchos fijos ni nada.

Violín: http://jsfiddle.net/gdf3prb4/

  • Este es el mejor método de la OMI, y el único método que funciona fácilmente (al menos para mí). Los otros métodos para crear un div contenedor con un ancho fijo podrían funcionar bien si sabe exactamente cuántos píxeles desea, pero en el mundo actual, donde los tamaños de pantalla siempre son diferentes, no desea depender de anchos fijos, ya que eso impide de hacer un sitio web dinámico.

    – edwardtyl

    30 de julio de 2015 a las 15:02


  • Este método fue el más relevante para mi situación (aparte de flexbox, que todavía parece ser un poco complicado en los navegadores que queríamos admitir), sin embargo, en mi caso, descubrí que también necesitaba display: table en el envoltorio ul para mantener el 100% de la altura original de las columnas dentro. Con eso, el white-space: nowrap en ese padre tampoco parece necesario, los anchos de las columnas terminan distribuyéndose sin exceder el 100% en total de todos modos.

    – natevw

    15/10/2015 a las 22:08

  • @JacobTheDev Definitivamente, se debe aceptar el método más idiomático y flexible. Me alegro de haberte empujado por encima de la marca de 5k con mi voto a favor 🙂

    – davnicwil

    18 mayo 2017 a las 15:40

Haz el contenedor div alrededor de ellos.

.container {
width: 500px;
white-space: nowrap;
overflow: visible/hidden/scroll - whichever suits you;
}

  • ese no es el caso con float-left niños.

    – Roko C. Bulján

    22 de febrero de 2016 a las 20:28

  • Configuré el ancho del contenedor al 100%; funciona en mi caso. Podría ayudarte en el tuyo.

    – cero_cool

    24/03/2016 a las 22:22

Me doy cuenta de que está de moda odiar en las mesas, pero pueden ser útiles.
http://jsfiddle.net/td6Uw/

En lugar de hacer flotar los div, colóquelos en una tabla y envuelva la tabla con un div de tamaño restringido. El TR evitará que se envuelva.
Además, utilicé DIV dentro de los TD para facilitar el diseño de celdas. Podría diseñar los TD si dedica el tiempo, pero los encuentro difíciles de diseñar y, por lo general, me debilito y solo uso el método DIV-in-TD empleado por mi violín.

En realidad es muy simple. Ejemplo de código:

Element {
white-space: nowrap;
}

  • no puedo entender por qué esta no es la respuesta número uno ahha

    – Brady Edgar

    30 de diciembre de 2016 a las 21:28

  • Por Dios, esto fue todo. Aquí nada más funcionó. FWIW, puse esto en el elemento similar a “div” principal.

    – Qix – MONICA FUE MALTRATADA

    13 de abril de 2017 a las 23:58

  • No me funcionó usando un div, a pesar de su nombre, no-wrap. Se envolvió totalmente.

    – Dave

    5 de marzo de 2019 a las 17:22

  • no puedo entender por qué esta no es la respuesta número uno ahha

    – Brady Edgar

    30 de diciembre de 2016 a las 21:28

  • Por Dios, esto fue todo. Aquí nada más funcionó. FWIW, puse esto en el elemento similar a “div” principal.

    – Qix – MONICA FUE MALTRATADA

    13 de abril de 2017 a las 23:58

  • No me funcionó usando un div, a pesar de su nombre, no-wrap. Se envolvió totalmente.

    – Dave

    5 de marzo de 2019 a las 17:22

¿Ha sido útil esta solución?