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

Han*_*ood 100 css

假设我有一个宽度为身体宽度50%的div.如何使其高度等于该值?因此,当浏览器窗口宽度为1000px时,div的高度和宽度均为500px.

小智 139

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

div {
  border: 1px solid red;
  width: 40%;
  padding: 40%;
  box-sizing: border-box;
  position: relative;
}
p {
  position: absolute;
  top: 0;
  left: 0;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <p>Some unnecessary content.</p>
</div>
Run Code Online (Sandbox Code Playgroud)

根据自己的喜好调整百分比.这是一个JSFiddle

  • 我讨厌你如何在CSS中轻松地进行3D变换,阴影,圆角等,但要有一个方形div需要一个黑客...... (52认同)
  • 我明白`width:40%`是父元素的40%,但是什么是`padding:40%`相对于? (3认同)
  • Firefox似乎在该方法上存在问题,但修复起来很简单.如果你想要一个50%的盒子,你需要"填充:25%;".每边25%. (3认同)
  • @Ryan的`padding:40%`与元素的宽度有关(包括padding-top和padding-bottom).绝对让我感到惊讶,[另一个问题](http://stackoverflow.com/a/10441480/1314762)有一个很好的解释. (2认同)

Hub*_*bro 26

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

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

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

<div id="dynamicheight"></div>
Run Code Online (Sandbox Code Playgroud)

如果希望在调整大小时使用浏览器窗口缩放框,请将代码移动到函数并在窗口调整大小事件上调用它.这也是一个演示(查看示例全屏和调整大小浏览器窗口):

$(window).ready(updateHeight);
$(window).resize(updateHeight);

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

<div id="dynamicheight"></div>
Run Code Online (Sandbox Code Playgroud)

  • 你不需要javascript.你可以这样做:高度:0px; 宽度:40%; padding-top:40%; (23认同)

小智 13

<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;
}
Run Code Online (Sandbox Code Playgroud)

为此,我认为你需要定义填充到ex.最佳?像这样:

<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;
}
Run Code Online (Sandbox Code Playgroud)

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


Zac*_*ier 10

我为此制作了一个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;
}
Run Code Online (Sandbox Code Playgroud)

视口单元的支持表

我在一篇关于缩放响应动画的CSS-Tricks文章中写过关于这种方法和其他文章的文章.