我可以根据基于百分比的宽度来设置div的高度吗?

假设我有一个宽度为50%的div。 我如何使其高度等于该值? 所以当浏览器窗口宽度为1000px时,div的高度和宽度都是500px。

如果你愿意忍受一些限制和跨浏览器的问题,可以用纯CSS完成。 但是,使用Javascript可以轻松灵活地完成。 如果您需要纯粹的CSS解决scheme,请参阅其他答案。

设置div的宽度为(例如)50%,使用JavaScript检查其宽度,然后相应地设置高度。 下面是一个代码示例(我正在使用jQuery,一个JavaScript库):

$(function() { var div = $('#dynamicheight'); var width = div.width(); div.css('height', width); }); 
 #dynamicheight { width: 50%; /* Just for looks: */ background-color: cornflowerblue; margin: 25px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div id="dynamicheight"></div> 

这实际上可以只用CSS来完成,但div内的内容必须是绝对定位的。 关键是使用填充百分比和box-sizing: border-box CSS属性:

 div { border: 1px solid red; width: 40%; padding: 40%; box-sizing: border-box; position: relative; } p { position: absolute; top: 0; left: 0; } 
 <div> <p>Some unnecessary content.</p> </div> 
 <div><p>some unnecessary content</p></div> div{ border: 1px solid red; width: 40%; padding: 40%; box-sizing: border-box; position: relative; } p{ position: absolute; top: 0; left: 0; } 

为了这个工作,我认为你需要定义填充前。 最佳? 喜欢这个:

 <div><p>some unnecessary content</p></div> div{ border: 1px solid red; width: 40%; padding-top: 40%; box-sizing: border-box; position: relative; } p{ position: absolute; top: 0; left: 0; } 

无论如何,这就是我得到它的工作,因为只是填充所有周围它不会是一个正方形。

我做了一个CSS的方法,这是由视口宽度的大小,但最大的视口高度的100%。 它不需要box-sizing:border-box 。 如果伪元素不能使用,伪代码的CSS可以应用到一个孩子。 演示

 .container { position: relative; max-width:100vh; max-height:100%; margin:0 auto; overflow: hidden; } .container:before { content: ""; display: block; margin-top: 100%; } .child { position: absolute; top: 0; left: 0; } 

视口单元支持表

我在关于缩放响应animation的CSS-Tricks文章中写到了这种方法和其他方法,您应该查看这些animation 。