Интересен следующий момент:
Много где пишут что мол если элементу присваивается свойство float:left; или float:right; то display будет иметь значение block!
Но я не соглашусь!
Пример:
.a
{
float:left;
background:yellow;
}
.b
{
width:100px;
background:red;
display:inline-block;
}
<div class="a">This is Photoshop 1.</div>
<div class="b">This is Photoshop 2.</div>
Результат: Один блок будет в ряду с другим.
Но это возможно когда стоит inline-block у обоих элементов. Иначе бы на одной строке нельзя было бы расположить 2 блока т.к всю ширину занимал бы блок с display:block;.
Вот еще пример:
.a
{
float:left;
background:yellow;
opacity:0.7;
padding:5px;
}
.b
{
background:red;
display:block;
}
<div class="a">This is Photoshop 1.</div>
<div class="b">This is Photoshop 2.</div>
Результат: один блок в ряду с другим, но за той лишь разницей что флоатный элемент игнорируется и блок занимает место под ним. Хотя текст находится вне первого блока
В инспекторе кода элемент с float:left; показывает display:block;...опять же не понятно! Свою точку зрения я описал. Объясните мне если что-то я не так понял.
P.S Кто не понял вопроса!
Почему элемент cо свойством-значением display:inline-block;, который стоит после элемента со свойством-значением float:left; находится на одной строке?(Если провести тоже самое но без float:left; то элементы не будут находится на одной строке т.к display:block; заберет всю ширину).
float действительно влияет на вычисленное значение свойства display, на MDN можно найти таблицу, которая предоставляет полный список изменений.
Но это возможно когда стоит inline-block у обоих элементов. Иначе бы на одной строке нельзя было бы расположить 2 блока т.к всю ширину занимал бы блок с display:block;.
Начнем с контр-примера:
p {
margin: 5px;
}
.floats {
float:left;
background: #ccc;
}
.dib {
display: inline-block;
}
<p class=dib>1. Something</p>
<p class=floats>2. Something</p>
<p class=floats>3. Something</p>
Очевидно, что если бы флоаты вели себя так же, как и инлайн-блоки, то порядок элементов был бы 1, 2, 3, а не 2, 3, 1. Если вас сбивает с толку возможность расположения в одной строке, то это не более, чем визуальный эффект :-) float так устроен по спецификации, что элемент, который обладает этим свойством изымается из потока и всплывает слева или справа, а контент остальных блоков его обтекает.
Единственная, на мой взгляд, схожесть инлайн-блока и флоата состоит в том, что они занимают ту ширину, которую занимает их внутренний контент.
Резюмирую: Почему элемент cо свойством-значением display:inline-block;, который стоит после элемента со свойством-значением float:left; находится на одной строке?
Потому что в приведенном вами примере флоат-элемент (1) теряет свою способность занимать 100% доступной ширины и начинает занимать ширину своего контента; (1) и инлайн-блочный (2) занимают достаточно малую ширину, чтобы уместиться на одной строке. Также, при этом они находятся в одном блочном контексте форматирования. Если (2) будет содержать, например, большой параграф текста, то он целиком перенесется на следующую строку, т. е. не будет обтекать (1).
Рекомендую спецификацию, в которой есть множество примеров и, наверняка, более правильное и доступное описание текущего поведения.
Это справедливо в некоторых случаях. Например, если поставить так:
.a {
display: table-cell;
float: left;
background: yellow;
}
То результирующее свойство будет display: block;.Даже последовательность не важна:
.a {
float: left;
display: table-cell;
background: yellow;
}
все равно, display: block;.
Это надо учитывать, когда ведется табличная верстка с помощью display: table; и display: table-cell;. Элементам надо ставить float: none;.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости