在绝对定位的容器内保留正常的自动换行

时间:2013-02-11 19:40:23

标签: html css css-position word-wrap

我在一个相对定位的容器中有一个绝对定位的文本块。绝对定位的元素超出其容器的右边界。

问题是:文本没有正常包装;它过早地破裂而不是扩展到定义的max-width

观察到的行为:

enter image description here

所需行为

enter image description here

HTML / CSS JSFIDDLE: http://jsfiddle.net/WmcjM/):

<style>
.container {
    position: relative;
    width: 300px;
    background: #ccc;
    height: 100px;
}

.text {
    position: absolute;
    max-width: 150px;
    left: 290px;
    top: 10px;
    background: lightblue;
}
</style>

<div class="container">
    <div class="text">Lorem ipsum dolor sit amet</div>
</div>

注意:一些看似实现所需行为的改变,但这些改变并不是我想要的,包括:

  • min-width: 150px上定义.text(文字可能只是一个字,我不希望容器过大)
  • 定位.text。相对于文档,而不是.container(它需要出现在容器旁边,即使在调整浏览器大小时)

4 个答案:

答案 0 :(得分:12)

尝试在.text

上使用position: relative;

编辑:也将它放在带有自定义最大宽度

的绝对定位包装中

CSS

.container {
    position: relative;
    width: 300px;
    background: #ccc;
    height: 300px;
}

.wrap_text {
    position: absolute;
    max-width: 200px;
    top: 10px;
}

.text {
    position: relative;
    left: 290px;
    background: lightblue;
}

HTML

<div class="container">
    <div class="wrap_text">
        <div class="text">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
        </div>
    </div>
</div>

答案 1 :(得分:6)

将绝对位置更改为relative,并将.text包装在绝对定位的元素中。

http://jsfiddle.net/WmcjM/4/

.container {
    position: relative;
    width: 300px;
    background: #ccc;
    height: 300px;
}

.text {
    position: relative;
    /*min-width: 200px;*/
    left: 290px;
    background: lightblue;
}

.wrap {
    position: absolute;
    max-width: 200px;
    top: 10px;
}

答案 2 :(得分:0)

这是我可以使用的策略,当我最后测试时,它应该适用于Chrome,FF,Safari和IE11。

基本上,这个想法是欺骗浏览器认为你有宽度。以前的答案工作正常,但如果缩小父容器的宽度,您会注意到当您的内容达到该父容器的宽度时,您的内容开始换行。因此,解决这个问题的想法是使用另一个容器,该容器位于您要将内容锚定到的位置,然后根据该内容定位内容。

这里的不同之处在于我们将使用第一个定位容器来设置我们所需的最大宽度。由于该容器的高度为0,您甚至都看不到它。

JSFiddle:http://jsfiddle.net/WmcjM/252/

<强> HTML

<div class="container">
  <div class="sizing-container">
      <div class="your-text">You can put whatever you want here and you can see that the content wraps when you hit your max-width, but that max-width is actually defined as the width of the sizing container</div>
  </div>
</div>

<强> CSS

.container {
    position: relative;
    background: #ccc;
    width: 70px;
    height: 70px;
    margin-bottom: 100px;
}

.your-text {
    position: absolute;
    left: 0;
    top: 100%;
    background: lightblue;
    word-break: break-word;
}

.sizing-container {
    position: absolute;
    display: block;
    height: 0px;
    background: red;
    width: 200px; // This is your max-width!
    top: 16px;
    left: 100%;
}

.container {
    position: relative;
    background: #ccc;
    width: 70px;
    height: 70px;
    margin-bottom: 100px;
}

.monkaS {
    position: absolute;
    left: 0;
    top: 100%;
    background: lightblue;
    word-break: break-word;
}

.poggers {
    position: absolute;
    display: block;
/*     height: 1px; comment this in to see whats happening*/ 
    height: 0px;
    background: red;
    width: 200px;
    top: 16px;
    left: 100%;
}
<div class="container">
  <div class="poggers">
      <div class="monkaS">Standard shit pogchamp chatlethal</div>
  </div>
</div>

<div class="container">
  <div class="poggers">
      <div class="monkaS">P O G G E R S P O G G E R S P O G G E R S P O G G E R S P O G G E R S P O G G E R S P O G G E R S P O G G E R S P O G G E R S P O G G E R S P O G G E R S</div>
  </div>
</div>

<div class="container">
  <div class="poggers">
      <div class="monkaS">Short</div>
  </div>
</div>

<div class="container">
  <div class="poggers">
      <div class="monkaS">ReallyLongReallyLongReallyLongReallyLongReallyLongReallyLongReallyLongReallyLongReallyLongReallyLongReallyLong</div>
  </div>
</div>

答案 3 :(得分:0)

尝试使用transform: translate(x, y);代替position: absolute; left: x; top: y;