【问题标题】:max-width doesn't seem to work for absolutely positioned div using translatemax-width 似乎不适用于使用 translate 的绝对定位的 div
【发布时间】:2020-06-11 18:16:41
【问题描述】:

我有一个绝对定位的 div,它使用translate 水平和垂直对齐。我的代码的问题是 max-width 似乎不适用于这个 div。它总是小于我为max-width 设置的值。其实我也想让 div 响应,所以不能使用width 属性,否则会出现水平滚动条。我还尝试了width:100%max-width:500px,但仍然没有运气。如何强制 max-width 工作以使 div 能够响应?

目标

  1. Div 必须像现在使用 absolutetranslate 一样保持水平和垂直居中对齐
  2. 当浏览器窗口宽度大于此值时,Div 必须拉伸到 max-width 值,即 500 像素。
  3. 当浏览器窗口缩小时,Div 宽度必须减小以适应浏览器宽度 - 这将使我的 div 响应。

这是我的代码/演示:

.center {
  border:1px solid red;
  max-width:500px;
  height:150px;
  position:absolute;
  top:50%;
  left:50%;
  -ms-transform:translate(-50%, -50%);
  -webkit-transform:translate(-50%, -50%);
  -o-transform:translate(-50%, -50%);
  -moz-transform:translate(-50%, -50%);
  transform:translate(-50%, -50%);
  text-align:center;
}
<div class="center">This div is horizontally & vertically center aligned.<br />The text is also horizontally center aligned.</div>

更新

每个人都在这里建议我无用且不相关的解决方案。请尝试通过以下图片理解问题:

仅使用 width:500px 时:

仅使用 max-width:500px 时:

同时使用 max-width:500px 和 width:100% 时:

问题:即使我同时使用 max-width:500px 和 width:100%(请参阅水平滚动条),div 也不会保持响应:

【问题讨论】:

  • 使用宽度和溢出:隐藏
  • 我认为只要我们使用 translate 将 div 居中对齐,就没有人能够修复它。我可能必须切换到具有绝对位置的 -ve 边距。
  • 请看我的更新。

标签: html css


【解决方案1】:

最大宽度可防止超出您指定的范围,但您可以与 & max-width 混合搭配以获得最佳效果

对我来说,如果我拉伸浏览器宽度,最大宽度是可以的。它也停在宽度 502px 处。为什么是 502?因为 500px + 1px(2 次)= 502。

更新 这个位置给你带来了困难,因为 position=absolute 试图占据整个视口(屏幕)空间。这比您要显示的 div 的空间大。我还将宽度缩小到 98%,因为如果您使用 100%,则不会显示边框。记住边框没有考虑到全尺寸。看上面。祝你有美好的一天!

.center {
  border:1px solid red;
  width:98%;
  max-width:500px;
  height:150px;
  position:fixed;
  top:50%;
  left:50%;
  -ms-transform:translate(-50%, -50%);
  -webkit-transform:translate(-50%, -50%);
  -o-transform:translate(-50%, -50%);
  -moz-transform:translate(-50%, -50%);
  transform:translate(-50%, -50%);
  text-align:center;
}
<div class="center">This div is horizontally & vertically center aligned.<br />The text is also horizontally center aligned.</div>

【讨论】:

  • 这里绝对没有什么用处。
  • 感谢您的客气话。宽度的问题在于,在 CSS 中,百分比是基于它们的父级宽度、长度等...所以如果你试图填充整个空间(与其父级相同),我建议你删除绝对位置。您可以使用 fixed 或将其保留为默认值(继承)。
  • 我不是故意冒犯你的。无论如何,如果我删除绝对位置,那么我的 div 将不会保持居中对齐,这是此设计的主要要求。
  • 你用的是固定位置吗?就像我上面的sn-p一样? div怎么了,它出现在错误的地方?也许问题来自父母的div。或任何包裹在您的 div 周围的容器。你想分享更多的上下文吗?谢谢
【解决方案2】:

max-width 不能单独工作,它需要基于 Width

.center {
  border:1px solid red;
  max-width:500px;
  width:100%;
  height:150px;
  position:absolute;
  top:50%;
  left:50%;
  -ms-transform:translate(-50%, -50%);
  -webkit-transform:translate(-50%, -50%);
  -o-transform:translate(-50%, -50%);
  -moz-transform:translate(-50%, -50%);
  transform:translate(-50%, -50%);
  text-align:center;
}
<div class="center">This div is horizontally & vertically center aligned.<br />The text is also horizontally center aligned.</div>

【讨论】:

  • 抱歉,新的贡献者在仔细阅读和理解问题之前总是仓促回复。您刚刚为我提供了我自己的解决方法,我已经尝试过并且在我的问题中也明确提到过。调整浏览器窗口大小,你会看到缺陷!
  • 我明白你的意思 - 谢谢你让我知道:)。您是否有任何理由使用此方法进行垂直和水平对齐,或者这只是一个练习?为什么不使用 flexbox 或网格?还要在 CSS 中查找 min()、max() 和 clamp()
  • 我希望你已经看到我的更新。正如我在上面的评论中所说,如果我当前的代码无法修复,我可能不得不切换到 -ve 边距和绝对值。其实我只是想通过保持翻译方法来解决这个问题。就是这样!
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 2018-02-07
  • 2017-07-08
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多