【问题标题】:min/max width/height with multiple values具有多个值的最小/最大宽度/高度
【发布时间】:2021-04-05 01:56:56
【问题描述】:

2020 年编辑(最小值、最大值、钳位函数)

致所有通过搜索引擎来到这里的人:

CSS min / max / clamp 函数在最近的(2020 年)浏览器中得到了一些支持。你可以试试max-width: min(200px, 50%);。你可以看看这些 CSS 函数,同时注意兼容性问题。


原帖:

我想限制<div> 的宽度不超过50%并且不超过200px

也就是说,当50%小于200px时,它的行为应该和max-width: 50%一样,否则它的行为就变成max-width: 200px

如何用 CSS 定义它?
(没有min function尚不支持

<div class="some_element">Text here</div>
<style>
.some_element {
    background: red;
    float: left;
    width: auto;
    max-width: 200px;
    max-width: 50%; /* this will override previous one, but i want both of them work */
}
</style>

【问题讨论】:

  • 根据caniuse.com/#feat=minmaxwh,它有一些很好的支持(你所说的最小宽度)
  • @DouwedeHaan 是的,这个功能已经足够老了,并且得到了广泛的支持。但它只接受一个值。但我想要两个。

标签: css


【解决方案1】:

当页面宽度小于或等于 400 像素时,您可以将此期望的规则声明为最大宽度的 50%,当页面宽度大于或等于 400 像素时,您可以将其声明为 200 像素。这听起来很像媒体查询!我首先处理较小的屏幕宽度,然后覆盖较大的宽度,这就是这个 CSS:

.some_element {
  background: red;
  float: left;
  width: auto;
  max-width: 50%;
}
@media (min-width: 400px) {
  .some_element {
    max-width: 200px;
  }
}

如果您愿意,可以交换 50%200px,也可以将 min-width 更改为 max-width

【讨论】:

    【解决方案2】:

    您不能将最大宽度设置为 200 像素和 50%。您可以将该元素放在另一个最大宽度为 400px 的元素中:

    <div id="parent">
        <div id="child">Text here</div>
    </div>
    
    
    #parent {
        background-color: red;
        max-width: 400px;
    }
    #child {
        background-color: green;
        max-width: 50%;
    }
    

    【讨论】:

    • 为什么要编辑?上一个(max-width: 50%)似乎正确,但这个不正确?
    • 好吧,我把它放回去了,宽度对我来说似乎更正确;)
    • 图片怎么样?图片不适合父母,我相信。
    【解决方案3】:
    <div id="parent">
        <div id="sub">test content</div>
    </div>
    

    // css

    #parent {
        max-width: 200px;
    }
    #sub {
        width: 50%;
    }
    

    【讨论】:

      【解决方案4】:

      创建单独的类并根据outerWidth()动态添加它们

      .some_element {
              background: red;
              float: left;
              width: auto;
          }
      
          .widthClass1{
           max-width:50%;
          }
      
          .widthClass2{
           max-width:200px;
          }
      
      
          $(document).ready(function(){
             if($("textDiv").outerWidth()<400){//instead of dividing by 2 I am comparing with 400
               $("textDiv").addClass('widthClass1')
             }else{
               $("textDiv").addClass('widthClass2')
             }
          });
      

      【讨论】:

      • 使用 javascript 总能解决此类问题,就像过去的 max-width: expression(Math.min(this.parentNode.clientWidth / 2, 200) + 'px');(代码未测试)一样。但是不断更新这些元素的classListmax-width 似乎太复杂了。即当窗口调整大小时,当元素显示/隐藏时......
      • 您可以将所有这些面向宽度的 css 保存在一个函数中,也可以在 window.onresize 上执行
      【解决方案5】:

      您可以尝试如下所述

      .some_element {
          background: red;
          float: left;
          width: auto;
          width: 50%; 
          max-width: 200px;        
      }
      

      【讨论】:

      • width:auto 在这里没有意义
      • 这段代码使元素具有width: 50%,即使其内容的宽度小于50%,这不是我想要的。
      • @tsh - 那么你的问题是不正确的。因为你说你总是希望它“不超过 50%”。你需要弄清楚你真正想要什么。
      • @carl-johan.blomqvist 我想要float: left; width: auto; max-width: min(200px, 50%);。这意味着宽度是最小的(它最适合的宽度,200px,它的容器的 50%)。
      • @tsh - 我不认为你这样做。在容器为 300px 的场景下,min(200px, 50%) => min(200px, 150px) => 150px。这就是上述解决方案会发生什么?在 500px 场景中:min(200px, 50%) => min(200px, 250px) => 200px。这也是上述解决方案所发生的情况。您需要指定我认为您真正想要的更好的场景。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 2012-12-30
      相关资源
      最近更新 更多