La etiqueta HTML <sup /> que afecta a la altura de la línea, ¿cómo hacerlo coherente?

130

Si tengo una <sup>etiqueta en una etiqueta de varias líneas <p>, la línea con el superíndice tiene un espacio de línea más grande por encima de las otras líneas, independientemente de la altura de línea que coloque en la línea <p>.

Editar para aclarar : no quiero decir que tengo muchos <p>s, cada uno de los cuales está en una sola línea. Tengo un single <p>con suficiente contenido para causar el ajuste en varias líneas. En algún lugar (en cualquier lugar) del texto puede haber un <sup>o <sub>. Esto afecta la altura de la línea para esa línea al agregar espacio adicional arriba / abajo. Si establezco una altura de línea más grande en <p>esto, no hay diferencia para el problema. La altura de la línea aumenta, pero aún queda espacio adicional.

¿Cómo puedo hacer que sea coherente, es decir, todas las líneas tienen el mismo espacio si contienen <sup>o no?

Sus soluciones deben ser entre navegadores (IE 6+, FF, safari, opera, chrome)

Andrew Bullock
fuente

Respuestas:

172

line-height lo arregla, pero es posible que tenga que hacerlo bastante grande: en mis ajustes tengo que aumentar el alto de línea a aproximadamente 1.8 antes de que <sup>ya no interfiera con él, pero esto variará de una fuente a otra.

Un posible enfoque para obtener alturas de línea consistentes es establecer su propio estilo de superíndice en lugar del predeterminado vertical-align: super. Si lo usa top, no agregará nada al cuadro de línea, pero es posible que deba reducir aún más el tamaño de la fuente para que se ajuste:

sup { vertical-align: top; font-size: 0.6em; }

Otro truco que podrías probar es usar el posicionamiento para moverlo un poco hacia arriba sin afectar el cuadro de línea:

sup { vertical-align: top; position: relative; top: -0.5em; }

Por supuesto, esto corre el riesgo de chocar contra la línea de arriba si no tiene suficiente altura de línea.

bobince
fuente
1
vertical-align lo arregló, gracias. Incluso una altura de línea masiva de 300% + no lo arregla en IE8, Chrome 3 o FF 3.5. Todavía obtengo 1-2 px de diferencia.
Andrew Bullock, el
Como se mencionó, esto no siempre funciona si la altura de la línea es demasiado apretada.
Ric
55
@simPod: La misma situación, vertical-align: bottom(aunque eso no te atrae tanto top) y luego position:relative;con un resultado positivo top.
bobince
de hecho, preferiría {vertical-align: super} porque, por lo que recuerdo, evita algunos fallos en la pantalla con altura de línea en IE8. Intentaría no usar el posicionamiento a menudo si hay mejores alternativas. Un posicionamiento superior descuidado puede ocasionar problemas en cascada más adelante en el proyecto.
Todos los bits son iguales el
88
sup {
    line-height: 0;

    /* The following rules (or similar) likely come from browser 
     * style and are not needed
     */
    font-size: 0.83em;
    vertical-align: super;
}

El truco es establecer el <sup> altura de la línea en 0. Se dice que @Scott usa normal, pero esto no siempre funciona.

Esto significa que no tiene que cambiar la altura de línea del texto circundante para acomodar el texto superíndice. He probado esto en IE7 + y los otros navegadores principales.

Ric
fuente
2
+1. Como se señaló, esto evita conflictos con los otros line-heightatributos. Todavía puede causar intersecciones con la línea anterior si el conjunto line-heightse establece en pequeño, por supuesto.
Chris Krycho
¡solución fantástica, hace que el cromo ya no se comporte mal! La respuesta más simple hasta ahora.
Aktau
Me acabo de dar cuenta de que esto afectará a las alturas de línea no predeterminadas del texto circundante. Uso line-height: 100%en este caso.
Matthias Hauert
Esto funciona a la perfección. Además, los valores posibles para line-heightHe encontrado son 0, 1, 1em y 100%. Todo esto ciertamente funciona en Chrome y Firefox.
ClarkeyBoy
También prefiero esta respuesta para mi caso de uso: esta respuesta funciona en correos electrónicos en Gmail, la respuesta aceptada no. stackoverflow.com/questions/21118072/…
Mshnik
7

Tuve el mismo problema y ninguna de las respuestas dadas funcionó. Pero encontré un git commit con una solución que funcionó para mí:

sup {
  font-size: 0.8em;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
  top: -0.5em;
}
PiTheNumber
fuente
2

Manténgalo fácil:

sup { vertical-align: text-top; }

[ el tamaño de fuente depende de su tipo de letra individual]

Milingu Kilu
fuente
2
sup, sub {
  vertical-align: baseline;
  position: relative;
  top: -0.4em;
}
sub { 
  top: 0.4em; 
}
Anup Puri
fuente
3
Proporcione una explicación con su código, para que el OP pueda aprender de él.
EBH
1

