css – 根据高度设置宽度

我看到高度的解决方案取决于宽度: css height same as width.或者这里: https://stackoverflow.com/a/6615994/2256981.
但我的问题恰恰相反.

我的元素:

<body>
    <div id="square"></div>
</body>

风格:

body,html {
    margin: 0;
    height: 100%;
    min-height: 300px;
    position: relative;
}
div#square { /* My square. */
    height: 75%; /* It's height depends on ancestor's height. */
    width: 75vh; /* If supported,preliminarily sets it's width. */
    position: absolute; /* Centers it. */
    left: 50%; top: 50%; transform: translate(-50%,-50%);
    background-color: darkorange; /* Makes it visible. */
}

脚本,保持正方形:

window.onload = window.onresize = function (event) {
    var mySquare = document.getElementById("square");
    mySquare.style.width = mySquare.offsetHeight + 'px';
};

完整代码http://jsfiddle.net/je1h/hxkgfr9g/

问题是在纯CSS中做同样的事情.没有脚本.

解决方法

我知道有两种技术可以根据元素的高度保持元素的宽高比:

当高度相对于视口时:

你可以使用vh单位:

div {
  width: 75vh;
  height: 75vh;
  background:darkorange;
}
<div></div>

对于基于父元素高度的高度:

您可以使用具有所需宽高比的虚拟图像.宽高比为1:1的示例可以使用1 * 1透明的.png图像,或者@vlgalik评论1 * 1 base64编码的gif:

html,body{
    height:100%;
    margin:0;
    padding:0;
}
#wrap{
    height:75%;
}
#el{
    display:inline-block;
    height:100%;
    background:darkorange;
}
#el img{
    display:block;
    height:100%;
    width:auto;
}
<div id="wrap">
    <div id="el">
        <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
    </div>
</div>

请注意,最后一个演示不会在窗口大小调整时更新.但纵横比保持在页面加载

更新:
正如在the comments设置中所报告的那样:inline-flex:on #el似乎解决了窗口调整大小问题的更新问题.

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效