CSS Scaled Div Centering

时间:2015-09-02 15:24:30

标签: javascript jquery html css css3

我遇到一个问题,将<div id='divTwo'>置于另一个<div id='divOne'>内。这通常很容易做到,但在这种情况下,transform: scale(); transform-origin: 50% 50% 0px;应用于'divTwo'

#divOne {
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
}

#divTwo {
    width: 1024px;
    height: 768px;
    margin: auto;
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
    border-left: 131px solid #333333;
    border-right: 131px solid #333333;
    border-top: 47.5px solid #333333;
    border-bottom: 47.5px solid #333333;
    border-radius: 55px;
}

如果应用于变换的比例和窗口大于outerWidth(),则'divTwo'没有问题居中。但是当缩放'divTwo'并且窗口小于或等于outerWidth()时。 div将不再居中,而是将其中心点放在浏览器的右侧,从而导致“divTwo”的一半偏离浏览器的右侧。只要您不垂直缩放,就可以将transform-origin: 50% 50% 0px;更改为transform-origin: 0% 50% 0px;,反之亦然。

jsfiddle示例:https://jsfiddle.net/yvyz49zp/

谢谢。我觉得我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

我在jsfiddle中相对较快地敲了这个 - 没有javascript需要。只需使用这些值,直到得到你喜欢的东西。

<强>代码:

body {
    background: lightblue;
}

#container {
    display: inline-block;
    position: absolute;
    width: 50%;
    right: 50%;
    top: 50%;
    transform: translate(50%, -50%);
}
#dummy {   
    margin-top: 75%; /* Using the dummy is the trick - it locks the aspect ratio (at 4:3 in this case) */
}
#device {
    position: absolute;
    top: 10%;
    bottom: 10%;
    left: 0;
    right: 0;
    background-color: #333;
    border-radius: 10%;
}

#screen {
    position: absolute;
    width: 70%;
    height: 80%;
    background: #0f0;    
    right: 50%;
    top: 50%;
    transform: translate(50%, -50%);
}
<div id="container">
    <div id="dummy"></div>
    <div id="device">
        <div id="screen"></div>
    </div>
</div>