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

dan*_*jar 164 css layout aspect-ratio css3 responsive-design

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

怎么做是CSS?

rah*_*ehl 186

适用于几乎所有浏览器.

您可以尝试padding-bottom按百分比给出.

<div style="height:0;width:20%;padding-bottom:20%;background-color:red">
<div>
Content goes here
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

外部div正在制作正方形,而内部div包含内容.这个解决方案很多次对我有用.

这是一个jsfiddle

  • 优选所选答案,因为它在容器的约束内工作,而不是很少有用的视口 (22认同)
  • 如果你想使用padding-bottom方法,这是非常好的教程.[链接] http://www.dwuser.com/education/content/creating-responsive-tiled-layout-with-pure-css/ (10认同)
  • 它有效,但我不懂技术.你能解释为什么这实际上有用吗? (3认同)
  • 本教程非常好,我很容易理解这项技术. (2认同)
  • @ C.Lee你必须在内部`div`上添加`position:absolute;`才能使它工作.计算父维度时,将忽略具有绝对定位的元素.这意味着您可以向内部元素添加内容,还可以添加填充,边框等.:)见[this fiddle](https://jsfiddle.net/sg4q2qyc/). (2认同)

小智 168

要实现您的目标,您可以使用视口百分比长度 vw.

这是我在jsfiddle上做的一个简单例子.

HTML:

<div class="square">
    <h1>This is a Square</h1>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.square {
    background: #000;
    width: 50vw;
    height: 50vw;
}
.square h1 {
    color: #fff;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这绝对是最干净的解决方案.对于对浏览器支持感兴趣的人,我找到了[此概述](http://caniuse.com/viewport-units). (6认同)
  • 非常好,但浏览器支持目前有点粗略但不是 - http://www.google.ie/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CEAQFjAA&url=http %3A%2F%2Fcaniuse.com%2Fviewport单元&EI = H3OfUojKDoWu7Aav64HICQ&USG = AFQjCNGClMNGOWMz16go3FPckmKbSmthnw&SIG2 = ra5HzgNeZxkBSVlFXY1cSA&BVM = bv.57155469,d.ZGU (2认同)
  • 这种解决方案对网格系统不起作用.如果您正在查看以列宽扩展的正方形,@ larulbehl的答案效果会更好. (2认同)
  • 提示:如果您想在纵向或横向视图的视口内放置一个正方形:``` @media (orientation:portrait){width:100vw; 高度:100vw;}@media(方向:风景){宽度:100vh;高度:100vh;}``` (2认同)

gid*_*ior 47

HTML

<div class='square-box'>
    <div class='square-content'>
        <h3>test</h3>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这是什么样的黑魔法?! (6认同)
  • 这是有效的,因为元素的填充是相对于其父元素的*宽度*计算的。 (4认同)
  • 这是纯粹的魔法,但它的作用!谢谢! (2认同)
  • 当宽度可能受到“最大宽度”规则限制时,此解决方案非常有效。在这些情况下,实际计算的宽度可能小于以百分比形式设置的宽度,并且直接在最外层元素上设置填充的所有其他解决方案都将失败。 (2认同)
  • 噢,伙计,这太俏皮了。100 点 给 gidzior (2认同)
  • 使用“.square-box:after”而不是“.square-box:before”似乎表现完全相同。 (2认同)
  • 我一直在寻找答案来保持 div 的纵横比,同时使用弹性框调整它们的大小,这是唯一一个完美工作的答案。纯粹的魔法,谢谢! (2认同)
  • 接受的答案不起作用。这个效果很好。谢谢 ! (2认同)
  • 不断地说这绝对是 CSS 魔法。唯一一个在这里工作过的人。 (2认同)

Chi*_*ipe 32

它就像指定填充底部一样容易,宽度与百分比相同.因此,如果宽度为50%,请使用下面的示例

id or class{
    width: 50%;
    padding-bottom: 50%;
}
Run Code Online (Sandbox Code Playgroud)

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

带有响应文本的编辑版本:http://jsfiddle.net/kJL3u/394

  • 但是,一旦向其添加内容,这就会超出方形宽高比. (4认同)
  • 您可以使用“overflow:hidden”或容器内子项的其他绝对定位来解决该问题。很方便,就像@gidzior的答案一样 (2认同)

gsk*_*kii 7

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

HTML:

<div>
    <img src="1x1px.png">
    <h1>FOO</h1>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

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

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

h1 {
    position: absolute;
    top: 10px;
    left: 10px;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 很好的提示,但这对``svg viewBox ='0 0 1 1'> </ svg>更好用 (4认同)