2011-12-01 28 views
12

La especificación CSS indica que la altura de línea debe aplicarse al texto dividiendo el valor especificado por dos y aplicando el resultado arriba y debajo de una línea de texto.Altura de línea CSS y encabezado tradicional

Esto varía significativamente de la comprensión tradicional de liderazgo, lo que generalmente significa que el espaciado se 'agrega' solo por encima de la línea de texto. (Sé que esto no es 100% correcto, porque en realidad la altura de línea no agrega espacio, pero establece la altura de la línea, sin embargo, de esta manera es más sencillo describir el problema).

Considere este ejemplo de marcado:

<!DOCTYPE html> 
<html> 
    <head> 

    <style type="text/css"> 
    p 
     { 
     margin:0; 
     font-size: 13pt; 
     line-height: 15pt; 
     } 
    h1 
     { 
     margin:0; 
     font-size: 21pt; 
     line-height: 30pt; 
     } 
    </style> 

    </head> 
    <body> 

    <h1>Title</h1> 
    <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.</p> 
    <p>Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).</p> 
    <p>It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.</p> 
    </body> 
</html> 

Si línea de altura era igual a la comprensión tradicional de líder, entonces la distancia entre <h1> y la primera <p> sería igual a la distancia entre <p> 's, ya que esta distancia está definido por el líder. Sin embargo, éste no es el caso.

Mientras distancia entre <p> s permanece constante (p's line-height - p's font-size = 15 - 13 = 2pt), distancia entre <h1> y la primera <p> es diferente: es igual a (p's line-height - p's font-size)/2 + (h1's line-height - h1's font-size)/2 = (15 - 13)/2 + (30-21)/2 = 5.5pt.

Esto se puede notar fácilmente a simple vista si el marcado anterior se procesa con un navegador.

El problema es que la forma tradicional de mantener el ritmo visual vertical en una página es mediante el establecimiento de los elementos principales en múltiplos de la base. Este método no es aplicable en CSS, como se muestra arriba.

Tengo 3 preguntas:

  1. Es mi comprensión de la línea de altura, lo que lleva y sus diferencias correcta?
  2. ¿Hay alguna manera de mantener el ritmo vertical con CSS (imitando el estilo tradicional con CSS o no)?
  3. (Pregunta de bonificación) ¿Cuál fue el razonamiento detrás de hacer que la altura de línea sea tan diferente de la delantera?

ACTUALIZACIÓN: muchas gracias por sus comentarios! Tenga en cuenta que me sugirió mi propia solución y yo estaría muy agradecido por cualquier comentario sobre él: https://stackoverflow.com/a/8335230/710356

Respuesta

1

bien, esto parece funcionar mejor que mi otra solución. Todavía emplea elementos de bloque interiores <span> adicionales. El truco es establecer el elemento del bloque line-height en 1, y ajustar el span line-height, mientras que también se cancela con margin s superior e inferior. Tenga en cuenta que esto requiere que la pantalla se configure en inline-block.

Sin embargo, establecer márgenes (para hacer una interrupción de línea entre <h1> y <p>) se vuelve bastante difícil y requiere algunos cálculos matemáticos. Por lo tanto, supongo que tratar de utilizar el enfoque tipográfico tradicional para liderar consume mucho tiempo en CSS para que realmente se emplee en el trabajo del desarrollador.

De todos modos, aquí está el código final:

<!DOCTYPE html> 
<html> 
    <head> 

     <style type="text/css"> 

     span.p 
      { 
      display:inline-block; 
      line-height: 32px; 
      } 

     span.h 
      { 
      display:inline-block; 
      line-height: 64px; 
      margin-top: -32px; 
      margin-bottom: -32px; 
      } 

     p 
      { 
      margin:0; 
      font-size: 26px; 
      line-height: 1; 
      } 
     h1 
      { 
      margin:0; 
      font-size: 42px; 
      line-height: 1; 
      } 
     </style> 

    </head> 
    <body> 

    <h1><span class="h">Molloy</span></h1> 
    <p><span class="p">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.</span></p> 
    <p><span class="p">Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).</span></p> 
    <h1><span class="h">Lorem Ipsum is simply</span></h1> 
    </body> 
</html> 
5
  1. Sí. No es muy simple, pero utilizando position:relative;, puede hacer las cosas alinear correctamente, por ejemplo:

    h2 { 
        font-size: 36px; 
        line-height: 48px; 
        position: relative; 
        top: 6px; 
    } 
    

    Aquí es un trabajo en progreso demo

  2. Las personas que diseñaron CSS no son tipógrafos. Probablemente no fue intencional.

  3. Bonificación respuesta: Here is a talk por Jonathan Hoefler sobre los problemas con el tipo de diseño para la web y los límites de CSS.
+0

Gracias! Sin embargo, parece que la demostración a la que se ha vinculado es un archivo gif vacío. Además, no veo ningún valor negativo en tu código. – sbichenko

+0

Disculpe, arreglé el enlace y recordé que no usé valores negativos. :-) – bookcasey

+0

No necesita usar posicionamiento para mantener el ritmo vertical en realidad. Se puede hacer asegurando una línea de altura uniforme (en relación con el tamaño de la fuente) y el margen inferior. – joshnh

0

Estoy agregando mi propia respuesta, pero no la estoy marcando como 'aceptada', porque acabo de presentar este método y realmente no lo he comprobado lo suficiente. También es bastante complicado en términos de legibilidad de marcado.

El truco es envolver cada elemento al que queremos aplicar nuestro epígrafe de <span> etiqueta, y establecer las propiedades CSS <span>'svertical-align a cualquiera middle o sub (que producen resultados ligeramente diferentes, y no estoy seguro de por qué cualquiera o cómo exactamente son diferentes) y line-height a 0. El resultado es muy cercano a lo que se necesita, por lo que la distancia entre <h1> y <p> en el ejemplo anterior se vuelve casi correcta (no del todo, al parecer), es decir, igual a <p> de altura de línea. No soy muy bueno con CSS, por lo que no estoy seguro de cómo esto podría afectar el diseño general, si es aceptable utilizar dichos hacks y si esto es compatible con varios navegadores. Estaría agradecido si comentaras mi solución.

Ejemplo de marcado:

<!DOCTYPE html> 
<html> 
    <head> 

     <style type="text/css"> 

     span.lh 
      { 
      vertical-align: sub; 
      line-height:0 
      } 
     p 
      { 
      margin:0; 
      font-size: 26px; 
      line-height: 30px; 
      } 
     h1 
      { 
      margin:0; 
      font-size: 42px; 
      line-height: 60px; 
      } 
     </style> 

    </head> 
    <body> 

    <h1><span class="lh">Title</span></h1> 
    <p><span class="lh">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.</span></p> 
    <p><span class="lh">Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).</span></p> 
    <h1><span class="lh">Lorem Ipsum is simply</span></h1> 
    </body> 
</html> 
+0

La desventaja de esto es mantenibilidad y semántica. ¿No sería bueno que CSS nos ofreciera más opciones? – joshnh

+0

Pruebe SASS o Compass – sarink

0

Soy consciente de este hilo es viejo, pero yo también tenía este problema. Si desea el mismo efecto de tipografía que los editores de documentos de Word, como Microsoft Word, existe un caso especial relacionado con la altura de línea 1.

En lugar de la altura de línea: 1; poner línea-altura: normal ;. Otros valores de altura de línea siguen siendo los mismos (1,5 permanece como 1,5, etc.).

Cuestiones relacionadas