2012-08-08 11 views
7

Considere el siguiente fragmento de código:imágenes Responsive en una mesa de líquido de ancho (ancho máximo)

HTML:

<div> 
    <img src="http://placehold.it/600x150" /> 
</div> 

CSS:

div { max-width: 200px } 
img { max-width: 100% }​ 

El la imagen nunca será más ancha que 200px, independientemente de su tamaño original. Hasta aquí todo bien.

Aquí está el violín: http://jsfiddle.net/PeAAb/


Sin embargo, si el elemento de matriz tenga su display conjunto de table:

div { max-width: 200px; display: table } 

la imagen se expande mágicamente a su anchura nativa, la ampliación de la table con ella .

Aquí está el violín: http://jsfiddle.net/PeAAb/1/


mismo ocurre con una tabla real: http://jsfiddle.net/PeAAb/2/


Pregunta: ¿Es esta comportamiento esperado? Si es así, ¿qué se puede hacer para evitar este problema?

Al establecer width del elemento principal (incluso un ancho basado en porcentaje) en lugar de max-width se comprime correctamente la imagen en su cuadro, pero no es una solución. Necesito que el padre sea fluido (estoy usando esto para la estructura principal del sitio, de modo que pueda tener the sidebar HTML appear after the main content in the source, but with the sidebar being fixed width).

Además, setting table-layout to fixed parece tener no effect aquí.

+0

Estoy tratando de construir algo receptivo en SharePoint 2010, que tiene un hábito realmente desagradable de envolver las tablas anidadas alrededor de las cosas. Si conoce una solución para esto (que funciona hasta IE8), me encantaría saberlo. La solución de @ pKs (display: block;) falla en IE8/9 aquí :( –

Respuesta

7

El problema aquí es que una tabla (o un conjunto div para comportarse como una tabla) no es un elemento de bloque, y el ancho máximo solo se aplica a elementos de bloque. Mi única sugerencia es envolver el elemento de la tabla en un div con pantalla: bloque; conjunto.

Aquí está el violín en caso de que esté interesado: http://jsfiddle.net/PeAAb/4/

+0

Gracias por su * respuesta * correcta, pero en mi caso esto no me ayuda. Eche un vistazo a [mi demostración] (http: // jsfiddle.net/659JN/). Funciona correctamente en webkit, pero en ningún otro lado.Envolviendo otro elemento dentro de él [no ayuda] (http://jsfiddle.net/6BWCw/). –

+0

A regañadientes estoy aceptando esta respuesta, ya que es correcta. Sin embargo, no resuelve el problema. –

+0

Joseph, gracias por la aceptación. Desearía tener una solución para su problema, ya que normalmente no me gusta publicar respuestas que "no se puede hacer", pero después de algunas investigaciones combinadas con mis propias experiencias personales, no he podido encontrar una buena solución a tu problema De hecho, esto me ha dejado perplejo un poco; Espero con interés escuchar de cualquiera que pueda resolver esto mejor que yo. –

-1

Sé que esto es bastante tarde, pero encontré la respuesta, que resultó ser bastante simple y muy fácil, table-layout: fijo.

encontrar aquí: http://blog.room34.com/archives/5042

De todos modos, esto es para aquellos que buscan una respuesta a este enigma como yo.

+0

Explicaría brevemente o parafrasearé el artículo sobre por qué 'table-layout: fixed' es una respuesta aquí, especialmente desde que OP dijo que no le funcionaba. – Dan

+0

Esto solo funciona con un ancho especificado. La pregunta era cómo lograr esto con un conjunto 'max-width'. El padre tiene que ser de ancho fluido. –

Cuestiones relacionadas