Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

 

 

En este artículo comenzarás tu viaje hacia el dominio del "estilado" de texto con CSS. Aquí trataremos en detalle todos los fundamentos básicos del diseño del texto y las fuentes tipográficas, incluyendo el ajuste de la familiar, el peso y el estilo de la fuente, la alineación del texto, el espaciado de líneas y letras y otros efectos.

Prerequisites: Basic computer literacy, HTML basics (study Introduction to HTML), CSS basics (study Introduction to CSS).
Objective: To learn the fundamental properties and techniques needed to style text on web pages.

What is involved in styling text in CSS?

As you'll have already experienced in your work with HTML and CSS, text inside an element is laid out inside the element's content box. It starts at the top left of the content area (or the top right, in the case of RTL language content), and flows towards the end of the line. Once it reaches the end, it goes down to the next line and continues, then the next line, until all the content has been placed in the box. Text content effectively behaves like a series of inline elements, being laid out on lines adjacent to one another, and not creating line breaks until the end of the line is reached, or unless you force a line break manually using the <br> element.

Nota: Si el parrafo anterior te deja confuso, no importa: vuelve atrás y revisa nuestro articulo sobre el Box model antes de continuar.

Las propiedades CSS usadas para dar estilo al texto generalmente pueden clasificarse en dos categorías, que veremos por separado en este artículo:

  • Estilos de la fuente tipográfica: Propiedades que afectan a la fuente que está siendo aplicada al texto (qué fuente se aplica, como de grande es, si es negrita, itálica, etc).
  • Estilos de disposición del texto: Propiedades que afectan el espaciado y otras característica de la colocación del texto, permitiendo la manipulación de, por ejemplo, el espacio entre líneas y letras, y como el texto se alinea dentro de la caja contenedora.

