如何在使用scale和transform-origin时保留两个div之间的固定空间?

时间:2017-09-07 18:30:11

标签: javascript html css css3

我想在以下方面获得一些帮助:如何在使用scale和transform-origin时保留两个div之间的固定空间? div可以是各种尺寸。

实施例: https://jsfiddle.net/7dL9sbLk/

HTML:

<p>foo</p>
<p class="transformed">bar</p>
<p class="transformed">bar</p>
<p class="transformed">bar</p>
<p class="transformed">bar</p>
<p class="transformed">bar</p>

CSS:

 p { 
  width: 50px;
  height: 50px;
  background-color: teal;
}

.transformed {
  transform-origin: 0 0;
  transform: scale(0.58) translateY(0);
  background-color: blue;
}

2 个答案:

答案 0 :(得分:1)

结合使用Flexbox和Javascript (Example)的一种可能解决方案:

HTML:

<container id='flexbox-container'>
    <div class="transformed">bar</div>
    <div class="transformed">bar</div>
    <div class="transformed">bar</div>
    <div class="transformed">bar</div>
    <div class="transformed">bar</div>
    <div class="transformed">bar</div>
    <div class="transformed">bar</div>
    <div class="transformed">bar</div>
</container>

使用Javascript:

document.querySelectorAll( ".transformed" ).forEach( ele => ele.style["margin-bottom" ] = ele.getBoundingClientRect().height - ele.clientHeight + "px")

CSS:

div { 
  margin-top: 5px;
  width: 450px;
  height: 450px;
  background-color: teal;
}

#flexbox-container {
  display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -webkit-flex-direction: column;
    flex-direction: column;
}

.transformed {
  transform-origin: 0 0;
  transform: scale(0.48);
  background-color: blue;
}

答案 1 :(得分:0)

最简单的方法是设置margin-bottom。这对于静态示例很容易(在您的示例中为margin-bottom: calc( -50px * ( 1 - 0.58 ) );),但动态值需要JavaScript。这是一个粗略的example

ele.style[ "margin-bottom" ] = ele.getBoundingClientRect().height -
                               ele.clientHeight + "px";

请注意,每次元素的clientHeight更改(例如屏幕旋转或调整大小)时,您都需要运行它。各种库使这更容易,例如css-element-queries