Dwa*_*yne 10 html javascript css html5 wysiwyg
我正在为CMS构建一个html/javascript主题设计器.元素绝对定位并且可以通过鼠标移动/调整大小,和/或包含可编辑的文本,其高度可以由行数确定.但是我遇到的问题是父元素的高度不会扩展以包含其绝对定位的子元素.
最小的代码(也在JSFiddle上):
<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>
Run Code Online (Sandbox Code Playgroud)
一个纯CSS的解决方案是理想的,我不关心旧的浏览器.但我主要是寻找任何方法来防止需要javascript在每个页面上运行使用创建的主题来设置它们的高度(因为具有相同主题的页面可能具有不同的文本量).
已经有一些类似的问题,但他们接受的答案(例如不使用绝对定位)在我的情况下不起作用.除非有办法让多层可拖动/可调整大小的元素没有位置:绝对.
Dwa*_*yne 19
我发现了一个纯粹的css解决方案!综上所述:
JSFiddle在这里或代码如下:
<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>
Run Code Online (Sandbox Code Playgroud)
绝对定位的元素从流中删除,因此被其他元素忽略
唯一的方法是将子位置设置为position:relative,这样就可以使用right,left,top和bottom来移动子位置,并将父显示更改为display:inline-block