Nota: Ten en cuenta que el texto en el interior de un elemento es afectado completamente como si fuera una única entidad. No puedes seleccionar y dar estilo a subsecciones de texto a menos que las envuelvas mediante un elemento apropiado (como un <span> o <strong>), o usando un pseudo-elemento específico para el texto como ::first-letter (selecciona la primera letra del texto de un elemento), ::first-line (seleccion la primera línea del texcto de un elemento, or ::selection (selecciona el texto actualmente resaltado por el cursor).

Fuentes tipográficas

Veamos las propiedades que permiten dar estilo a las fuentes tipográficas. En este ejemplo aplicaremos varias propiedades propiedades CSS  al siguiente fragmento de HTLM:

<h1>Tommy the cat</h1>

<p>I remember as if it were a meal ago...</p>

<p>Said Tommy the Cat as he reeled back to clear whatever foreign matter
 may have nestled its way into his mighty throat. Many a fat alley rat 
had met its demise while staring point blank down the cavernous barrel of
 this awesome prowling machine. Truly a wonder of nature this urban 
predator — Tommy the cat had many a story to tell. But it was a rare 
occasion such as this that he did.</p>

Puedes ver el  ejemplo completo en Github (mira también el código fuente.)

Color

La propiedad color establece el color del contenido de los elementos seleccionados (el cual normalmente es texto, pero puede también incluir un par cosas más, como "an underline or overline" colocado en el texto usando la propiedad text-decoration ).

color puede aceptar cualquier unidad de color CSS, por ejemplo:

p {
  color: orange;
}

Esto causará que el contenido de los parrafos se  muestre en color naranja, en lugar del negro que es el estandar por defecto del navegador:

Font families

Par usar una fuente diferente en nuestro texto, usamos la propiedad font-family , que nos permite indicar al navegador una fuente (o lista de fuentes) que debe aplicar a los elementos seleccionados. El navegador sólo aplicarán una fuente si está disponible en la máquina que está accediendo al sitio web; en caso contrario, simplemente usará  default font. Aquí tienes un ejemplo sencillo:

p {
  font-family: arial;
}

Esto hará que todos los parrafos de una página adopten la fuente arial, que se encuentra en cualquier ordenador.

Fuentes seguras para la web (web safe fonts)

Hablando de disponibilidad de fuentes, sólo hay cierto número de fuentes que están disponibles en general en todos los sistemas, y que en consecuencia peuden ser utlizadas sin demasiadas preocupaciones. Son las llamadas web safe fonts.

La mayor parte del tiempo, como desarrolladores web deseamos tener más control específico sobre las fuentes utilizadas para mostrar nuestro contenido de texto. El problema está en encontrar una manera de saber que fuente está disponible en el ordenador que está siendo utilizado para ver nuestras páginas. No hay manera de saber esto en todos los casos, pero al menos  contamos con que las fuentes web safe están disponibles en casi todos los sistemas operativos más utilizados (las distribuciones Linux más comunes, Windows, Mac, Android, e iOS.)

La lista de las fuentes web safe cambiará al ir evolucionando los sistemas operativos, pero es correcto considerar las siguientes fuentes como web safe, al menos por ahora (muchas de ellas han sido popularizadas gracias a la iniciativa Core fonts for the Web de Microsoft a finales de los 90 y principio de los 2000):

Name Generic type Notes
Arial sans-serif A menudor se considera una buena práctica añadir también  Helvetica como alternativa preferida a Arial ya que, aunque tienen casi el mismo aspecto, se condisera que Helvetica  tiene una forma más agradable, aunque Arial está más ampliamente disponible.
Courier New monospace Algunos sistemas operativos  cuentan con una versión alternativa (posiblemente más antigua) de la Courier New llamada Courier. Se considera una buena práctica usar ambas, con Courier New como la alternativa preferida.
Georgia serif  
Times New Roman serif Algunos sistemas operativos  cuentan con una versión alternativa (posiblemente más antigua) de la Times New Roman llamada Times. Se considera una buena práctica usar ambas, con Times New Roman como la alternativa preferida.
Trebuchet MS sans-serif Deberías tener cuidado usando  esta fuente ya que no es ampliamente disponible en los sistemas operativos moviles.
Verdana sans-serif  

Nota: Entre otros recursos, el sitio cssfontstack.com maintiene una lista de fuentes web safe disponibles en los sistemas operativos Windows y Mac, que puede ayudarte en la toma de decisiones acerca de lo que consideras seguro para tus propositos.

Nota: Existe una manera de descargar una fuente personalizada junto con la página web, para que puedas personalizar is a way to download a custom font along with a webpage, to allow you to customize your font usage in any way you want: web fonts. This is a little bit more complex, and we will be discussing this in a separate article later on in the module.

Default fonts

CSS define cinco nombres genéricos para las fuentes:  serifsans-serif, monospace, cursive,and fantasy . Son muy genéricos y la fuente exacta que será utilizada cuando se especifiquen dichos nombres dependerá de cada navegador y puede variar dependiendo del sistema operativo. Representa el peor escenario posible en el que el navegador tratará de proporcionar al menos una fuente que parezca apropiada. serif, sans-serif y monospace son bastante predecibles y el navegador debería proporcionar algo razonable. Por otra parte, cursive y fantasy son menos predecibles y te recomendamos que las uses con cautela, probando a medida que avanzas.

Los cinco nombres se definen de la siguiente manera:

Term Definition Example
serif Fuentes que tienen serifas (pequeños adornos ubicados generalmente en los extremos de las líneas de los caracteres tipográficos) Mi gran elefante naranja
sans-serif Fuentes que carecen de serifas. Mi gran elefante naranaja
monospace Fuentes en las cuales cada caracter tiene el mismo ancho,  usadas frecuentemente en los listados de código de programa. Mi gran elefante naranja
cursive Fuentes que intentan emular la letra manuscrita. Mi gran elefante naranja
fantasy Fuentes que intentan ser decorativas. Mi gran elefante naranja

Listas de fuentes

Ya que no puedes garantizar la disponibilidad de las fuentes que deseas utilizar  (incluso una web font podría fallar por alguna razón), puedes proporcionar un lista de fuentes you can supply a lista de fuentes para que el navegador tenga múltiples fuentes entre las que elegir. Esto simplemente involucra al valor de font-family que debera consistir en una lista de varios nombres de fuente separados por comas.

p {
  font-family: "Trebuchet MS", Verdana, sans-serif;
}

En tal caso, el navegador comenzará al principio de la lista y verá si la primera fuente está disponible en la máquina. Si lo está la aplicará a los elementos seleccionados, y si no, lo intentara con el siguiente nombre de la lista, y así sucesivamente.

Es buena idea proporcionar un nombre de fuente genérica al final de la lista para que , en el caso de que ninguna de las fuentes deseadas esté disponible, el navegador pueda al menos proporcionar algo aproximadamente adecuado.

Para enfatizar este punto, los navegadores asignan a los parrafos  paragraphs la fuente serif por defecto si ninguna otra opción es posible (que es normalmente Time New Roman) y ¡esto no es bueno para una fuente sans-serif!

Note: Los nombres de fuente que constan de más de una palabra (como Trebuchet MS ) necesitan ser rodeadas por comillas, por ejemplo "Trebuchet MS".

Un ejemplo con font-family

Lets add to our previous example, giving the paragraphs a sans-serif font:

p {
  color: red;
  font-family: Helvetica, Arial, sans-serif;
}

This gives us the following result:

Font size

In our previous module's CSS values and units article, we reviewed length and size units. Font size (set with the font-size property) can take values measured in most of these units (and others, such as percentages), however the most common units you'll use to size text are:

  • px (pixels): The number of pixels high you want the text to be. This is an absolute unit — it results in the same final computed value for the font on the page in pretty much any situation.
  • ems: 1em is equal to the font size set on the parent element of the current element we are styling (more specifically, the width of a capital letter M contained inside the parent element.) This can become tricky to work out if you have a lot of nested elements with different font sizes set, but it is doable, as you'll see below. Why bother? It is quite natural once you get used to it, and you can use ems to size everything, not just text. You can have an entire website sized using ems, which makes maintenance easy.
  • rems: These work just like ems, except that 1rem is equal to the font size set on the root element of the document (i.e. <html>), not the parent element. This makes doing the maths to work out your font sizes much easier, but unfortunately rems are not supported in Internet Explorer 8 and below. If you need to support older browsers with your project, you can either stick to using ems or px, or use a polyfill such as REM-unit-polyfill

The font-size of an element is inherited from that element's parent element. This all starts with the root element of the entire document — <html> — the font-size of which is set to 16px as standard across browsers. Any paragraph (or other element that doesn't have a different size set by the browser) inside the root element will have a final size of 16px. Other elements may have different default sizes, for example an <h1> element has a size of 2ems set by default, so will have a final size of 32px.

