Ответ 1
Вот простое и надежное решение:
span.item:empty:before {
content: "\200b"; // unicode zero width space character
}
(Обновление 12/18/2015: вместо использования \00a0
неразрывного пространства используйте \200b
, который также является неразрывным, но с нулевой шириной. См. мой другой ответ в fooobar.com/questions/274522/...)
Этот селектор CSS выбирает только пробелы, которые являются "пустыми", и вводит некоторый контент в это пустое пространство, а именно неразрывный символ пробела. Таким образом, независимо от того, какой размер шрифта и высота линии вы установили, все вокруг этого <span>
будет падать в линию, точно так же, как если бы у вас был текст, присутствующий в этом <span>
, который, вероятно, вы хотите.
http://plnkr.co/edit/eXHphA?p=preview
Результат выглядит следующим образом:
Я вижу две проблемы с использованием min-height
:
- он уязвим, если размер шрифта изменяется
- исходный текст не находится в правильном месте.
Вот как выглядят встречные примеры, когда все идет не так:
- Размер шрифта меняется, и теперь вам нужно вручную настроить мини-высоту. Вы не можете использовать тот же класс для поддержки разных частей вашего сайта, где размер шрифта отличается. Здесь размер шрифта в этом месте равен 30, но минимальная высота по-прежнему равна 20. Таким образом, пустые интервалы не такие высокие.: - (
http://plnkr.co/edit/zeEvca?p=preview
- Ваш пустой диапазон имеет правильную высоту с минимальной высотой, но он не выравнивается правильно с текстом, окружающим диапазон. Исходная линия падает неправильно. Посмотрите на строку, которая гласит: "А?" ниже:
http://plnkr.co/edit/GGd7mz?p=preview
Код для этого последнего примера:
<div class="group">
Hello <span class="item">Text</span>
</div>
<div class="group">
Huh? <span class="item"></span>
</div>
<div class="group">
Yes! <span class="correct"></span>
</div>
CSS
.group {
background-color: #f1f1f1;
padding: 5px;
font-size: 20px;
margin-bottom: 20px;
}
.item {
background-color: #d2e3c5;
border-radius: 6px;
padding: 10px;
margin-bottom:5px;
display: inline-block;
min-height: 20px;
}
.correct {
background-color: #d2e3c5;
border-radius: 6px;
padding: 10px;
margin-bottom:5px;
display: inline-block;
}
.correct:empty:before {
content: "\00a0";
}