我想我的div调整它的高度,总是等于它的宽度。宽度是百分数。当父元素的宽度减小时,盒子应该通过保持其纵横比减小。

这是CSS怎么做的?


适用于几乎所有浏览器。

你可以试着按百分比给衬底。

<div style="height:0;width:20%;padding-bottom:20%;background-color:red">
<div>
Content goes here
</div>
</div>

外部div正在制作一个正方形,内部div包含内容。这个方法对我奏效过很多次。

这是jsfiddle


为了达到你想要的效果,你可以使用viewport-percentage length vw。

下面是我在jsfiddle上做的一个快速示例。

HTML:

<div class="square">
    <h1>This is a Square</h1>
</div>

CSS:

.square {
    background: #000;
    width: 50vw;
    height: 50vw;
}
.square h1 {
    color: #fff;
}

我相信有很多其他的方法可以做到这一点,但对我来说,这种方法似乎是最好的。


这是我想到的。这是一把小提琴。

首先,我需要三个包装器元素,分别用于正方形和居中文本。

<div><div><div>Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat
volutpat.</div></div></div>

这是样式表。它使用了两种技术,一种用于方形形状,另一种用于居中文本。

body > div {
    position:relative;
    height:0;
    width:50%; padding-bottom:50%;
}

body > div > div {
    position:absolute; top:0;
    height:100%; width:100%;
    display:table;
    border:1px solid #000;
    margin:1em;
}

body > div > div > div{
    display:table-cell;
    vertical-align:middle; text-align:center;
    padding:1em;
}

这就像指定一个与宽度相同大小的填充底部一样简单。所以如果你的宽度是50%,就使用下面的例子

id or class{
    width: 50%;
    padding-bottom: 50%;
}

这是一个jsfiddle http://jsfiddle.net/kJL3u/2/

编辑版本与响应文本:http://jsfiddle.net/kJL3u/394


另一种方法是在div中使用透明的1x1.png,宽度:100%,高度:auto,并在其中绝对定位内容:

html:

<div>
    <img src="1x1px.png">
    <h1>FOO</h1>
</div>

css:

div {
    position: relative;
    width: 50%;
}

img {
    width: 100%;
    height: auto;
}

h1 {
    position: absolute;
    top: 10px;
    left: 10px;
}

Fidle: http://jsfiddle.net/t529bjwc/


HTML

<div class='square-box'>
    <div class='square-content'>
        <h3>test</h3>
    </div>
</div>

CSS

.square-box{
    position: relative;
    width: 50%;
    overflow: hidden;
    background: #4679BD;
}
.square-box:before{
    content: "";
    display: block;
    padding-top: 100%;
}
.square-content{
    position:  absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    color: white;
    text-align: center;
}

http://jsfiddle.net/38Tnx/1425/