2013-01-17 34 views
6

我真的很困惑如何使用css转换缩放元素会影响文档流。CSS缩放变换如何影响文档流?

Consider this jsbinthis codepen since jsbin seems to have gone down在那里我有

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

与样式

#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 
} 

我希望这同样显示了到一个100x100的蓝色方形。但是它被移位并且在铬上甚至与下面的p元素略有重叠。此外,检查devtools中#scaled的尺寸显示为蹲长,看似突破100x100框。

最后,将#overflow: hidden;添加到#scaled完成一些疯狂的事情。

这是怎么回事?内容流应该如何受到影响?

+0

Link是死了......我们可以得到一个小提琴? – Mooseman

+0

@Mooseman--哦,该死的,这几分钟前还活着,我用过了。好吧,必须重写所有内容 –

+0

@Mooseman - 用codepen更新http://codepen.io/anon/full/twGzE –

回答

9

CSS变换不会影响文档流。 DOM元素将在页面流中占据它的原始位置和尺寸。因此,如果您有3个相同大小的正方形div,并行显示并将-webkit-transform:scale(2)应用于中心方块,则此方块将放大至200%它的原始位置的中心,并且与其他正方形重叠。

参考例子:

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

我真的不明白我的例子中发生了什么。如果我缩放一个元素并在其上设置高度/宽度 - 是缩放元素本身还是缩放其内容?为什么东西会与其他元素重叠呢? –

+2

您的示例问题是:1.包含的元素是100px x 100px,其中包含400px的正方形。因此,蓝色正方形将从包含框中溢出。 2.您对包含元素的25%缩放比例是缩放该框中的所有内容,但是将其从容器的中心缩放。因此,由于您的实际容器高度为100像素,垂直溢出为300像素,因此蓝色方块仍将位于包含100像素的元素之外。快速修复您的示例是添加-prefix-transform-origin:0 0;以#scaled从左上角强制缩小。 – chrisgonzalez

+0

ahhh,'transform-origin'是我失踪的关键。这就是我想要的,而不是翻译 –