Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=a29dfef9-9976-4536-8b0c-9564e03ff590

TRUCO: Cómo resaltar la inicial de un texto con CSS

Aspecto, muy profesional, de la primera letra utilizando el pseudo-elemento first-letterEn revistas de papel es habitual encontrar las iniciales de los textos resaltadas de algún color y en mayor tamaño, como una indicación visual del lugar por donde se empieza a leer el texto. Si quieres introducir este elemento práctico y decorativo en una web, hay varias formas de conseguirlo. En este artículo estudiaremos cómo funcionan y sus ventajas e inconvenientes.

Método básico

La forma más directa de abordar el problema es separar la primera letra en un elemento span con una clase o identificador y aplicarle el estilo CSS apropiado. Tenemos dos opciones, bien hacer la inicial más grande en la misma posición (conocida como raised cap) o bien que esta ocupe varias líneas y se adentre en el párrafo de texto (denominada drop cap). Para el primer caso basta con aumentar el font-size de la letra en cuestión y ajustar line-height en caso de que fuera necesario. El segundo es más complicado y requiere del uso de float para mezclar la letra con el texto. Supongamos que tengamos el siguiente marcado HTML:

<p><span class="drop-cap">G</span>ranada ama lo diminuto. (...)</p>

Entonces, agrandamos la letra, la convertimos en flotante y realizamos ajustes de margen para que no aparezca demasiado cerca del texto de alrededor:

.drop-cap-span .drop-cap {
  float: left;
  font-size: 5.4em;
  line-height: 1;
  margin-right: .6rem;
}

El resultado de ese código, así como aplicando algo de estilo adicional con un color y otra tipografía, sería el de la siguiente imagen:

Resultado de drop-cap básico con dos tipografías diferentes

Este método tiene ciertos inconvenientes. Por un lado, introduce un elemento de marcado extra (el <span>) que puede que no podamos añadir en determinadas situaciones, por ejemplo, que el texto se cargue de forma dinámica y no se pueda modificar. Además, tiene efectos negativos para la accesibilidad, ya que un lector de textos posiblemente lea la inicial y el resto de la palabra separadas. Por otro lado, utilizar el elemento span nos permite personalizar cada una de las iniciales que construyamos, mediante clases distintas.

El pseudo-elemento ::first-letter

CSS proporciona un selector que crea un pseudo-elemento en la primera letra (y casi cualquier puntuación que la rodee), pudiendo aplicarle estilos sin necesidad de modificar el marcado HTML. En este caso, podemos simplemente tener el siguiente código en la página:

<article class="drop-cap">
<p>El diminutivo no tiene más misión que la de limitar(...)</p>
</article>

Y utilizar estas líneas de CSS para activar la inicial decorativa:

.drop-cap p:first-child::first-letter {
  float: left;
  font-size: 5.5em;
  line-height: 1;
  margin: 0.2rem;
  margin-right: 0.6rem;
  padding: 1rem;
  background: #a070c0;
  box-shadow: 0 0 0 .2rem #a070c0;
  border: .2rem solid black;        
}

Esta vez hemos añadido un fondo para la letra y un borde, de forma que la letra tiene un espacio propio y queda bien separada del texto normal. El resultado sería el que ves en la imagen:

Aspecto, muy profesional, de la primera letra utilizando el pseudo-elemento first-letter

La ventaja de ::first-letter es que se puede aplicar a cualquier texto, estático o dinámico, y que no empeora la accesibilidad del sitio. Por otro lado, si queremos ajustar el posicionamiento de cada inicial respecto al texto es más difícil hacerlo de forma distinta para cada letra, ya que tenemos un único estilo para todas las iniciales. Esto puede ser incómodo en ciertos casos ya que cada navegador ajusta el elemento flotante de forma distinta y algunas letras pueden quedar demasiado o muy poco separadas del texto, así como desplazar más líneas de texto en unos navegadores que en otros.

La propiedad initial-letter

Como hemos visto, las iniciales grandes en la web sufren de un problema de posicionamiento y ajuste a un número determinado de líneas. CSS ha introducido recientemente una nueva propiedad específica para resolverlo, initial-letter. Sin embargo, el soporte de navegadores es muy escaso, únicamente disponible en aquellos que utilicen el motor Webkit (Safari en macOS y Epiphany en Linux) y en ocasiones es necesario el prefijo -webkit. La idea de esta propiedad es que sean los navegadores los encargados de adaptar el tamaño de la letra según el número de líneas que queremos que ocupe. De esta forma siempre se puede ajustar a la línea base o baseline del renglón conveniente.

Los parámetros de la propiedad initial-letter son dos: el número de líneas correspondiente al tamaño que deseamos que tenga la inicial, y el número de líneas que debe "hundirse". Es decir, la inicial puede hundirse tres líneas y sobresalir una si tiene el tamaño de 4 líneas, en cuyo caso la propiedad tendría el valor 4 3. En nuestro caso, para imitar los ejemplos anteriores, haremos que la letra ocupe 4 líneas hacia abajo, lo cual podemos conseguir simplemente con el valor 4:

@supports (initial-letter: 4) or (-webkit-initial-letter: 4) {
  .drop-cap p:first-child::first-letter {
    -webkit-initial-letter: 4;
    initial-letter: 4;
  }
}

Puesto que el soporte de esta propiedad aún no está muy extendido hemos utilizado una query de tipo @supports para que nos permita implementarlo con mejora progresiva: usando la propiedad nueva sólo si está soportada, y en otro caso podríamos usar el método anterior. El resultado debe ser parecido al de la imagen, renderizado en Epiphany (el soporte en Epiphany es aún experimental y podría cambiar ligeramente):

Aspecto de nuestra letra inicial con un navegador que soporta initial-leter

Te dejo el código con los tres ejemplos que hemos estudiado para que puedas experimentar por tu cuenta y comprobar sus similitudes y diferencias.

Fuentes y más información:

David Charte David Charte es un ingeniero informático y matemático apasionado por la divulgación del conocimiento. Cuando no está tratando de aprender un nuevo lenguaje, investiga en el campo de la ciencia de datos. Puedes seguirlo en Twitter en @fdavidcl. Ver todos los posts de David Charte
Archivado en: Desarrollo Web

No te pierdas nada, recibe lo mejor en tu email

Si te ha gustado este art­ículo, únete a miles de desarrolladores que ya reciben cada mes nuestro boletí­n por email. No te pierdas los mejores trucos, noticias y frikadas.

Enviamos poco, pero bueno. Palabra de desarrollador.

Suscríbete aquí­

Sí­guenos también en:

Telegram LinkedIn YouTube
La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.