CSS: Почему vertical-align: базовая остановка работает над Firefox при использовании переполнения: скрыто?
Вы можете воспроизвести это, выполнив этот тестовый пример. Результаты показаны на скриншоте ниже. Проблема в том, что в Firefox при добавлении overflow: hidden
в "блок" (с серым фоном на скриншоте) остановка блока выравнивается так, как мне бы хотелось: вместо базовой линии текста в блок выравнивается с базовой линией родительского поля, это как если бы нижняя часть блока была выровнена по базовой линии родительского поля. Как вы можете видеть на скриншоте, этого не происходит с Chrome.
- Это ошибка Firefox?
- Как получить ожидаемый результат в Firefox (выравнивание базовой линии с
overflow: hidden
)?
![Screenshot]()
Примечание. Использование vertical-align: middle
в "блоке" не сокращает его, так как я действительно хочу, это выравнивание базовой линии. Вы можете более четко видеть, что vertical-align: middle
не выполняет выравнивание базовой линии, установив padding: 1em 0 .1em 0
(большее дополнение в верхней части окна), которое дает вам:
![With vertical-align: middle]()
Ответы
Ответ 1
Это похоже на переполнение: скрытый багги, поскольку он удаляет базовую линию из элемента встроенного блока. К счастью, существует избыточное значение расширения CSS Mozilla для переполнения, которое предотвращает переполнение, но не демонстрирует это поведение.
Попробуйте следующее:
.block {
width: 10em; padding: .3em 0 .1em 0;
overflow: hidden;
overflow: -moz-hidden-unscrollable;
white-space: nowrap;
display: inline-block;
border: 1px solid #666; background-color: #eee;
}
Похоже, что он исправляет проблему в Firefox и не возится с Safari.
Update:
Похоже, что Firefox и Opera выполняют переполнение: скрытые встроенные блоки правильно, а браузеры Webkit - нет.
В соответствии с W3C CSS2 Рабочий чертеж Подробнее...,
Базовый уровень "встроенного блока" базовая линия последней строки строки в нормальный поток, если он не имеет нет строк в потоке или если их Свойство "переполнения" имеет вычисленное значение значение, отличное от "видимого", в котором если базовым является нижний предел края.
Ответ 2
попробуйте добавить vertical-align: text-bottom;
в .block
вы также можете установить равные высоты линии для .label
и .block
Ответ 3
попробуйте
.label {
float: left;
line-height: 30px;
margin-right: 5px;
}
это даст желаемый результат как в FF, так и в Chrome/Safari. Однако не тестировалось в IE.