Проблема с минимальной шириной CSS и максимальной шириной

У меня есть неупорядоченный список, например, в демонстрационном примере

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>

Ответы

Ответ 1

A 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

Поведение, которое вы хотите, возможно, если вы оберните содержимое <li> внутри контейнера <div>. Затем вы можете сделать контейнеры <div> inline-block вместе с width: auto;, чтобы они не соответствовали одинаковой длине, и, таким образом, вы получаете граничные поля вокруг элементов списка, определяемые их содержимым, как показано в фрагменте ниже.

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 может использоваться для достижения желаемого эффекта. Если вы не задаете ширину, элемент распространяется вдоль длины содержимого, в противном случае сумма ширины поля, границы, заполнения, ширины.

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>

Ответ 4

Это потому, что вы установили width в 150px. Если вы удалите атрибут width или присвоите ему значение auto, он будет работать, как ожидалось. Конечно, все элементы получат ширину самого длинного из них: обновленная демо

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

Ответ 5

Это не проблема, это нормальное поведение элементов display: block. Если вам нужна ширина ширины содержимого, вы можете сделать display:inline-block и float: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

для вашей информации max-width по умолчанию не установлено, если основной 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

Вы должны установить ширину в auto:

width: auto;