javascript - 扩展高度以包括绝对定位的 child

标签 javascript css html wysiwyg

我正在为 CMS 构建一个 html/javascript 主题设计器。元素是绝对定位的,可以通过鼠标移动/调整大小,和/或包含可编辑的文本,其高度可以由行数决定。但是,我遇到了一个问题,即父元素的高度不会扩展以包含其绝对定位的子元素。

最小代码(也在 JSFiddle here 上):

<style>
    div.layer { position: absolute }
    div.layer1 { width: 400px; border: 1px solid #ccc }
    div.layer2 { top: 15px; left: 100px; width: 100px; border: 1px solid blue }
</style>
<div class="layer layer1">container should expand to the bottom of the child.
    <div class="layer layer2" contentEditable>Child with<br/>editable text.</div>
</div>

纯 CSS 解决方案是理想的,我不担心旧浏览器。但我主要是在寻找任何方法来防止 javascript 在使用创建的主题设置高度的每个页面上运行(因为具有相同主题的页面可能具有不同数量的文本)。

已经有一些类似的问题,但他们接受的答案(例如,不要使用绝对定位)在我的情况下不起作用。除非有一种方法可以让多层可拖动/可调整大小的元素没有position:absolute。

最佳答案

我找到了纯 CSS 解决方案!总结:

  1. 将子元素设置为 position: relative 而不是 absolute。
  2. 将它们的 margin-right 设置为它们的负宽度,使它们的有效宽度为零,并使它们 float :保持在同一条线上。这使得它们的原点都为 0, 0。
  3. 然后我们可以设置它们的 left 和 margin-top 属性,将它们绝对定位在它们的父元素中。请注意,margin-top 是必需的,而不是 top,因为 top 不会下推父元素的底部。

JSFiddle here或以下代码:

<style>
    div.layer { position: relative; float: left; }
    div.layer1 { width: 400px; border: 1px solid black }
    div.layer2 { margin-top: 20px; left: 100px; width: 100px; margin-right: -100px; border: 1px solid blue }
    div.layer3 { margin-top: 30px; left: 170px; width: 100px; margin-right: -100px; border: 1px solid red }
    div.layer4 { margin-top: 30px; left: 20px; width: 60px; margin-right: -60px; border: 1px solid green }
</style>
<div class="layer layer1" style="position: relative; display: block; width: 400px; border: 1px solid black;">
    Container
    <div class="layer layer2" contentEditable>Edit me</div>
    <div class="layer layer3">
        <div class="layer layer4" contentEditable>Edit me</div>
    </div>
</div>

关于javascript - 扩展高度以包括绝对定位的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18947691/

相关文章:

javascript - 用于全局功能的 Vue 2 Mixins

javascript - 悬停/单击/取消单击以突出显示文本

javascript - 单击单选按钮后如何自动添加颜色?

javascript - 在父数组元素上使用 if/else 在 javascript 中进行迭代

html - 如何验证特定文本存在于 Selenium IDE 的属性中

javascript - Slick.js 轮播空间太大和滑动问题

javascript - 如何从 Angular Directive(指令)中的数组中删除

html - 如何在不使用相对/绝对定位的情况下让 div 与谷歌地图重叠?

javascript - 如何将 24 小时添加到 javascript 的 datetime 对象

css - JavaFX CSS 中的 -fx-padding 和 -fx-label-padding 有什么区别?