Prefiero usar lengthen la alineación vertical. Esto alinea la línea base del elemento en la longitud dada por encima de la línea base de su padre.

sup {
   font-size: .83em;
   vertical-align: 0.25em;
   line-height: 0;
}
Dallas
fuente
1

La razón por la cual la <sup>etiqueta está afectando el espacio entre dos líneas tiene que ver con varios factores. Los factores son: altura de la línea, tamaño del superíndice en relación con la fuente regular, la altura de la línea del superíndice y, por último, pero no menos importante, cuál es la parte inferior del superíndice que se alinea con ... Si establece ... la altura de la línea de texto normal para estar en una "banda de túnel" (eso es lo que yo llamo) del 135%, luego el texto normal (el 100%) se rellena de blanco en un 35% de más blanco. Para un párrafo esto se ve así:

 p
    {
            line-height: 135%;
    }

Si luego no coloca el superíndice en blanco ... (es decir, mantiene la altura de la línea a 0), el superíndice solo tiene el ancho de su propio texto ... si luego le pide al superíndice que sea un porcentaje de la fuente regular (para ejemplo 70%) y si lo alinea con la mitad del texto normal (text-middle), puede eliminar el problema y obtener un superíndice que se parece a un superíndice. Aquí está:

sup
{
    font-size: 70%;
    vertical-align: text-middle;
    line-height: 0;
}
enésimo
fuente
1

Prefiero la solución sugerida aquí , como lo ejemplifica este jsfiddle :

CSS:

sup, sub {
  vertical-align: baseline;
  position: relative;
  top: -0.2em;
}

sub {
  top: 0.2em;
}

HTML:

<span>The following equation is perhaps the most well known of all: </span><span id="box">E<sub>a</sub> = mc<sup>2</sup></span><span>.  And it gives an opportunity to try out a superscript and even throw in a superfluous subscript!  I'm sure that Einstein would be pleased.</span>.

La belleza de esta solución es que puede adaptar el posicionamiento vertical del superíndice y el subíndice, para evitar cualquier conflicto con la línea superior o inferior ... en lo anterior, simplemente aumente o disminuya 0.2empara satisfacer sus necesidades.

drmrbrewer
fuente
0

Para hacer que todas las líneas sean más altas , para que tengan el mismo aspecto que la línea con el superíndice, defina una más grande line-heightpara todo el párrafo

<p style='line-height:150%'>

o cualquier valor que le dé el efecto que deseas.

Puede parecer extraño, pero así es como describió sus requisitos.

EDITAR: para que todas las líneas se vean iguales cuando solo una necesita más espacio vertical que las otras , TODAS las líneas en el párrafo tendrán que ser más altas.

Esto, como dije, puede que no sea una solución atractiva. Tal vez se pueda hacer algo con un lapso haciendo que solo el texto con el subíndice / superíndice sea más pequeño , aparte de eso, no creo que se pueda lograr lo que desea. Pero me gustaría ver la solución de otra persona.

EDIT2: Por cierto, he probado un pequeño archivo html que contiene

<html>
<head>
<title>line-height</title>
<style>
p {
    line-height : 1.5em;
    width : 25em;
}
</style>
</head>
<body>
<p>Mary had a little lamb, its fleece<sup>1</sup> was white as snow, 
and everywhere that Mary went, the lamb<sub>2</sub> was sure to go.
</p>
</body>
</html>

Y todas las líneas tienen la misma altura en FF3.0.14 y Konqueror (no puedo hablar por otros navegadores)

pavium
fuente
1
Dije en la pregunta que esto no resuelve el problema. He agregado una aclaración en caso de que haya entendido mal
Andrew Bullock
Sí, entiendo que si necesito más espacio para una línea, por coherencia, necesito agregar espacio adicional a los demás, eso es obvio. Lo que digo es line-height duerma arreglo él, el aumento del espacio sí, pero hay todavía adicional espacio con el sup
Andrew Bullock
Tal vez haya una diferencia entre los navegadores: después de todo, la respuesta que aceptó comienza "la altura de la línea lo soluciona", pero no sabemos qué estaba usando Bobince del navegador.
Pavium el
0

He estado usando line-height: normal para el superíndice, que funciona bien para mí en Safari, Chrome y Firefox, pero no estoy seguro acerca de IE.

Scott Chandler
fuente
0

Use esto especialmente en el boletín informativo -

<sup style="font-size:9px; line-height:8px;">&reg;</sup>
Hadi
fuente
0

Me gusta la solución de Milingu Kilu pero con el mismo espíritu prefiero

sup { vertical-align:top; line-height:100%; }
Bigmat
fuente
0

& sup1, & sup2, etc. podrían ser útiles. es un truco HTML para superíndice

Rizzoli
fuente
0

Responda desde aquí , funciona tanto en phantomjs como en HTML incorporado por correo electrónico:

Lorem ipsum <sup style="font-size: 8px; line-height: 0; vertical-align: 3px">&reg;</sup>

TheZver
fuente