Esta é outra solução limpa:
sub, sup {vertical-align: baseline; position: relative; font-size: 70%;} /* 70% size of its parent element font-size which is good. */
sub {bottom: -0.6em;} /* use em becasue they adapt to parent font-size */
sup {top: -0.6em;} /* use em becasue they adapt to parent font-size */
Dessa forma, você ainda pode usar as tags sup / sub, mas corrigiu o comportamento idioso para estragar sempre a altura da linha do parágrafo .
Então agora você pode fazer:
<p>This is a line of text.</p>
<p>This is a line of text, <sub>with sub text.</sub></p>
<p>This is a line of text, <sup>with sup text.</sup></p>
<p>This is a line of text.</p>
E a altura da linha do parágrafo não deve ser estragada.
Testado no IE7, IE8, FF3.6, SAFARI4, CHROME5, OPERA9
Eu testei usando um p {line-height: 1.3;}
(que é uma boa altura da linha, a menos que você queira que suas linhas fiquem muito próximas) e ainda funcione, pois "-0.6em" é uma quantidade tão pequena que também com essa altura da linha o texto sub / sub cabe e não se revezem.
Esqueci um detalhe que pode ser relevante. Eu sempre uso DOCTYPE na 1ª linha da minha página (especificamente eu uso o HTML 4.01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
). Portanto, não sei se esta solução funciona bem quando o navegador está no modo quirkmode (ou não no modo padrão) devido à falta de DOCTYPE ou a um DOCTYPE que não aciona o modo Padrão / Quase Padrão.