如何设计div作为响应方块?

时间:2013-09-28 14:37:03

标签: css css3 layout responsive-design aspect-ratio

我希望我的div能够调整其高度以始终等于其宽度。宽度是百分比。当父级宽度减小时,框应该通过保持其宽高比来减少。

如何做到这一点是CSS?

6 个答案:

答案 0 :(得分:174)

适用于几乎所有浏览器。

您可以尝试将padding-bottom作为百分比。

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

外部div正在制作一个正方形,而内部div包含内容。这个解决方案多次为我工作。

这是jsfiddle

答案 1 :(得分:158)

要实现您的目标,您可以使用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;
}

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

答案 2 :(得分:43)

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/

答案 3 :(得分:31)

指定填充底部的宽度与宽度的百分比一样简单。因此,如果您的宽度为50%,请使用下面的示例

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

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

带有自适应文字的已修改版本http://jsfiddle.net/kJL3u/394

答案 4 :(得分:5)

另一种方法是在width: 100%中使用带有height: autodiv的透明1x1.png,并在其中使用绝对定位的内容:

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/

答案 5 :(得分:2)

这就是我想出的。这是a fiddle

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

<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>

这是样式表。它使用了两种技术,一种用于square shapes,另一种用于centered text

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;
}