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

时间:2014-03-12 20:27:04

标签: css html height width

我想保持.center div的宽度相对于其高度4:3宽高比(每3个高度4个宽度)和100%的高度;然后将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端更新。

2 个答案:

答案 0 :(得分:5)

由于框的width应相对于其height进行更改,因此您可以使用vh viewport relative length 作为width财产。

来自Spec

  

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

     

vh单位
  等于初始包含块的1%的{​​{1}}。

你走了:

height

<强> WORKING DEMO

值得注意的是.center { position: absolute; left: 50%; width: 133.33vh; /* 100 * 4/3 ratio */ height: 100%; margin-left: -66.66vh; /* width / 2 */ z-index: 100; } vh视口百分比are supported in IE9+


浏览器兼容性

enter image description here

致谢:Mozilla Developer Network

答案 1 :(得分: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>