CSS中的最大值或最大值计算值

Arn*_*aud 109 css css3

有可能做这样的事情

max-width: calc(max(500px, 100% - 80px))
Run Code Online (Sandbox Code Playgroud)

要么

max-width: max(500px, calc(100% - 80px)))
Run Code Online (Sandbox Code Playgroud)

在CSS?

小智 100

现在使用媒体查询实际上可以实现'纯'css解决方案:

.yourselector {
  max-width: calc(100% - 80px);
}

@media screen and (max-width: 500px) {
  .yourselector {
    max-width: 500px;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案!我实际上已将其用于最小高度,显然您可以将媒体查询用于“ max-height”以及+1 (2认同)

Dav*_*rey 94

你不能.max()min()已从CSS3值和单位中删除.但是,它们可能会在CSS4值和单位中重新引入.目前没有针对它们的calc()规范,并且规范没有提到在calc()函数内部有效.

  • 任何时候有一个CSS问题并且响应以"你可以使用JavaScript"开头,这是不正确的.想要将所有表示代码保存在CSS中有许多正当理由.全部 - 不是最重要的. (26认同)
  • 谢谢.但是,我更喜欢纯CSS解决方案. (9认同)
  • 似乎min()和max()返回CSS值和单位模块级别4(编辑草案,2017年9月1日)链接:https://drafts.c​​sswg.org/css-values/#calc-notation (8认同)
  • 那是不可能的. (5认同)
  • 但是有解决问题的方法,请继续滚动到下面的@andy答案 (3认同)

小智 41

解决方法是使用width自己.

max-width: 500px;
width: calc(100% - 80px);
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,在上面的例子中使用min-width而不是max-width可能等同于ask-for行为. (15认同)
  • 这是一个好主意,但如果我正确理解@ Arnaud的问题,他想要'500px`或'100% - 80px`的最大宽度.即使"100% - 80px"较大,您的解决方案也会将最大宽度限制为"500px". (3认同)
  • 但它与使用`min()`相同,因此可能对其他人有帮助. (2认同)

use*_*ser 36

min(), max(),clamp()终于可以用了!

支持 Firefox 75、Chrome 79 和 Safari 11.1(clamp在 Safari 13.1 中可用)。

min()max()接受任意数量的参数。

clamp()有语法clamp(MIN, VAL, MAX),等价于max(MIN, min(VAL, MAX)).

min()并且max()可以嵌套。它们既可以在内部使用,也可以在calc()外部使用,它们也可能包含数学表达式,这意味着您可以避免calc()使用它们。

因此,原始示例可以写为:

max-width: max(500px, 100% - 80px);
Run Code Online (Sandbox Code Playgroud)

  • 新的Edge本质上是Chrome,其版本遵循Chrome的版本。完整的浏览器兼容性数据位于链接页面的[末尾](https://developer.mozilla.org/en-US/docs/Web/CSS/min#Browser_compatibility)。 (4认同)

She*_*man 9

虽然@大卫-曼戈尔德的回答以上,是“关闭”这是不正确的。
(如果您需要最小宽度而不是最大宽度,则可以使用他的解决方案)。

该解决方案表明@gert-sønderby对该答案的注释确实起作用:
答案应该使用min-width,而不是max-width

这是应该说的:

min-width: 500px;
width: calc(100% - 80px);
Run Code Online (Sandbox Code Playgroud)

是的,使用min-widthwidth来模拟max()函数。

这是Codepen(更容易在CodePen上观看演示,您可以对其进行编辑以进行自己的测试)。

min-width: 500px;
width: calc(100% - 80px);
Run Code Online (Sandbox Code Playgroud)
.parent600, .parent500, .parent400 {
    height: 80px;
    border: 1px solid lightgrey;
}
.parent600 {
    width: 600px;
}
.parent500 {
    width: 500px;
}
.parent400 {
    width: 400px;
}

.parent600 .child, .parent500 .child, .parent400 .child {
    min-width: 500px;
    width: calc(100% - 80px);
    border: 1px solid blue;
    height:60px;
}

.ruler600 {
    width: 600px;
    border: 1px solid green;
    background-color: lightgreen;
    height: 20px;
    margin-bottom: 40px;
}
.width500 {
    height: 20px;
    width: 500px;
    background-color: lightyellow;
    float: left;
}
.width80 {
    height: 20px;
    width: 80px;
    background-color: green;
    float: right;
}

.parent600 .wrong, .parent500 .wrong, .parent400 .wrong {
    max-width: 500px;
    width: calc(100% - 80px);
    border: 1px solid red;
    height:60px;
}
Run Code Online (Sandbox Code Playgroud)

也就是说,上述@andy的答案可能更容易推论,并且在许多用例中可能更合适。

另请注意,最终 a max()min()函数可能会引入CSS,但截至2019年4月,它尚未成为规范的一部分。


hua*_*tao 5

更改maxMax,你会看到肮脏的魔法

max-width: Max(500px, calc(100% - 80px)))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!你说得对。根据这篇文章:https://css-tricks.com/when-sass-and-new-css-features-collide/ _这是因为 Sass 有自己的 min() 函数,并忽略 CSS min() 函数。_ _这里的技巧是记住 Sass 区分大小写,但 CSS 不区分大小写。_ (2认同)