В вашем контейнере inline-block
(second
) установлено width: auto
- это означает, что его значение определяется его содержимым. То же самое относится и к плавающим элементам, которые вы поместили в них (third
):
10.3.9 'Inline-block', non-replaced elements in normal flow
Если для 'width' установлено значение 'auto', используемым значением является ширина сжатия , как для плавающих элементов .
При указании ширины
Когда вы указываете width: 200px
для third
, контейнер second
уменьшается до этого значения.
.first {
width: 100%;
text-align: center;
}
.second {
display: inline-block;
width: auto;
vertical-align: middle;
border: 1px solid red;
}
.third {
width: 200px;
display: block;
float: left;
}
img {
width: 100%;
display: block;
}
<div class="first">
<div class="second">
<div class="third">
<img src="http://via.placeholder.com/640x360">
</div>
<div class="third">
<img src="http://via.placeholder.com/640x360">
</div>
</div>
</div>
Если не указана внутренняя ширина
Теперь удалите процентную ширину для контейнера third
- ширина second
теперь равна 1280px (если ваш видовой экран меньше этого, он сжимается до доступной ширины) - разверните ниже фрагмент экрана во весь экран и проверьте second
:
.first {
width: 100%;
text-align: center;
}
.second {
display: inline-block;
width: auto;
vertical-align: middle;
}
.third {
/*width: 20%;*/
display: block;
float: left;
}
img {
width: 100%;
display: block;
}
<div class="first">
<div class="second">
<div class="third">
<img src="http://via.placeholder.com/640x360">
</div>
<div class="third">
<img src="http://via.placeholder.com/640x360">
</div>
</div>
</div>
Теперь переключитесь обратно width: 20%
для элемента third
и увидите, что он имеет точно 20% от этого значения. Это противоречит тому факту, что проценты разрешены по отношению к родительскому элементу :
.first {
width: 100%;
text-align: center;
}
.second {
display: inline-block;
width: auto;
vertical-align: middle;
}
.third {
width: 20%;
display: block;
float: left;
}
img {
width: 100%;
display: block;
}
<div class="first">
<div class="second">
<div class="third">
<img src="http://via.placeholder.com/640x360">
</div>
<div class="third">
<img src="http://via.placeholder.com/640x360">
</div>
</div>
</div>
Что теперь?
Не имеет смысла устанавливать width: 20%
, когда родительский контейнер не имеет заданной ширины. Так что я бы предложил, чтобы вы могли получить примерно такой же эффект, если бы вы могли использовать этот процент для контейнера second
:
добавить width: 40%
в контейнер second
используйте дисплей inline-flex
, чтобы оба контейнера third
располагались рядом друг с другом
См. Демо ниже:
.first {
width: 100%;
text-align: center;
background: aliceblue;
border: 1px solid cadetblue;
}
.second {
display: inline-flex; /* inline container */
width: 40%; /* <-- 20% for each image section */
vertical-align: middle;
border: 1px solid red;
}
.third {
display: block;
float: left;
}
img {
width: 100%;
display: block;
}
<div class="first">
<div class="second">
<div class="third">
<img src="http://via.placeholder.com/640x360">
</div>
<div class="third">
<img src="http://via.placeholder.com/640x360">
</div>
</div>
</div>