【问题标题】:CSS max-width with percentCSS 最大宽度与百分比
【发布时间】:2010-12-03 19:11:40
【问题描述】:

带有百分比的最大宽度似乎在 IE 8 或 Firefox 3 中都不起作用。特定的像素宽度可以正常工作。我错过了什么吗?

我有一个输入表单,我想在它的右侧显示一些解释性文本。但我不希望解释性文本挤压表单。

我以前没有使用过 max-width,但它似乎是一个很好的解决方案。我写了这个简单的 CSS 样式:

div.hint {max-width: 50%; float: right;}

然后我写道:

<div class=hint>... hint text</div>
<form action=xxx method=post>
... etc ...

div.hint 将表单严重压向左侧。

我只用了一些文本而不是表单来尝试这个。 div.hint 占据了大约 95% 的屏幕,只是在左边留了一个小边距,然后其他文本被完全推到它下面。

如果我将最大宽度从百分比更改为固定像素数,它似乎可以工作。但我不想以像素为基础,因为我不知道用户浏览器的尺寸。

尽管我在文档中阅读了这些内容,但百分比不适用于 max-width,还是我遗漏了什么?


针对 Seanmonster 的评论:在这里,我将提供一个简单但完整的网页,说明我认为应该可行但不可行的内容:

<html><title>Max width test</title>
<style>
.form {max-width: 75%; float: left;}
.hint {max-width: 50%; float: right;}
</style>

<div class=hint>
<p>Fourscore and seven years ago our forefathers brought forth on this continent a new nation, conceived in liberty and dedicated to the proposition that
all men are created equal. We are now engaged in a great civil war, testing whether that nation, or any nation so conceived and so dedicated,
can long endure. We are met on a great battlefield of that war. We have come to dedicate a portion of that field as a final resting place
for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this. Etc.
</div>
<div class=form>
<table>
<tr><th>Label 1 <td>Value 1
<tr><th>Label 2 <td>Value 2
<tr><th>Label 3 <td>Value 3
</table>
</div>
</html>

当我在浏览器中打开此页面时,我得到的不是两列,而是“提示”div 占据了 100% 的宽度,而在其下方,“表单”div 占据了 100% 的宽度。如果我将最大宽度都更改为“宽度:50%”,我会得到两列,如我所料。显然我错过了关于 max-width 应该如何工作的一些信息,但是......我不明白。

【问题讨论】:

  • 根据您提供的信息,您的问题应该不存在。也许你可以给我们一个例子的链接,这样我们就可以看到它在野外发生。
  • 我在 Mac 和 PC 上打开了 FF3.5.3 中的示例代码,它运行良好。我确实得到了您在 IE 7 中描述的行为,并且没有 8 可供测试。
  • @Emily:在发布之前,我只用 IE 8 尝试了上面的示例。我会相信你的话,它适用于 Firefox。但是我尝试了其他类似的示例,但在 Firefox 中同样失败了,因此显然它们并不能完全避免这里的根本原因。无论如何,我真的想要至少适用于 IE 7、IE 8 和 Firefox 3 的东西,因为它们可能是最流行的浏览器。

标签: html css


【解决方案1】:

最大宽度在 FF3 和 IE8 中使用百分比效果非常好。但是,百分比基于父宽度。不是周围的孩子。

【讨论】:

  • 为获得最佳效果,请确保父宽度为静态值。
  • 孩子在身边吗?这真的没有意义......你是说兄弟姐妹吗?
【解决方案2】:

IE8 上的 max-width 在多种情况下都有问题。这是一个已知问题。

您可以在此处找到有关它的文章。 http://edskes.net/ie8overflowandexpandingboxbugs.htm

你需要三个东西来触发这个错误 - 最大宽度、滚动条和浮动

【讨论】:

  • 正如 seanmonstar 所说,您也需要对外部元素感到厌倦。在过去(ie-7),如果你有 100% 的宽度,它会尽可能地扩大。在新时代,元素的默认值是空,这意味着您需要每个周围元素也具有 100% 的宽度;这不是假设的。
  • 我认为该错误发生在比该帖子所指出的更多情况下,因为我已经得到它,例如,尝试使用两列表而不是使用浮点数来执行这些操作。但是谢谢:知道这是一个已知的错误,而不仅仅是我快疯了并不能解决问题,但至少告诉我要寻找一个完全不同的解决方案。
  • @Diadem:在我的一个测试用例中,我确实尝试将父元素的宽度设置为 100%,但没有帮助。当然有可能通过正确的设置组合它会起作用,而我只是没有想到这一点。嗯,我想在新的浏览器版本出来之前我会放弃 max-width。
  • @Jay:IE8 有一个作弊修复。您所要做的就是将以下代码添加到您的标题之前的 head 标签 - 这将使所有 ie8 页面的行为大多类似于 IE7并且应该完全消除您遇到的问题。它对firefox问题没有多大作用,但它会让你的生活更轻松。有一些原生 IE8 风格的错误非常糟糕,它们会导致整个浏览器崩溃。
【解决方案3】:

如果您要浮动 div.hint 并将两者都放在左侧,并且让它们都具有 50% 的最大宽度,它们不应该相互挤压。

<div>
  <div class="form" style="float:left; max-width:50%">
    <form></form>
  </div>
  <div class="hint" style="float:left; max-width:50%">
  </div>
</div>

【讨论】:

  • 嗯,我试过了。第一个 div 获得 100% 的屏幕宽度并位于顶部;第二个 div 位于屏幕宽度的 100% 下方。就像完全忽略了最大宽度一样。如果我将“最大宽度”更改为“宽度”,那么它可以工作,当然宽度是固定的而不是可变的。
猜你喜欢
  • 2018-08-21
  • 2013-08-23
  • 2018-01-06
  • 2012-09-05
  • 2013-11-01
  • 1970-01-01
  • 2012-02-15
  • 2016-07-15
  • 2012-02-20
相关资源
最近更新 更多