25

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

问题是:文本没有正常换行;它过早地中断而不是扩展到其定义的max-width

观察到的行为:

在此处输入图像描述

期望的行为

在此处输入图像描述

HTML/CSSJSFIDDLE: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: 150pxon .text(文本可能只是一个词,我不希望容器过大)
  • 定位.text。相对于文档,而不是相对于.container(它需要出现在容器旁边,即使在调整浏览器大小时)
4

4 回答 4

13

尝试position: relative;在 .text 上使用

编辑:也将它放在带有自定义最大宽度的绝对定位包装器中

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>
于 2013-02-11T19:48:51.797 回答
6

将绝对位置更改为相对位置,并将 .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;
}
于 2013-02-11T19:49:05.837 回答
6

尝试使用以下方法之一:

方法一: transform: translate(x, y);代替position: absolute; left: x; top: y;

方法 2: width: max-content;有关详细信息,请阅读此答案

于 2018-05-22T10:04:35.957 回答
1

这是我上次测试时可以在 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>

于 2018-04-19T03:42:16.810 回答