Things become more tricky when you start altering the font size of nested elements. For example, if you had an <article> element in your page, and set its font-size to 1.5ems (which would compute to 24px final size), and then wanted the paragraphs inside the <article> elements to have a computed font size of 20px, what em value would you use?

<!-- document base font-size is 16px -->
<article> <!-- If my font-size is 1.5em -->
  <p>My paragraph</p> <!-- How do I compute to 20px font-size? -->
</article>

You would need to set its em value to 20/24, or 0.83333333ems. The maths can be complicated, so you need to be careful about how you style things. It is best to use rems where you can, to keep things simple, and avoid setting the font-size of container elements where possible.

A simple sizing example

When sizing your text, it is usually a good idea to set the base font-size of the document to 10px, so that then the maths is a lot easier to work out — required (r)em values are then the pixel font size divided by 10, not 16. After doing that, you can easily size the different types of text in your document to what you want. It is a good idea to list all your font-size rulesets in a designated area in your stylesheet, so they are easy to find.

Our new result is like so:

html {
  font-size: 10px;
}

h1 {
  font-size: 2.6rem;
}

p {
  font-size: 1.4rem;
  color: red;
  font-family: Helvetica, Arial, sans-serif;
}

Font style, font weight, text transform, and text decoration

CSS provides four common properties to alter the visual weight/emphasis of text:

  • font-style: Used to turn italic text on and off. Possible values are as follows (you'll rarely use this, unless you want to turn some italic styling off for some reason):
    • normal: Sets text to normal font (turns existing italics off.)
    • italic: Sets text to use the italic version of the font if available; if not available, it will simulate italics with oblique instead.
    • oblique: Sets text to use a simulated version of an italic font, created by slanting the normal version.
  • font-weight: Sets how bold the text is. This has many values available in case you have many font variants available (such as -light, -normal, -bold, -extrabold, -black, etc.), but realistically you'll rarely use any of them except for normal and bold:
    • normal, bold: Normal and bold font weight
    • lighter, bolder: Sets the current element's boldness to be one step lighter or heavier than its parent element's boldness.
    • 100900: Numeric boldness values that provide finer grained control than the above keywords, if needed. 
  • text-transform: Allows you to set your font to be transformed. Values include:
    • none: Prevents any transformation.
    • uppercase: Transforms all text to capitals.
    • lowercase: Transforms all text to lower case.
    • capitalize: Transforms all words to have the first letter capitalized.
    • full-width: Transforms all glyphs to be written inside a fixed-width square, similar to a monospace font, allowing aligning of e.g. latin characters along with asian language glyphs (like Chinese, Japanese, Korean.)
  • text-decoration: Sets/unsets text decorations on fonts (you'll mainly use this to unset the default underline on links when styling them.) Available values are:
    • none: Unsets any text decorations already present.
    • underline: Underlines the text.
    • overline: Gives the text an overline.
    • line-through: Puts a strikethrough over the text.
    You should note that text-decoration can accept multiple values at once, if you want to add multiple decorations simultaneously, for example text-decoration: underline overline. Also note that text-decoration is a shorthand property for text-decoration-line, text-decoration-style, and text-decoration-color. You can use combinations of these property values to create interesting effects, for example text-decoration: line-through red wavy.

Añadamos un par de estas propiedades a nuestro ejemplo. Nuestro nueveo resultado es como este:

html {
  font-size: 10px;
}

h1 {
  font-size: 2.6rem;
  text-transform: capitalize;
}

h1 + p {
  font-weight: bold;
}

p {
  font-size: 1.4rem;
  color: red;
  font-family: Helvetica, Arial, sans-serif;
}

Text drop shadows

You can apply drop shadows to your text using the text-shadow property. Esto toma cuatro valores, como se muestra en siguiente ejemplo:

text-shadow: 4px 4px 5px red;

Las cuatro propiedades son las siguientes:

  1. The horizontal offset of the shadow from the original text — this can take most available CSS length and size units, but you'll most comonly use px. This value has to be included.
  2. The vertical offset of the shadow from the original text; behaves basically just like the horizontal offset, except that it moves the shadow up/down, not left/right. This value has to be included.
  3. The blur radius — a higher value means the shadow is dispersed more widely. If this value is not included, it defaults to 0, which means no blur. This can take most available CSS length and size units.
  4. The base color of the shadow, which can take any CSS color unit. If not included, it defaults to black.

Note: Positive offset values move the shadow right and down, but you can also use negative offset vaues to move the shadow left and up, for example -1px -1px.

Sombras múltiples

Puedes aplicar múltiples sombras al mismo texto incluyendo multiples valores de sombra separados por comas, por ejemplo:

text-shadow: -1px -1px 1px #aaa,
             0px 4px 1px rgba(0,0,0,0.5),
             4px 4px 5px rgba(0,0,0,0.7),
             0px 0px 7px rgba(0,0,0,0.4);

Si aplicamos esto al elemento <h1> en nuestro ejemplo Tommy the cat , obtendríamos esto:

Nota: Puedes ver más interesantes ejemplos del uso de  text-shadow en el artículo de Sitepoint Moonlighting with CSS text-shadow.

Text layout

With basic font properties out the way, let's now have a look at properties we can use to affect text layout.

Text alignment

The text-align property is used to control how text is aligned within its containing content box. The available values are as follows, and work in pretty much the same way as they do in a regular word processor application:

  • left: Left justifies the text.
  • right: Right justifies the text.
  • center: Centers the text.
  • justify: Makes the text spread out, varying the gaps in between the words so that all lines of text are the same width. You need to use this carefully — it can look terrible, especially when applied to a paragraph with lots of long words in it. If you are going to use this, you should also think about using something else along with it, such as hyphens, to break some of the longer words across lines.

If we applied text-align: center; to the <h1> in our example, we'd end up with this:

Line height

The line-height property sets the height of each line of text — this can take most length and size units, but can also take a unitless value, which acts as a multiplier and is generally considered the best option — the font-size is multiplied to get the line-height. Body text generally looks nicer and is easier to read when the lines are spaced apart; the recommended line height is around 1.5–2 (double spaced.) So to set our lines of text to 1.5 times the height of the font, you'd use this:

line-height: 1.5;

Applying this to the <p> elements in our example would give us this result:

Letter and word spacing

The letter-spacing and word-spacing properties allow you to set the spacing between letters and words in your text. You won't use these very often, but might find use for them to get a certain look, or to improve the legibility of a particularly dense font. They can take most length and size units.

So as an example, if we applied the following to the first line of the <p> elements in our example:

p::first-line {
  letter-spacing: 2px;
  word-spacing: 4px;
}

We'd get the following:

Other properties worth looking at

The above properties give you an idea of how to start styling text on a webpage, but there are many more properties you could use. We just wanted to cover the most important ones here. Once you've become used to using the above, you should also explore the following:

Font styles:

Text layout styles

  • text-indent: Specify how much horizontal space should be left before the beginning of the first line of the text content.
  • text-overflow: Define how overflowed content that is not displayed is signaled to users.
  • white-space: Define how whitespace and associated line breaks inside the element are handled.
  • word-break: Specify whether to break lines within words.
  • direction: Define the text direction (This depends on the language and usually it's better to let HTML handle that part as it is tied to the text content.)
  • hyphens: Switch on and off hyphenation for supported languages.
  • line-break: Relax or strengthen line breaking for Asian languages.
  • text-align-last: Define how the last line of a block or a line, right before a forced line break, is aligned.
  • text-orientation: Define the orientation of the text in a line.
  • word-wrap: Specify whether or not the browser may break lines within words in order to prevent overflow.
  • writing-mode: Define whether lines of text are laid out horizontally or vertically and the direction in which subsequent lines flow.

Font shorthand

Many font properties can also be set through the shorthand property font. These are written in the following order:  font-style, font-variant, font-weight, font-stretch, font-size, line-height, and font-family.

Among all those properties, only font-size and font-family are required when using the font shorthand property.

A forward slash has to be put in between the font-size and line-height properties.

A full example would look like this:

font: italic normal bold normal 3em/1.5 Helvetica, Arial, sans-serif;

Active learning: Playing with styling text

In this active learning session, we don't have any specific exercises for you to do: we'd just like you to have a good play with some font/text layout properties, and see what you can produce! You can either do this using offline HTML/CSS files, or enter your code into the live editable example below.

If you make a mistake, you can always reset it using the Reset button.

Summary

We hoped you enjoyed playing with text in this article! The next article will give you all you need to know about styling HTML lists.

In this module

 

Etiquetas y colaboradores del documento

Colaboradores en esta página: joseanpg
Última actualización por: joseanpg,