【问题标题】:CSS div postion absolute with variable height to expand container具有可变高度的 CSS div 绝对位置以扩展容器
【发布时间】:2015-04-04 00:36:23
【问题描述】:

我已经搜索并查找了几篇与我的问题相似的帖子,但是我没有找到让我更接近解决方案的答案。

所以我对 DIV 设置有点卡住,我有一个围绕两个 DIV 的容器。第一个 DIV 将有一个徽标,该徽标应始终位于左上角(定位那个相对)。现在第二个 DIV 应该总是从容器的右下角开始,有一些可变的 Text(定位那个绝对值)。

如果第二个 DIV 中的文本很短,一切都很好,但是如果文本变得越来越大并且比徽标大,那么文本将增长到容器顶部之外。

如果文本变大,我的目标是容器随着绝对 DIV 的增长而增长。

我已经设置了一个小小提琴来告诉你我的问题。

[jsfiddle.net/jb3drnb0][1]

我错过了什么?

【问题讨论】:

  • 看看我的回答是不是你想要的?

标签: html css


【解决方案1】:

非常感谢您的所有建议。这让我对这个问题有了不同的看法。我尝试了浮动,它很接近但并不完美。 Sidd 对 Javascript 的建议终于让我尝试了 CSS Calc 函数并使用带有 Width-Parameter 的 Inline-Blocks,并使用 text-align 和 vertical-align 来实现我想要的。

所以这里有一个更新的fiddle 给所有感兴趣的人。 :)

.container { position: relative; height: auto; border: 1px solid #00f; overflow: visible; }

.left { display: inline-block; width: 160px; height: auto; vertical-align: top; }

.right { display: inline-block; height: auto; width: calc(100% - 170px); vertical-align: bottom; text-align: right; }

【讨论】:

  • 虽然这在您的场景中有效,但它不能解决帖子主题中的问题,因为该解决方案不再使用 display: absolute :-(
  • 您可以轻松地将display: absolute 与我的代码一起使用,您只需在容器中添加位置和宽度即可。查看此fiddle 以查看示例。然而,现在使用 Flexbox 是一种更容易的解决方案。
【解决方案2】:

看看这个fiddle CSS:

.container {  height: auto; border: 1px solid #00f; overflow: visible; }

.left { float: left; height: auto; }

.right { float: right; bottom: 0px; right: 0px; padding-left: 160px; height: auto: }

html:

<div class="container">
    <div class="left">
        ******************<br/>
        **** TESTTEXT ***<br/>
        ******************
    </div>
    <div class="right">
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
    </div>
    <div style="clear:both;"></div>
</div>

【讨论】:

    【解决方案3】:

    因为你已经设置了属性 height:auto。将其替换为例如 250px 并检查它 代码:

    height : 250px;
    

    替换为:

    height : auto;
    

    【讨论】:

    【解决方案4】:

    绝对定位的元素不会将其高度赋予父元素容器。所以用纯 CSS 是不可能的,因为你必须知道 .left 的宽度(给 .right 那个大小的左填充 - 这也需要浮动两个内部 div)或 @987654323 的高度@(因此您可以将其分配给.container)。

    但如果您可以选择使用 Javascript,这很容易做到:

        var ht = document.querySelector('.right').getBoundingClientRect().height;
        document.querySelector('.container').style.minHeight = (ht+10)+"px";
    

    这里我计算.right渲染后的高度,给.container一个比那个高10px的高度。

    【讨论】:

    • 我试过了,但对我没有用 - 但如果你有一个有效的示例或代码,我很乐意看到它并纠正我的答案!
    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 2014-06-19
    • 2023-03-22
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多