Верхние и нижние индексы, не портящие вид текста

Для нижних и верхних индексов в ХТМЛе есть элементы sub и sup. К сожалению, при использовании их в тексте равенство высот строк ломается, и образуются неприятные дыры:

Верхние и нижние индексы, портящие высоту строки

Но ведь мы знаем, что элементы выглядят в браузере так, как выглядят, лишь потому, что про них написано что-то во встроенной таблице стилей браузера (иногда, правда, воображаемой).

Элементы sub и sup для выравнивания используют свойство vertical-align со значениями sub или super. Именно они и влияют на высоту строки. Стало быть, нам нужно вместо них использовать какой-нибудь vertical-align, оставляющий строку прежней высоты, и сдвигать индексы иным способом, например, с помощью position: relative.

Я уже давно почти везде использую примерно вот такую конструкцию:

sup, sub {
  vertical-align: middle;
  position: relative;
  font-size: 75%;
}
sup { bottom: 0.5em; }
sub { top: 0.5em; }

В результате получается нормальный текст:

Верхние и нижние индексы, не портящие высоту строки
Дальше
11 комментариев
Владимир Игонин 2007

Огромное спасибо, меня всегда бесили получаемые дыры, но занятся решением было всё некогда.

Val 2007

Хорошее решение и хороший текст выбран в качестве образца.

Илья Бирман 2007
Илья Новиков 2007

Спасибо, Илья. Я часто использую в тексте сноски, поэтому этот совет для особенно важен.

frst 2007

Волшебно.
Надеюсь оно везде работаетю

Виктор 2007

Илья, благодарю вас за эту заметку!

alshur 2007

!!Надеюсь оно везде работаетю!!

в ie 5.0 свойство bottom не поддерживается, если что

Shclr 2007

Разве position:relative не для блочных элементов работает?

Илья Бирман 2007

Для любых работает.

Более того, в спецификации даже написано:

!!Although relative positioning may be used as a form of superscripting and subscripting, the line height is not automatically adjusted to take the positioning into consideration.!!

Это я только что обнаружил в поисках ответа на ваш вопрос ;-)

Johnny Woo 2007

На случай, если хочется удостовериться, но негде — в Сафари тоже работает.

gray 2007

Ух ты, отличная «как бы мелочь». Возьму на вооружение :)

Никита Васильев 2007

Я раньше использовал для этого %%line-height:.1em%%, но ваш вариант, похоже, лучше работает в IE.

Карпинский Александр aka homm 2007

Спасибо, но всеже есть некторые проблемы.

  1. Стандартизации отображения это все равно не дает, в Эксплорере отличается чуток, хотя в Опере и ФаерФоксе становится одинакого.
  2. Эксплорер при значении font-size: 75%; попытался сгладить шрифт, и вместо циферок получилась размазня. Пришлось исправить на 85%.
Мои книги