【问题标题】:CSS responsive div, when height is set in pixelsCSS 响应式 div,当高度以像素为单位设置时
【发布时间】:2014-11-14 05:59:15
【问题描述】:

我有一个容器 div,它的高度以像素为单位——例如:height:500px。此 div 包含的任何内容都使用% 进行响应,并完美地保持纵横比。但是当然,当我调整浏览器窗口的大小使其更小时,唯一保持相同高度的 div 是容器 div。我怎样才能使它响应 - 当它具有以像素为单位的给定标准高度时更改容器 div 的高度?非常感谢您提供的任何解决方案。

我在这里做了一个简单的例子:http://jsfiddle.net/5j9jddbk/

【问题讨论】:

  • 您可以移除高度,让高度由内部元素设置。您还可以根据内容宽度设置高度。您是否有父元素的最大宽度,即容纳容器的那个?
  • @skobaljic 是的,我知道我可以移除高度,但我希望用户有这个选择。在我正在测试包含 div 的父元素的情况下,它正在使用 100% 的完整浏览器宽度。
  • 了解媒体查询,它们允许您根据设备(以及屏幕分辨率)应用 CSS。
  • 这是你的答案 - 这对我来说非常特别,是我所有响应式工作的基础:mademyday.de/css-height-equals-width-with-pure-css.html
  • 这个 div 在 100% 的窗口宽度内有多少空间?问题是:这个 div 什么时候开始变小?一定是在某个时候。

标签: css responsive-design


【解决方案1】:

This link完美地描述了它。

您需要找到所需元素的纵横比。在您的情况下,它似乎是 640 x 200,这使您的纵横比具有 62.5% 的百分比。 (我之所以这么说是因为您使用的背景图片是 640x200)

使用提供的链接中的代码,您只需要给容器一个宽度,添加一个伪元素:before 给它,然后给:before 一个padding-top62.5%。然后你需要把你的容器绝对放在里面。

所以你的容器需要一些东西。首先,当你有填充或边框要处理时,使用box-sizing:border-box;,然后给它一个relative的位置

.container {
    width:100%;
    border:10px solid red;
    position:relative;
    box-sizing:border-box;
}

之后,您需要为其添加一个:before 伪元素。这将采用其容器的给定宽度(即 100%)并使用 padding-top 使高度成为宽度的比率:

.container:before {
    content:"";
    display:block;
    padding-top:62.5%;
}

之后,您只需要确保您的内容位于 absolute 并且是 100% 的宽度和高度。

.inner
{
    width:100%; height:100%;
    background:url('http://p1.pichost.me/640/1/1236135.jpg') no-repeat;
    -webkit-background-size:100%;
       -moz-background-size:100%;
         -o-background-size:100%;
            background-size:100%;
    text-align:center;
    font-size:40px; color:#fff;
    position:absolute;
    top:0;
    left:0;
}

这是小提琴演示 http://jsfiddle.net/bcbvLLrc/

我的建议是在您的容器内创建另一个名为 .content 的 div,然后将这些样式赋予内容:

.content {
    width:100%;
    height:100%;
    position:absolute;
    top:0;
    left:0;
}

这将确保内容是容器的完整大小,然后您可以根据需要设置内容中的任何样式,例如,您可以在内容中放置额外的列或行,而不必担心任何溢出任何地方。

【讨论】:

  • 哇,这很智能,你是怎么计算纵横比的?哇,这太疯狂了!
  • 谢谢!我所做的只是找到宽度和所需的高度。在您的情况下,您使用的图片是 640x400。只需将 400 除以 640。400/640 = 0.625 乘以 100 从小数到百分比 = 62.5%
  • 我很惊讶。这是天才的东西。一旦我希望用户选择容器的高度,我将创建一个 php 函数来进行此计算并动态设置.container:before{padding-top:###}。我希望我会工作!否则我将不得不找到你并再次问你:-)
  • @durduvakis 这是个好主意!我认为你可以很好地完成这项工作。如果您再次需要我,请回到这里并对我的回答发表评论。
  • 只是来告诉你它工作得很好:-) 里面的所有内容都很完美,没有额外的.content div。再次感谢。
【解决方案2】:

这是一种解决方案,您可以根据父元素的宽度设置高度:

<div class="wrapper">
    <div class="container">
        <div class="inner">resize me..
            <br>..make me smaller</div>
    </div>
</div>

和 CSS:

.wrapper {
    width: 100%;
    max-width: 980px;
    margin: 0 auto;
}
.container {
    padding-bottom:51%;
    position: relative;
    border:10px solid red;
    box-sizing: border-box;
    /* Because of border */
    background:url('http://p1.pichost.me/640/1/1236135.jpg') no-repeat;
    background-size:100%;
    text-align:center;
    font-size:40px;
    color:#fff;
}
.inner {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    right: 0;
    width: 100%;
}

Fiddle

以百分比为单位设置元素的内边距或外边距直接指父元素的宽度。 Read more...

【讨论】:

  • 这是一个很好的解决方案。我也会用这个。我可以为这两个答案投票吗? :D
猜你喜欢
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多