使用变换后,分割内联块显示和正确位置:缩放

时间:2018-05-25 08:17:07

标签: jquery css scale css-transforms display

一开始我想对我的英语说抱歉 - 我正努力做到最好;)

以下是我设法创建的内容:

JSFiddle

我要做的是通过使用js来缩放包含很少不同元素的div,但同时我确实希望保持内联块显示,因此在缩放更多(或更少,取决于比例值)元素可以放在一行。

只有一个元素的Html如下所示:

<div class="containerofelements">
 <div class="resizeratio">1</div>
 <div class="resizeratio">0.75</div>
 <div class="resizeratio">0.5</div>
 <hr />
 <div class="elements" style="background-image: url(https://image.ibb.co/ha1wAo/back.png)">
   <div class="middle">middle</div>
   <div class="leftup">leftup</div>
   <div class="rightup"><img src="https://image.ibb.co/dK2BRT/profile_default_m.jpg" /></div>
   <div class="leftdown">leftdown</div>
   <div class="rightdown">rightdown</div>
 </div>
</div>

元素的数量将是可变的,并且很可能在“.elements”div中会有更多不同的内容。 .resizeratio div是使用jquery按写入值缩放.elements的按钮。

我能够使用代码成功缩放元素并通过js保持所有子元素的位置:

css({
 transform: "scale("+scale+")"
});

不幸的是,在缩放div后确实保持原始位置。正如我设法注意到的那样,div本身是缩放的,但它在某种程度上不会改变位置,就像缩放元素向下的空白空间被额外的边距填充一样。如何防止这种情况?

2 个答案:

答案 0 :(得分:1)

这是一个快速解决方案

JSFiddle

只需在.wrap周围添加一个div(例如.elements),然后根据这样的比例更改其宽度和高度。

el.parent('.wrap').css({
  width: (350 * scale) + "px",
  height: (500 * scale) + "px"
});
.wrap {
  width: 350px;
  height: 500px;
  display: inline-block;
  position: relative;
}

.elements {
  width: 340px;
  height: 490px;
  background-repeat: no-repeat;
  margin: 5px;
  -moz-transform-origin: 0 0;
  transform-origin: 0 0;
}

答案 1 :(得分:0)

你可以使用css属性zoom,但这在Firefox中不起作用。

另一种解决方案是使用负左右边距。

如果这不起作用,您应该查看flexbox属性。 https://css-tricks.com/snippets/css/a-guide-to-flexbox/