CSS响应流体广场(可滚动内容)

时间:2013-05-09 13:31:50

标签: css css3 responsive-design fluid-layout

所以我正在尝试构建一个纯粹的CSS响应方(实际上我正在尝试构建一个圆形但是一旦我得到这个方块就很容易了。)

换句话说:

  • 我希望div height的{​​{1}}占body的百分比,width等于({反之亦然)

  • div还需要在其中包含另一个div,其中包含内容和overflow: auto

  • 最后,div永远不会超过heightwidth的{​​{1}}(或body}。

    < / LI>

到目前为止,我已经使用1px透明.gif作为viewport来部分地(即portrait而不是landscape)使用一些解决方案来填充包装{{1 }}。不理想的语义,但我不知道如果没有它可以做到这一点。

img

以下是我的CSS解决方案以及它们有什么问题:

  1. 除非超出div<div class="wrap"> <img src="http://www.neurillion.com/p/35/static/media/images/1x1t.gif" /> <main> <div class="content"> <h2>Title</h2> <p> Lorem... etc. </p> </div> </main> </div> 的{​​{1}}(height,否则任何元素都无法解决此问题:

    >
    body

    Codepen

  2. 接下来,我添加了landscape媒体查询来交换max-height.wrap { background: blue; margin: 10% auto; width: 70%; position:relative; text-align:center; } .wrap img { border: 1px solid black; height: auto; width: 100%; } main { background: red; display: block; border-radius:50%; height: 100%; width: 100%; position: absolute; top:0 } main div { background: green; overflow: auto; display:inline-block; height:70%; width: 70%; margin-top:15%; } 值。同样的问题。     landscape

    Codepen

  3. 此时我开始研究height的父元素,即width@media(orientation:landscape) { .wrap { margin: auto 10%; height: 70%; width: auto; } }。 (Resource on the difference between them.)我向他们两人添加了.wrapbody,但没有快乐。我还尝试添加另一个html容器,因为我认为控制高度可能更容易,但这似乎也没有做太多。

  4. 现在我几乎没有选择。我很确定解决方案与heightmax-height: 100%元素有关,以及它们如此渴望垂直扩展的方式,但我不确定如何阻止它们这样做。

    任何帮助都非常感激。

1 个答案:

答案 0 :(得分:8)

您可以使用vwvhvmin来缩放广场:

演示:http://jsfiddle.net/r9VQs/

CSS(仅限更改部分):

.wrap {
    background: blue;
    margin: 0 auto;
    max-width: 90vh;
    max-height: 90vh;
    position:relative;
    text-align:center;
}

你也可以使用vmin(效果更好但支持不太好)并放弃图像:

演示:http://jsfiddle.net/r9VQs/2/

CSS:

.wrap {
    background: blue;
    margin: 0 auto;
    width: 90vmin;
    height: 90vmin;
    position:relative;
    text-align:center;
}

vhvwvmin的单位相当于其各自视口尺寸的1%(vh是视口高度,vw是视口 - 宽度和vmin以较小的值为准。)

有关浏览器支持,请参阅http://caniuse.com/#feat=viewport-units