Интересен следующий момент:
Много где пишут что мол если элементу присваивается свойство 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;
.
Добрый вечер, У меня есть такая проблема, при нажатии на кнопку которая появляется при hover ел-та родителя вылазит модальное окно, а после его...
В браузере safari, не отображается часть svg с linear gradient, в остальных браузерах все отлично работает