假设我有一个div,它的宽度是body宽度的50%。我如何使其高度等于该值?这样当浏览器窗口宽度为1000px时,div的高度和宽度都为500px。
假设我有一个div,它的宽度是body宽度的50%。我如何使其高度等于该值?这样当浏览器窗口宽度为1000px时,div的高度和宽度都为500px。
这实际上可以仅使用 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>
根据您的喜好调整百分比。这是一个JSFiddle示例。
width: 40%
表示宽度是父元素的40%,那么 padding: 40%
是相对于什么而言的呢? - Ryanpadding: 40%
是相对于元素的宽度(包括 padding-top
和 padding-bottom
)设置的。这确实让我感到惊讶,关于这个问题有一个很好的解释在另一个问题中。 - Don McCurdypadding: 40%
是相对于包含元素的宽度而言,而不是元素本身。因此,如果容器的宽度为 1000px
,并且将 padding-bottom: 40%
应用于其直接后代,则填充的计算值将为 400px
,无论后代的宽度如何。 - Ejaz这可以通过CSS hack来实现(请参见其他答案),但也可以使用JavaScript很容易地实现。
将div的宽度设置为(例如)50%,使用JavaScript检查其宽度,然后相应地设置高度。以下是使用jQuery的代码示例:
$(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>
如果你想让框随着浏览器窗口的调整而缩放,将代码移动到一个函数中,并在窗口调整大小事件上调用它。这里还有一个演示(查看完整屏幕示例并调整浏览器窗口大小):
$(window).ready(updateHeight);
$(window).resize(updateHeight);
function updateHeight()
{
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>
<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;
}
我在CSS-Tricks文章中介绍了这种方法和其他方法,可以查看 缩放响应动画。
el=document.getElementById('id_div')
el.style.height=el.offsetWidth+"px"
这将给你一个完美的正方形。当页面加载时,让你的JS文件执行这段代码--window.onload
。 - Aseem