【问题标题】:How does css scale transform affect document flow?css scale 转换如何影响文档流?
【发布时间】:2013-01-01 10:57:23
【问题描述】:

我真的很困惑使用 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 蓝色方块的方式显示。但它被转移了,在 chrome 上甚至与下面的 p 元素略有重叠。此外,在 devtools 中检查 #scaled 的尺寸显示为蹲和长,似乎超出了 100x100 的框。

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

发生了什么事?内容流应该如何受到影响?

【问题讨论】:

  • 链接失效了...我们能弄个小提琴吗?
  • @Mooseman - 哦,该死的,这几分钟前还活着,我用过。好的,必须重写所有内容
  • @Mooseman - 使用代码笔更新 codepen.io/anon/full/twGzE

标签: css transform


【解决方案1】:

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

【讨论】:

  • 我真的不明白我的例子中发生了什么。如果我缩放一个元素并在其上设置一个高度/宽度 - 是缩放元素本身还是仅缩放其内容?那为什么东西会与其他元素重叠呢?
  • 你的例子的问题是:1.包含元素是100px x 100px,里面有一个400px的正方形。因此,蓝色方块将从包含框溢出。 2. 包含元素的 25% 比例缩放该框的所有内容,但从容器的中心缩放它。因此,由于您实际上拥有一个高度为 100px 且垂直溢出为 300px 的容器,所以蓝色方块仍将位于包含 100px 的元素之外。您的示例的快速修复是添加 -prefix-transform-origin:0 0;到 #scaled 以强制从左上角向下缩放。
  • 啊,transform-origin 是我丢失的关键。这就是我想要的,而不是翻译
猜你喜欢
  • 2014-11-03
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多