如何将最大宽度设置为百分比和像素?

Posted

技术标签:

【中文标题】如何将最大宽度设置为百分比和像素?【英文标题】:How to set a max-width as percent AND pixels? 【发布时间】:2015-08-11 11:09:12 【问题描述】:

如何防止 div 的宽度扩大到超过一个百分比和一个像素?也就是说,浏览器应该计算百分比的像素值,然后选择两个值中较低的一个。

如果我像这样设置它们:max-width:100px;max-width:20%; 资产管道将简单地选择第二个并忽略第一个。

【问题讨论】:

@dwreck08 我想,但如果这不能用纯 CSS 完成,我会感到惊讶。 @Juhana 的回答是正确的方法,但如果你真的需要最大宽度,你可以使用媒体查询 【参考方案1】:
width:20%;
max-width:100px;

这会将宽度设置为 20%,但上限为 100 像素。

【讨论】:

-1,这并不能回答实际问题。我想它在 OPs 案例中有效,但问题是:这个答案中 percent 中的max-width 在哪里?相反,答案只是定义了一个width,这是不同的。 @Zelphir 我不太明白你的评论; OP 特别想将宽度设置为 20% 或 100px,以较小者为准,这正是这样做的。 这与设置两个最大值并选择其中的最小值不同。如果内容没有填满 parent20%,您仍然需要将 element 设置为 20% 宽,虽然这可能不是必需的或不想要的.如果px% 都有最大宽度,则不会出现这种行为。 @Zelphir 引用问题:“换句话说,浏览器应该计算百分比的像素值,然后选择两个值中的较低值。”如果父宽度为 1000px,则“百分比的像素值”为 1000px * 20% = 200px。然后“两个值中的较低值”是 200px 与 100px。 Juhana 的答案是正确的! @Zelphir 问题很清楚,与标题不冲突,但这个答案确实不正确。实际上,OP 写道,浏览器应该选择两者中的最小值,但暗示这个值应该成为最大宽度,而不是宽度。我猜目前的方法是使用 CSS Grid 布局和minmax() 函数。【参考方案2】:

实现这一点的一种方法是简单地使用两个 div

<div class="outer">
  <div class="inner">
    This content will not exceed 100px or 20% width.
  </div>
</div>

<style>
.outer 
  max-width: 90%;

.inner 
  max-width: 100px;

</style>

【讨论】:

【参考方案3】:

这将适用于不同的图像尺寸/纵横比。如果您知道图像的大小,您可以分别定义 max-widthmax-height。将此方法用于特定的图像组,但不作为一般规则。

实际示例:您将手机中的 5 张照片放置在一个页面中,并且您需要在屏幕的另一半部分显示一些文字。您将图像的大小减小到 500 像素宽和 300 像素高。您希望它们不超过屏幕的一半,并且在平板电脑上不超过 250 像素。计算最大高度:250*300/500=150px。

.img-class 
    max-width: 50%;

@media (max-width: 800px) 
    .img-class 
       max-height: 150px;
    

在最新的 Chrome、Firefox 和 IE 上测试。

【讨论】:

【参考方案4】:

我遇到了一个需要类似解决方案的具体问题。我需要以原始大小显示所有图像(与纵横比、位置或额外的 html 标记无关),最多以像素为单位设置最大宽度。如果屏幕小于这个固定尺寸,它应该缩小以适应。 IE。设置 width 将无法满足要求。

扩展@Kiaurutis 的回答:

img 
  max-width: 400px;


@media (max-width: 400px) 
  img 
    max-width: 100%;
  

可以在这里看到一个工作示例:https://jsfiddle.net/vrehxmpx/。在这个例子中,有一个大于 400px 的图像(总是按比例缩小)和一个小于阈值的图像(只有在屏幕小于图像时才按比例缩小)。

要调整图像上的边距、边框和其他内容,只需增加@mediamax-width

【讨论】:

【参考方案5】:

您现在可以使用 css min。但是你应该注意IE不支持它。

width: min(20%, 100px)

https://developer.mozilla.org/en-US/docs/Web/CSS/min()

【讨论】:

有关浏览器支持的更多信息,另请参阅caniuse.com/css-math-functions【参考方案6】:

不要这样做。

我相信所选答案对于 OP 描述的场景是正确的。但是,一些 cmets 认为 OP 要求将max-width 属性设置为两个值中的较低值,而不是width。这也是可以的,请看下文。

注意:这个解决方案对我来说没有多大意义。请使用选定的答案,它正确演示了 max-width 的用途。下面的代码将确保 max-width 属性是 20% 或 100px 中的较小者。

img 
    max-width: 20%;


@media (min-width: 500px) /* at 500 pixels, 20% of the width will be 100px */
    img 
        max-width: 100px;
    

【讨论】:

【参考方案7】:

我的网站上的“页面换行”宽度相同。我希望它默认为 95% 宽度,但不超过 1280 像素。这是我使用 CSS 制作的方法

.wrapmax-width:95%;margin:0px auto;
@media screen and (max-device-width:1280px),screen and (max-width:1280px).wrapmax-width:1280px;margin:0px auto;

【讨论】:

以上是关于如何将最大宽度设置为百分比和像素?的主要内容,如果未能解决你的问题,请参考以下文章

如何将最大宽度设置为百分比或静态值

像素边框和比例宽度

如何将表格样式设置为容器的全宽并使单元格使用宽度的百分比?

移动布局之流式布局

如何获取html元素的宽度并将像素转换为百分比[关闭]

流体宽度不起作用