【问题标题】:Issue with CSS min-width and max-widthCSS min-width 和 max-width 的问题
【发布时间】:2015-12-10 23:10:05
【问题描述】:

我有一个类似example demo 的无序列表

li {
  display: block;
  border: 1px solid lightCoral;
  list-style: none;
  padding: 4px 6px;
  margin: 5px;
  width: 150px;
  min-width: 120px;
  max-width: 250px;
}
    
li:last-child{
  width: 200px;
}
<ul>
  <li> first item </li>
  <li> second item very long content </li>
  <li> third item </li>
  <li> This is 200px wide</li>
</ul>

我希望li 项目至少为120px 宽,最多为250px。如果我不设置宽度,他们会自动将其设置为max-width。但是如果我像在演示中一样将它设置为150px,那么为什么第二个没有得到它的最大允许宽度,即250px,即使它的内容不适合一行?

我有什么遗漏吗?这可以用纯 CSS 完成吗?

【问题讨论】:

    标签: html css


    【解决方案1】:

    默认情况下,div 占用其父级宽度的 100%。所以它需要max-width

    为了完成你想要的,浮动它们并清除两边:

    li {
      display: block;
      float: left;
      clear: both;
      border: 1px solid lightCoral;
      list-style: none;
      padding: 4px 6px;
      margin: 5px;
      min-width: 120px;
      max-width: 250px;
    }
    li:last-child {
      width: 200px;
    }
    <ul>
      <li>first item</li>
      <li>second item very long content</li>
      <li>third item</li>
      <li>This is 200px wide</li>
    </ul>

    【讨论】:

    • 天哪...我们用花车彻底杀死布局的那一天将诞生新一代,小猫会最快乐。
    【解决方案2】:

    如果您将&lt;li&gt; 内容包装在&lt;div&gt; 容器中,您想要的行为是可能的。然后,您可以将 &lt;div&gt; 容器 inline-blockwidth: auto; 一起制作,以便它们不符合具有相同长度的要求,因此您可以在列表元素周围获得边框框,由它们的内容确定,如 sn 所示-p 下面。

    li {
      list-style: none;
      margin: 5px;
    }
    
    li > div {
      display: inline-block;
      border: 1px solid lightCoral;
      width: auto;
      padding: 4px 6px;
      min-width: 120px;
      max-width: 250px;
    }
        
    li:last-child > div{
      width: 200px;
    }
    <ul>
      <li><div> first item </div></li>
      <li><div> second item very long content </div></li>
      <li><div> third item </div></li>
      <li><div> This is 200px wide</div></li>
    </ul>

    【讨论】:

      【解决方案3】:

      display: table属性可以用来达到你想要的效果。如果不设置宽度,则元素沿内容的长度延伸,否则为margin、border、padding、width的宽度之和。

      li {
          display: table;
          border: 1px solid lightCoral;
          list-style: none;
          padding: 4px 6px;
          margin: 5px;
          width: auto;
          min-width: 120px;
          max-width: 250px;
      }
      li:last-child{
          width: 200px;
      }
      <ul>
        <li>first item</li>
        <li>second item very long content</li>
        <li>third item</li>
        <li>This is 200px wide</li>
      </ul>

      【讨论】:

      • 您提供的代码可能会解决问题,但请添加简要说明,说明如何解决问题。欢迎来到 Stack Overflow,推荐阅读How to Answer
      • 显示:表格;属性是正确展示的基础。如果不设置宽度,则元素沿内容长度延伸,否则为margin、border、padding、width的宽度之和。
      • 感谢更新,我已将您的文字添加到您的答案中。如果您查看帖子的左下角,则可以编辑帖子。
      【解决方案4】:

      这是因为您将width 设置为150px。如果您删除 width 属性或为其赋予 auto 值,那么它将按预期工作。当然,所有的项目都会得到其中最长的宽度:updated demo

      li {
          display: block;
          border: 1px solid lightCoral;
          list-style: none;
          padding: 4px 6px;
          margin: 5px;
          width: auto;
          min-width: 120px;
          max-width: 250px;
      }
      

      【讨论】:

      • 这会将它们全部设置为 250px,除非另有说明。
      • 这不好。我写道,如果我省略width: 150px,它会将其设置为max-widthwidth: auto 也一样。试试这个jsfiddle.net/okbu83mc/3 如果内容足够小,我不希望我的列表项具有最大宽度。
      【解决方案5】:

      这不是问题,是display: block 元素的正常行为。如果您需要宽度为内容的宽度,您可以创建 display:inline-blockfloat:left; clear:both 以避免堆栈问题

      li {
        display: inline-block;
        border: 1px solid lightCoral;
        list-style: none;
        padding: 4px 6px;
        margin: 5px;
        width: auto;
        min-width: 120px;
        max-width: 250px;
        clear:both;
        float:left;
      }
          
      li:last-child{
        width: 200px;
      }
      <ul>
        <li> first item </li>
        <li> second item very long content </li>
        <li> third item </li>
        <li> This is 200px wide</li>
      </ul>

      【讨论】:

        【解决方案6】:

        这里是更新的解决方案fiddle

        你的 CSS

        li {
           display: block;
           float: left;
           clear: both;
           border: 1px solid lightCoral;
           list-style: none;
           padding: 4px 6px;
           margin: 5px;
           min-width: 120px;
           max-width: 250px;
        }
        

        你的 HTML

        <ul>
           <li> first item </li>
           <li> second item very long content </li>
           <li> third item </li>
           <li> This is 200px wide</li>
        </ul>
        

        【讨论】:

          【解决方案7】:

          如果主width 大于max-width,则默认未设置max-width 供您参考,然后应用max-width

          li {
            display: block;
            border: 1px solid lightCoral;
            list-style: none;
            padding: 4px 6px;
            margin: 5px;
            width: 300px;
            min-width: 120px;
            max-width: 250px;
          }
              
          li:last-child{
            width: 200px;
          }
          <ul>
            <li> first item </li>
            <li> second item very long content </li>
            <li> third item </li>
            <li> This is 200px wide</li>
          </ul>

          【讨论】:

            【解决方案8】:

            您应该将 width 设置为 auto

            width: auto;

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-18
              • 1970-01-01
              • 2013-12-01
              • 1970-01-01
              • 2013-02-22
              • 2018-06-16
              相关资源
              最近更新 更多