Dos elementos de bloque en línea, ancho 50% se ajustan a la segunda línea [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Me gustaría tener dos columnas de 50% de ancho de espacio, y evitar flotadores. Así que pensé en usar display:inline-block.

Cuando los elementos se suman al 99% de ancho (por ejemplo 50%, 49%, http://jsfiddle.net/XCDsu/2 / ) funciona como se esperaba.

Cuando se usa anchura del 100% (eg 50%, 50%, http://jsfiddle.net/XCDsu/3 / ) la segunda columna pasa a la segunda línea.

¿Por qué es eso?

 132
Author: isherwood, 2011-07-29

5 answers

Es porque display:inline-block tiene en cuenta el espacio en blanco en el html. Si elimina el espacio en blanco entre los div, funciona como se esperaba. Ejemplo en vivo: http://jsfiddle.net/XCDsu/4 /

<div id="col1">content</div><div id="col2">content</div>
 272
Author: tw16,
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-07-29 10:53:22

Puede eliminar los espacios en blanco a través de css usando espacios en blanco para que pueda mantener su bonito diseño HTML. No olvides volver a poner el espacio en blanco a la normalidad si quieres que tu texto se ajuste dentro de las columnas.

Probado en IE9, Cromo 18, FF 12

.container { white-space: nowrap; }
.column { display: inline-block; width: 50%; white-space: normal; }

<div class="container">
  <div class="column">text that can wrap</div>
  <div class="column">text that can wrap</div>
</div>
 93
Author: Adam,
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-05-14 23:20:19

NOTA: En 2016, probablemente pueda usar flexbox para resolver este problema más fácilmente.

Este método funciona correctamente IE7+ y todos los principales navegadores, se ha probado y probado en una serie de aplicaciones web basadas en viewport complejas.

<style>
    .container { 
    font-size:0}

    .column { 
    display: inline-block; 
    width: 50%; 
    font-size:1rem; /* IE9+ */
    }

    .ie7 .column {font-size:16px; display:inline; zoom:1}

    .ie8 .column {font-size:16px}

</style>

<div class="container">
  <div class="column">text that can wrap</div>
  <div class="column">text that can wrap</div>
</div>

Demostración en Vivo: http://output.jsbin.com/sekeco/2

El único inconveniente de este método para IE7/8, es confiar en body {font-size:??px} como base para el tamaño de fuente basado en em/%.

Se podría servir CSS específico de IE7 / IE8 usando los comentarios condicionales de IE

 30
Author: Phil Ricketts,
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-05-23 11:47:29

inline y los elementos inline-block se ven afectados por los espacios en blanco en el HTML.

La forma más sencilla de solucionar el problema es eliminar el espacio en blanco entre </div> y <div id="col2">, véase: http://jsfiddle.net/XCDsu/15 /

Hay otras soluciones posibles, ver: bikeshedding CSS3 propiedad alternativa?

 13
Author: thirtydot,
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-05-23 11:47:29

Continué teniendo este problema en ie7 cuando el navegador estaba en ciertos anchos. Resulta que los navegadores más antiguos redondean el valor del píxel hacia arriba si el resultado porcentual no es un número entero. Para resolver esto puede intentar establecer

overflow: hidden;

En el último elemento (o en todos ellos).

 -3
Author: Autonomy,
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-12-03 10:05:58