上周,我们在其中一篇文章的评论线程中进行了一次有趣的讨论,模态框样式的注意事项。
您可能希望限制模态框的宽度,对吧? 在较大的屏幕上,这会让它看起来更像一个“模态框”。假设 600px 正好合适。但是,您需要确保它不会超出其父元素的范围。例如,避免在移动屏幕上出现水平滚动。
您将如何做到这一点?
width: 600px; max-width: 100%;
width: 100%; max-width: 600px;
答案是:实际上没什么区别,它们的效果相同。
一些人的 反应
- 第二种方式“更正确”
- 实际上差异很大
- 第二个在较窄的父级宽度下会更友好
- 第一个是垃圾
- 第二个以更合乎逻辑的方式描述了行为
我同意这有点令人费解。它们看起来应该有所不同。 一个简化的测试用例 始终是一个好主意。

您可以这样考虑:**如果元素的渲染宽度超过了 `max-width` 指定的宽度,则 `max-width` 会生效。**
场景
- 父元素宽度为 1000px
- Width 指示元素宽度应为 600px。这没有违反 max-width 规则,因此宽度为 **600px**!
- Width 指示元素宽度应为 1000px。这违反了 max-width 规则,因此强制元素宽度降至 **600px**。
- 父元素宽度为 320px
- Width 指示元素宽度应为 600px。这违反了 max-width 规则,该规则规定元素宽度最多只能为 320px,因此宽度为 **320px**!
- Width 指示元素宽度应为 320px。这没有违反 max-width 规则,因此宽度为 **320px**!
无论父元素是更宽还是更窄,这些不同的规则集最终都会相互一致。(尽管当它们是弹性项目时存在差异。)
我想补充一点:当可以用两种不同的方式完成相同的事情时,请为您的代码库记录标准方式并坚持使用它。在这种情况下,一致性胜过灵活性,并减少了以后出现的错误。
我每天都在做这个,但从未注意到。我想我将“max-width”视为一种例外情况。例如,宽度为 90%,但最大不超过 1200px(max-width)。
我一直使用 max-width: 700px; width: 100%; 因为它看起来更直观,然后我发现了为什么 Firefox 上的某些图像行为如此奇怪,而且似乎 Firefox 仅在 max-width: 100%; 和例如 width: 700px; 的情况下才能正确渲染图像。
所以看起来确实有区别。
正如我所说,第一种方式看起来更直观。无论如何,max-width: 100%; 的有效性很好,因此在您拥有大量固定宽度的旧网站上,您可以尝试应用全局 max-width: 100% 规则以使其具有响应性;)
我觉得这篇文章的最后一句话真的应该更加强调。当然,这是一个有趣的事情,但说它们可以互换是不好的建议。
这是一篇不错的文章。谢谢!
我倾向于“移动优先”的思维方式,因此对我来说,首先考虑较小分辨率下的宽度并将其限制在较大分辨率下更直观。因此,我将以 `width: 100%;` 开头并设置 `max-width: 600px;`。
不错。感谢澄清。
正如您上面所写,实际上没什么区别,但对我来说,第二个感觉更直观——“保持元素宽度为 100%,最大为 600px”。无论如何,感谢撰写这篇文章。
不错。
我必须同意上面大多数其他评论者的观点——第二点似乎是编写(以及理解)代码的更好方式!
Thoman
只要这是关于具有 display: block 的元素,第二个场景就不一定需要 width: 100%。
编写更少的代码;)
这是一个很棒的入门教程,谢谢。如果您对一些非常有趣的宽度声明交互感兴趣,请查看 Rémi Parmentier 用于无媒体查询响应式设计的 Fab Four 技术: https://medium.freecodecamp.com/the-fab-four-technique-to-create-responsive-emails-without-media-queries-baf11fdfa848 。
通常会对这种东西感到困惑
感谢您的解释和视频示例,它将帮助许多极客:)
Lev Boer 指出文本区域的一个奇怪现象,其中交换 max-width 和 width 的值不会导致相同的结果