【问题标题】:How to define the height of a div in percentage relative to a container with a dynamic height?如何以相对于具有动态高度的容器的百分比定义 div 的高度?
【发布时间】:2023-03-25 21:38:01
【问题描述】:

我有一些像这样的简单 html:

<div id="container">
<div id="box1"><img src="images1.png" width="100%" /></div>
<div id="box2">Some text</div>
<div id="box3"><img src="image2.png" width="100%" /></div>
</div>

容器应该覆盖整个页面。我希望 box2 是容器高度的 20%。棘手的部分是 box1 和 box3 中图像的高度是相对于视口的宽度,并使容器大于浏览器窗口。

如果我只是在样式表中以百分比形式设置 box2 的高度,高度将被定义为视口高度的 20%,而不是容器高度的 20%。

有什么建议可以解决这个问题吗?

提前致谢。

【问题讨论】:

  • 你设置了位置:相对于容器吗?
  • 请同时发布您尝试过的 CSS 代码。还提供一个在线示例会很棒。
  • 好的,我做了一个 Fiddle 例子:jsfiddle.net/oyat0fud/5

标签: html css height percentage


【解决方案1】:

我相信我已经找到了解决问题的方法:Fiddle example

body, html{
width: 100%;
height: 100%;
}  
#container{
position: relative;
height: 100%;
}
#overlay{
position: absolute;
top: 0px;
border: 1px solid red;
z-index: 2;
width: 100%;
height: 100%;
}
#box1{
width: 100%;
}
#box2{
position: relative;
width: 100%;
z-index: 1;
}
#box3{
width: 100%;
}

<div id="container">
<div id="box1"><img src="image_40pct.jpg" width="100%" /></div>
<div id="box2"><img src="image_20pct.jpg" width="100%" />
  <div id="overlay">This text is shown above the image.</div>
</div>
<div id="box3"><img src="image_40pct.jpg" width="100%" /></div>
</div>

由于我知道 box1 和 box3 中图像的大小,我可以在 box2 中放置一个高度为三个图像组合总高度的 20% 的图像。然后我使用“位置:绝对”和 z-index 在该图像顶部放置一个 div,高度设置为 100%。任务完成:)

【讨论】:

    【解决方案2】:

    我做了这个Fiddle,也许你可以通过使用边距来达到20%的高度:

    #box2{
        margin-top: 10%;
        margin-bottom: 10%;
    }
    

    这样你将有 10% 的顶部和 10% 的底部,总共 20%。

    【讨论】:

    • 有趣的想法,但这不会使容器达到高度的 20%。从字面上看,这只是 20% 的利润。 .box2 的任何内部内容都会将高度增加到 20% 以上。接受你的想法,但将其调整为 .box2 padding-top:10%; padding-bottom:10%;position:relative; 然后放置一个具有 100% 宽度/高度和溢出隐藏和绝对位置的内部容器,将给出一个静态大小的 20% 高度,100%以非动态高度缩放为代价的宽度容器。取决于设计目标,我猜。小提琴更新:jsfiddle.net/L1afcbrt/1
    • @jmbertucci 对,我没有考虑大块文本的情况。如果超过 20% 的限制,文本仍然会部分隐藏。在这种情况下,您可能希望允许垂直滚动,正如您在另一个 Fiddle 中看到的那样:jsfiddle.net/gwgojvL8
    • 好评。我应该更明确地提到这一点。另外,我不知道为什么,但我们不妨将高度设置为 20%,而不是使用填充或边距。 :)
    • 我需要能够用文本填充整个框,因此无法使用填充和/或边距实现正确的大小。另请参阅我在 Fiddle 上的示例:jsfiddle.net/oyat0fud/5
    猜你喜欢
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 2016-09-16
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多