Я хочу, чтобы два элемента inline-block
оставались в одной строке, независимо от их width
или margin
.Понимание поведения обертывания элементов встроенного блока с переполнением: скрыто
Быстрое решение заключается в применении white-space: nowrap
к контейнеру. Flex и поплавки - это альтернативы, которые также работают.
Я просто зациклился на том, чтобы выяснить конкретное поведение обертывания с помощью white-space: normal
.
Вот ситуация:
- Есть два
inline-block
элементов в контейнере на уровне блоков. - Ширина контейнера фиксируется в 500 пикселей.
- Ширина каждого ребенка фиксирована при 200px.
- Контейнер установлен в
overflow: hidden
.
С или без white-space: nowrap
, Box A не будет никогда завернуть. Размер его width
или margin-left
не имеет значения; Коробка А просто исчезнет в пустоте overflow: hidden
.
Вот коробка А с margin-left: 400px
(контейнер имеет overflow: hidden; white-space: normal
):
Обратите внимание на рисунке выше, как коробка В накрутились. Это не исчезнуть в overflow: hidden
.
Вот коробка В с margin-left: 250px
(контейнер неизмененном сверху; коробка сброса):
Вот коробка В с margin-left: 400px
:
В отличие от Box A, Box B отказывается оставаться на первой линии и просто прячется.
Так правило, кажется:
С
white-space: normal
, только первый элемент на линии будет уважатьoverflow: hidden
. Последующие элементы будут обертываться, но уважатьoverflow: hidden
на последующих строках.
Тестирование этой теории с третьего элемента, кажется, чтобы доказать это правильно:
Вот Box B с margin-left: 350px
и новая коробка C с margin-left: 350px
:
Таким образом, кажется, что один элемент не может заставить другой элемент уважать overflow: hidden
на их общем родителе.
Кто-нибудь точно знает, что происходит, и/или где в спецификации это поведение определено?
Является ли это проблемой переполнения, упаковки, встроенного блока или, может быть, сочетания факторов?
Я проверил здесь, но ничего не нашли: https://drafts.csswg.org/css-text-3/#white-space-property
Есть ли [эта скрипка] (https://jsfiddle.net/bgqshs0o/2/), где вы были после: wrapper имеет 'white-space: nowrap', а поле A имеет« margin-left: 200px' (или выше). Коробка B красиво вставляется в «переполнение: скрытое», без упаковки? – Kenney
FYI [this] (http://book.mixu.net/css/single-page.html) - один из лучших ресурсов CSS, который я прочитал, и прекрасно объясняет поведение элементов встроенного блока. – DominicEU
Спасибо @ Kenney. Да, решение легко. Понимание поведения немного сложнее ;-) –