По сути, вы добавили больше беспорядка в свой код, что создает больше путаницы, поэтому сначала я пытаюсь удалить беспорядок, который мешает понять реальную проблему.
Прежде всего, мы должны установить, что является реальным вопросом? Вот почему элемент "inline-block
" толкается вниз.
Теперь мы начинаем понимать это и сначала удаляем беспорядок.
1 - Почему бы не дать всем трем элементам одинаковую ширину границы? Давайте дадим это.
2 - Имеет ли плавающий элемент какую-либо связь с элементом inline-block, перемещаемым вниз?Нет, это не имеет к этому никакого отношения.
Итак, мы вообще удалили этот div .И вы наблюдаете такое же поведение выталкиваемого вниз элемента inline-block.
Наступает очередь некоторой литературы , чтобы понять идею линейных блоков и того, как они расположены в одной строкеesp внимательно прочитайте последний абзац, потому что там лежит ответ на ваш вопрос.
Базовая линия 'inline-block' - это базовая линия его последней строки в нормальном потоке, если только он не имеетблоки строк в потоке или если его свойство 'overflow' имеет вычисленное значение, отличное от 'visible', в этом случае базовой линией является нижний край поля.
Если вы не уверены в baseline тогда вот краткое объяснение в простых словах.
Все символы, кроме 'gjpqy', написаны на базовой линии, вы можете думать о базовой линии, как будто вы рисуете простую горизонтальную линию, аналогичную подчеркиванию прямо под ними.«случайные символы», то это будет базовая линия, но теперь, если вы напишите какой-либо из символов «gjpqy» в той же строке, то нижняя частьиз этих персонажей будет падать ниже линии.
Итак, мы можем сказать, что все символы, кроме «gjpqy», написаны полностью выше базовой линии, в то время как некоторая часть этих символов написана ниже базовой линии.
3 - Почему бы не проверить, где находится базовая линия нашей линии?Я добавил несколько символов, которые показывают базовую линию нашей линии.
4 - Почему бы не добавить несколько символов в наши элементы div, чтобы найти их базовые линии в элементе div?Здесь некоторые символы добавлены в div для уточнения базовой линии .
Теперь, когда вы понимаете базовую линию, прочитайте следующую упрощенную версию базовой линии встроенных блоков.
i) Если в рассматриваемом inline-блоке свойство переполнения имеет значение visible (что по умолчанию, поэтому устанавливать его не нужно).Тогда его базовая линия будет базовой линией содержащего блока строки.
ii) Если у рассматриваемого inline-block свойство переполнения установлено в значение OTHER THAN visible,Тогда его нижнее поле будет находиться на базовой линии строки вмещающего блока.
Теперь посмотрите наэто еще раз, чтобы прояснить вашу концепцию, что происходит с зеленым div .Если все еще есть путаница, то здесь добавлено больше символов, близких к зеленому div, чтобы установить базовую линию содержащего блока , и базовая линия зеленого div выровнена.
Что ж, теперь я утверждаю, что они имеютта же базовая линия?ВПРАВО?
5 - Тогда почему бы не перекрыть их и посмотреть, подходят ли они друг к другу?Итак, я привожу третий div-слева: 35px;, чтобы проверить, имеют ли они сейчас ту же базовую линию ?
Теперь мы получили доказанную нашу первую точку.
Что ж, после объяснения первой точки вторая точка легко усваивается, и вы видите, что у первого элемента div, у которого свойство переполнения имеет значение, отличное от visible (hidden), есть нижнее поле на базовой линии линии.
Теперь вы можете выполнить несколько экспериментов, чтобы проиллюстрировать это.
- Установить Первое переполнение div: видимое (или полностью удалить) .
- Установить переполнение второго div: кроме видимого .
- Установить переполнение обоих div: кроме видимых .
Теперь верни свой беспорядок и посмотри, все ли у тебя хорошо.
- Верните обратно ваш плавающий div (конечно, нужно
увеличить ширину тела)
Вы видите, что это не имеет никакого эффекта.
- Вернуть те же странные поля .
- Установите зеленый div для переполнения: видно, как вы задали в своем вопросе (это смещение происходит из-за увеличения ширины границы с 1 до 5 пикселей, поэтому, если отрегулировать отрицательное значение влево , вы будете видать тут проблем нет)
- Теперь удалите дополнительные символы, которые я добавил, чтобы помочь в
понимание . (и, конечно, удалить отрицательный левый)
- Наконец уменьшить ширину тела , потому что нам больше не нужен более широкий.
И теперь мы вернулись туда, откуда начали.
Надеюсь, я ответил на ваш вопрос.