2012-08-08 17 views
7

Si consideri il seguente frammento di codice:immagini Responsive in una tabella fluid-width (max-width)

HTML:

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

CSS:

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

Il l'immagine non sarà mai più larga di 200 px, indipendentemente dalla sua dimensione nativa. Fin qui tutto bene.

Ecco il violino: http://jsfiddle.net/PeAAb/


Tuttavia, se l'elemento genitore ha la sua display insieme a table:

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

l'immagine si espande magicamente alla sua larghezza originaria, ampliando il table con esso .

Ecco il violino: http://jsfiddle.net/PeAAb/1/


stesso accade con una tabella effettiva: http://jsfiddle.net/PeAAb/2/


Domanda: È questo il comportamento previsto? In tal caso, cosa si può fare per ovviare a questo problema?

L'impostazione dello width del genitore (anche una larghezza basata su percentuale) anziché max-width ricomprime correttamente l'immagine nella sua casella, ma non è una soluzione. Ho bisogno che il genitore sia fluido (lo sto usando per la struttura principale del sito, così posso avere the sidebar HTML appear after the main content in the source, but with the sidebar being fixed width).

Inoltre, setting table-layout to fixed sembra avere no effect qui.

+0

Sto cercando di creare qualcosa di reattivo in SharePoint 2010, che ha un'abitudine davvero sgradevole di avvolgere le tabelle annidate attorno alle cose. Se conosci una soluzione a questo (che funziona fino a IE8) mi piacerebbe sentirne parlare. La soluzione di @ pKs (display: block;) fallisce in IE8/9 qui :( –

risposta

7

Il problema qui è che una tabella (o una serie di div di comportarsi come una tabella) non è un elemento di blocco e la larghezza massima si applica solo agli elementi di blocco. Il mio unico suggerimento è di avvolgere l'elemento tabella in un div con display: block; impostato.

Ecco il violino nel caso in cui si è interessati: http://jsfiddle.net/PeAAb/4/

+0

Grazie per la * correzione * corretta, ma nel mio caso questo non mi aiuta. Date un'occhiata a [la mia demo] (http: // jsfiddle.net/659JN/). Funziona correttamente nel webkit, ma da nessun'altra parte.Avvolgere un altro elemento al suo interno [non aiuta] (http://jsfiddle.net/6BWCw/). –

+0

Accetto mestamente questa risposta, poiché è corretta. Tuttavia, non risolve il problema. –

+0

Joseph, grazie per l'accettazione. Vorrei avere una soluzione al tuo problema, dato che in genere non mi piace postare risposte "che non possono essere fatte" - ma dopo alcune ricerche combinate con le mie esperienze personali, non sono stato in grado di venire una buona soluzione al tuo problema. In effetti, questo mi ha perplesso un po '; Non vedo l'ora di sentire da chiunque possa risolvere questo problema meglio di me. –

-1

So che questo è piuttosto tardi, ma ha trovato la risposta, che si è rivelato essere piuttosto semplice e super facile, table-layout: fisso.

trovate qui: http://blog.room34.com/archives/5042

In ogni caso, questo è per coloro che cercano una risposta a questo enigma come lo ero io.

+0

Vorrei spiegare brevemente o parafrasare l'articolo sul motivo per cui 'table-layout: fixed' è una risposta qui soprattutto perché l'OP ha detto che non ha funzionato per lui. – Dan

+0

Funziona solo con una larghezza specificata. La domanda era come ottenere ciò con un set 'max-width'. Il genitore deve avere una larghezza fluida. –