2013-04-17 17 views
24

Sto provando a creare un layout reattivo in cui due scatole si siedono l'una accanto all'altra se le dimensioni dello schermo lo consentono, e se le rispettano l'una con l'altra se non lo fa. Se le scatole sono una sotto l'altra, mi piacerebbe che fossero centrate sui loro genitori. Ho installato un jsfiddle per dimostrare il problema:Perché la larghezza massima non sostituisce la larghezza minima?

http://jsfiddle.net/leongersen/KsU23/

width: 50%; 
min-width: 350px; 
max-width: 100%; 

provare a ridimensionare il riquadro 'risultato' al di sotto di 350px. Gli elementi si sovrappongono ai loro genitori.

La mia domanda:

Perché non è il max-width specificato onorato, anche se si tratta dopo il min-width?

Potrei ovviamente utilizzare una query multimediale, ma mi piacerebbe sapere perché questo si verifica.

+0

Non vedo il problema. Raggiungono il 50%, se lo allargo, mantengono il 50%, se lo faccio più piccolo di 700px, mantengono una larghezza minima di 350 px e si incartano (il secondo va a una nuova riga). Cosa ti aspetti che accada? –

+0

Le caselle rosse si sovrappongono all'elemento padre se questo diventa inferiore a 350 px. – Lg102

+0

@FranciscoZarabozo - Lg102 sembra aspettarsi che la larghezza massima del 100% subentri quando la dimensione del genitore è inferiore alla somma della larghezza minima degli elementi figli. ove possibile una larghezza minima di consulenza – CodeMonkey

risposta

29

causa della CSS standards:

Il seguente algoritmo descrive come le due proprietà influenzano il valore usata del 'width':

  1. La larghezza utilizzata sperimentale viene calcolata (senza 'min-width' e 'max-width') seguendo le regole in "Calcolo delle larghezze e dei margini " sopra.
  2. Se la larghezza provvisoria utilizzata è maggiore di "larghezza massima", le regole sopra riportate vengono applicate nuovamente, ma questa volta utilizzando il valore calcolato di "larghezza massima" come valore calcolato per "larghezza".
  3. Se la larghezza risultante è inferiore a "larghezza minima", le regole sopra vengono applicate nuovamente, ma questa volta utilizzando il valore di "larghezza minima" come il valore calcolato per "larghezza".

Come tale larghezza minima sempre "vince". All'interno di una specifica regola CSS non c'è comunque precedenza, tutti i valori sono applicati atomicamente. La precedenza si verifica solo quando regole diverse si applicano tutte allo stesso elemento, e anche in questo caso si basa sulla specificità prima di considerare l'ordine dei file.

+0

La precedenza si verifica solo quando la * stessa regola * si applica a un elemento più volte. ad esempio '.foo {bar: fizz; bar: ronzio; } 'quest'ultima definizione ha la precedenza. Nell'esempio, 'min-width' e' max-width' sono regole diverse, quindi la precedenza non entra in essa. – zzzzBov

+0

Non è davvero la precedenza. Quando una * dichiarazione * è duplicata all'interno di una * regola *, è semplicemente una sovrascrittura dello stesso valore risultante dall'analisi sequenziale. Le regole risultanti (con una regola come selettore e un insieme di dichiarazioni) possono avere la precedenza in base alla specificità del selettore, o se 2 regole sono ugualmente specifiche l'effetto "a cascata" del CSS entra in gioco e la seconda definizione è considerata più specifico. –

+0

Il mio punto era che il tuo post dice "La precedenza si verifica solo quando regole diverse si applicano allo stesso elemento", quando dovrebbe essere "La precedenza si verifica solo quando la stessa regola di stile viene applicata allo stesso elemento" – zzzzBov

Problemi correlati