相对于其高度调整div宽度以保持纵横比

问题描述 投票:1回答:2

我想通过.center纵横比(每3个高度4个宽度)和4:3的高度保持100% div的宽度相对于其高度。然后将div水平居中对齐。

[就像您可以在Flash应用程序中看到here

这是我所拥有的:

HTML:

<div id="stuff" class="center" width="800" height="600"> 
     <canvas id="someHTML5">You cant play HTML5</canvas>
</div>

CSS:

.center {
    position: absolute;
    left: 50%;
    width: 800px; /* how do I make this relative; i want: pseudo code: width: height/3*4; */
    height: 100%;
    margin-left: -400px; /* -width/2 for horizontal alignment */
    z-index: 100;  
}

我也有一个JavaScript循环来集成JavaScript侧面更新。

css html height width
2个回答
5
投票

由于框的width应相对于其height进行更改,因此可以将vh viewport relative length用作width属性的值。

Spec

视口百分比长度是相对于初始包含块。当初始的heightwidth包含块被更改,它们将相应缩放。

vh单位等于初始包含块的1%height

您在这里:

.center {
    position: absolute;
    left: 50%;
    width: 133.33vh; /* 100 * 4/3 ratio */
    height: 100%;
    margin-left: -66.66vh; /* width / 2 */
    z-index: 100;
}

WORKING DEMO

[值得注意的是,vhvw视口百分比长度are supported in IE9+


浏览器兼容性

“在此处输入图像描述”

学分:Mozilla Developer Network


0
投票

我制作了一个像视频一样调整大小的脚本。

window.onresize = function() {
  resize();
};

function resize() {
  var wrapper = document.querySelector(".wrapper");
  var wrapperwidth = 1920;
  var wrapperheight = 1080;
  var vw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
  var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
  var ratio = Math.min(vw / wrapperwidth, vh / wrapperheight);
  wrapper.style.transform = `translate(-50%, -50%) scale(${ratio})`;
}

resize();
.wrapper {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 1919px;
  height: 1079px;
  overflow: hidden;
  background-color: red;
}

/* demo text (smiley face) */

.wrapper::after {
  content: ":)";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 200px;
  font-family: "Roboto", 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
<div class="wrapper"></div>
© www.soinside.com 2019 - 2024. All rights reserved.