2013-01-17 18 views
6

Sono davvero confuso su come ridimensionare un elemento utilizzando le trasformazioni CSS influisce sul flusso del documento.In che modo la trasformazione in scala css influisce sul flusso del documento?

Consider this jsbin o this codepen since jsbin seems to have gone down dove ho

p{slipsum text} 
#scaled 
    #scaled-content{some text} 
p{slipsum text} 

con il foglio di stile

#scaled-contents { 
    height: 400px; 
    width: 400px; 
    background-color: blue; 
    color: red; 
    font-size: 3em; 
} 

#scaled { 
    transform: scale(0.25, 0.25); //browser prefixes... 
    width: 100px; 
    height: 100px 
} 

mi aspetterei questo di presentarsi in modo simile a un singolo 100x100 quadrato blu. Ma è spostato e su Chrome anche sovrappone leggermente il seguente elemento p. Inoltre, l'esame delle dimensioni di #scaled in devtools mostra come squat e lungo, apparentemente oltre la casella 100x100.

Infine, l'aggiunta di overflow: hidden; a #scaled fa qualcosa di pazzesco.

Cosa sta succedendo? Come dovrebbe essere influenzato il flusso di contenuti?

+0

link è morto ... Possiamo ottenere un violino? – Mooseman

+0

@Mooseman - oh dannazione, questo era vivo solo pochi minuti fa, l'ho usato. Ok, devo riscrivere tutto –

+0

@Mooseman - aggiornato con una codepen http://codepen.io/anon/full/twGzE –

risposta

9

La trasformazione CSS non influisce sul flusso del documento. L'elemento DOM occuperà la posizione e le dimensioni originali all'interno del flusso della pagina.

Quindi se si dispone di 3 div quadrate di dimensioni identiche, visualizzate in linea in fila e si applica un -webkit-transform: scala (2) al quadrato centrale, questo quadrato si scala fino al 200% più grande, scala dal centro della sua posizione originale e si sovrappongono entrambi gli altri quadrati. esempio

Riferimento:

http://jsfiddle.net/ypnEk/

HTML:

<div class="square one"></div> 
<div class="square two"></div> 
<div class="square three"></div> 

CSS:

.square{ 
    margin-top:50px; 
    width:50px; 
    height:50px; 
    display:inline-block; 
} 

.one{ 
    background:#222; 
} 

.two{ 
    background:#888; 
    -webkit-transform: scale(2); 
} 

.three{ 
    background:#ccc; 
} 
+0

Non capisco davvero cosa sta succedendo nel mio esempio allora. Se ridimensiono un elemento E ne assetto un'altezza/una larghezza, è necessario ridimensionare l'elemento stesso o solo il suo contenuto? E perché allora le cose si sovrappongono ad altri elementi? –

+2

Il problema con il tuo esempio è: 1. L'elemento contenitore è 100 px x 100 px, con un quadrato di 400 px al suo interno. Come tale, il quadrato blu traboccherà da quella scatola contenente. 2. La scala del 25% che hai sull'elemento contenitore sta ridimensionando TUTTI i contenuti di quella casella, ma la ridimensiona dal centro del contenitore. Quindi, dal momento che hai effettivamente un contenitore di altezza 100px con 300px di overflow verticale, il quadrato blu rimarrà comunque all'esterno dell'elemento contenente 100px. La correzione rapida per il tuo esempio è aggiungere -prefix-transform-origin: 0 0; per #scalare per forzare la scala verso il basso dall'angolo in alto a sinistra. – chrisgonzalez

+0

ahhh, 'transform-origin' era la chiave che mi mancava. Questo è quello che volevo, non tradurre –

Problemi correlati