【问题标题】:Can't make max-width work when using absolute positioning使用绝对定位时无法使最大宽度工作
【发布时间】:2019-10-04 14:44:54
【问题描述】:

使用绝对定位时,我无法让max-width 工作。在https://jsfiddle.net/jn2bs6ax/ 中,项目的宽度应尽可能小,最大宽度为 1000 像素。但它占用了大约 50% 的宽度并包裹了文本。如何让它发挥作用?如果我将最大宽度设置为像 300 像素这样的小值,它可以工作,但任何大于它当前宽度的东西都不会导致它扩展。

这个例子只显示了一个绝对定位到中心下面一个项目的项目,但我使用transformtopbottomleftright来相对于项目在所有 4 个方向上定位事物。该解决方案应该适用于所有 4 种情况。

有一个类似的问题CSS (position:absolute + left:50% = max-width:50%)?,但答案仅适用于下方居中,但不适用于所有情况,例如定位到垂直居中的项目右侧。

<div class="relative">
  text
  <div class="absolute">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim recusandae doloribus nesciunt unde vitae quis aliquid laborum adipisci ipsa, dolorem repellendus nulla iure atque minus fuga sunt rem eaque animi.</div>
  text
</div>

css

.relative {
  position: relative;
}

.absolute {
  position: absolute;
  background-color: grey;
  max-width: 100%;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
}

【问题讨论】:

    标签: html css css-position


    【解决方案1】:

    尝试设置display: inline-table;display: table;

    .relative {
      position: relative;
    }
    
    .absolute {
      position: absolute;
      background-color: grey;
      max-width: 1000px;
      top: 100%;
      left: 50%;
      transform: translateX(-50%);
      display: inline-table;
    }
    <div class="relative">
      text
      <div class="absolute">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim recusandae doloribus nesciunt unde vitae quis aliquid laborum adipisci ipsa, dolorem repellendus nulla iure atque minus fuga sunt rem eaque animi.</div>
      text
    </div>

    【讨论】:

    • 这真的适合你吗?我已经用 inline-table 和 table 尝试过,输出与我的问题相同。
    • 看输出不一样
    • 我在这里和 jsfiddle 都试过了,它的输出是一样的。我不确定为什么我们会看到不同的东西。其他人可以尝试告诉我你看到了什么吗?
    【解决方案2】:

    尝试在任何地方沿最大宽度为您的班级添加width: 100%;

    .relative {
      position: relative;
    }
    
    .absolute {
      position: absolute;
      background-color: grey;
      max-width: 1000px;
      top: 100%;
      left: 50%;
      transform: translateX(-50%);
      width: 100%;
    }
    <div class="relative">
      text
      <div class="absolute">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim recusandae doloribus nesciunt unde vitae quis aliquid laborum adipisci ipsa, dolorem repellendus nulla iure atque minus fuga sunt rem eaque animi.</div>
      text
    </div>

    【讨论】:

    • 如果文本只包含几个单词,则框不应占用 1000 像素。这就是设置 MAX 宽度而不是宽度的重点。不幸的是,这个答案不起作用。
    • @user779159 你想要的结果是什么?你想设置 max-width:1000px 对吗?
    • 当文本排序的时候你也想申请max-width?
    • 最大宽度意味着它是最大宽度,而不是所有情况下的宽度。否则我只会设置宽度,根本没有这个问题。
    • 我不清楚您的问题和所需的输出。你能用简短的笔记或图片简要介绍一下吗?
    【解决方案3】:

    正如您已经注意到的,该问题与 left:50% 有关,它将元素的宽度限制为父元素的 50%

    克服这个问题的一个hacky方法是通过添加更多填充来增加父元素的宽度,因为绝对元素会考虑填充框。然后添加负边距以纠正添加的填充。您应该只注意溢出:

    .relative {
      position: relative;
      padding:0 50%;
      margin:0 -50%;
    }
    
    .absolute {
      position: absolute;
      background-color: grey;
      max-width: 800px;
      top: 100%;
      left: 50%;
      transform: translateX(-50%);
    }
    
    
    .hide {
     overflow:hidden;
     height:500px;
    }
    <div class="hide">
    <div class="relative">
      text
      <div class="absolute">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim recusandae doloribus nesciunt unde vitae quis aliquid laborum adipisci ipsa, dolorem repellendus nulla iure atque minus fuga sunt rem eaque animi.</div>
      text
      <div class="absolute" style="top:200px;">Lorem ipsum dolor sit amet</div>
    </div>
    </div>

    【讨论】:

    • 谢谢您知道如何使您的解决方案在使用 max-with of percent 时也能正常工作吗?所以max-width: 100% 将使绝对框的最大宽度为相对框的宽度。
    • @user779159 只需删除 max-width 并且不设置它,默认情况下它会表现得像这样;)通过添加填充/边距,我将元素的大小设置为两倍大并离开: 50% 将宽度限制为大小的一半,所以我乘以 2 除以 2。
    • @user779159 或使用max-width:50%,它将表现为max-width:100%,您只需除以二。如果你 P% 你指定 P/2%
    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2014-04-29
    相关资源
    最近更新 更多