Apuntes CSS, hojas de estilo

Introducción
Componentes del léxico
Declaraciones
Niveles de definición
Comentarios
Herencia
Valores
Propiedades
Propiedades de fuentes
Propiedades color y background
Propiedades de texto
Propiedades de cuadros
Propiedades de clasificación
Propiedades de interfaz de usuario
Seudo clases/elementos
Seudo-clase ancla
Seudo-elemento primera línea
Seudo-elemento Primera letra
Capas
Propiedades para capas
Orden de Cascada
! important
Origen de las reglas
Regla especificidad
Orden de especificación

Introducción

CSS son las siglas de Cascade Style Sheet, que significa hojas de estilo en cascada.

Es una especificación por medio de la cual se intenta separar la lógica (el contenido) de un documento HTML (de la que se encarga el lenguaje HTML), de su presentación o apariencia (el formato).

CSS nos permite aplicar formato de modo mucho más exacto, con más posibilidades de presentación, y más unidades de medida.

CSS facilita la lectura del código para la búsqueda de errores, al poder separar el contenido con las instrucciones necesarias para darle estilo.

CSS es soportado a partir de la versión 4 de Netscape y la 3 de Microsoft, aunque no todo y no siempre de igual forma, por lo que debemos utilizar esta tecnología con cuidado.

Componentes del léxico

Declaraciones

La sintaxis utilizada en la definición de estilos es prácticamente HTML. Recordar que los nombres siempre empiezan por letra, y que los de elementos (etiquetas) y atributos no distinguen entre mayúsculas y minúsculas, pero los de entidades si.

Un selector es el elemento que está conectado a un estilo particular.

Cualquier elemento, o nombre de etiqueta, HTML es un posible selector CSS. Esta conexión se realiza mediante una declaración que asigna propiedades a un conector (o a varios que estén separados por comas) y a éstas un determinado valor.

selector { propiedad1:valor; ...;prop-n:valor" }
selector, ... selector-n { propiedad1:valor; ...;prop-n:valor" }

Un selector puede tener diferentes clases, permitiendo así al mismo elemento tener diferentes estilos

selector4.clase1 { propiedad1:valor; ...;prop-n:valor" }
selector4.clase2 { propiedad1:valor; ...;prop-n:valor" }

Las clases también pueden ser declaradas sin elementos asociados:

.clase1 { propiedad1:valor; ...;prop-n:valor" }

Los selectores de contexto son dos o mas selectores separados por espacios, en que solo se aplica el estilo al segundo cuanto esté dentro del primero.

Selector5 Selector6 { propiedad1:valor; ...;prop-n:valor" }

También es posible identificar un estilo por nombre, declarando un nombre único:

#nombre1 { propiedad1:valor; ...;prop-n:valor" }

Niveles de definición

Tenemos varias posibilidades para definir un estilo: especificarlo directamente en la etiqueta en la que queremos usarlo, definirlo aparte y aplicarlo en las etiquetas que queramos, o definir estilos globales para las etiquetas (que podrán ser cambiados en las que no se desee aplicarlos).

Para aplicar un estilo a una etiqueta concreta, usaremos el parámetro STYLE de la etiqueta:

<etiqueta STYLE="propiedad1:valor;...;prop-n:valor"> ... </etiqueta>

o el parámetro CLASS si hemos hecho declaración de clase:

<etiquetaCLASS=clase1> ... </etiqueta>

o el parámetroID si hemos hecho declaración de nombre:

<etiqueta ID=nombre1> ... </etiqueta>

Para que se aplique un mismo estilo a todas las etiquetas del documento, definiremos estilos globales por medio de la etiqueta <STYLE> y </STYLE>, dentro de la cabecera del documento (entre <HEAD> ... </HEAD>) como sigue:

<STYLE TYPE="text/css">
<!—
Selector1 {propiedad1:valor;...;propiedadn:valor }
Selector2, Selector3 {propiedad1:valor;...;propiedadn:valor}
Selector4.clase {propiedad1:valor;...;propiedadn:valor}
selector4.clase2 { propiedad1:valor; ...;propiedadn:valor}
.Clase1 {propiedad1:valor;...;propiedadn:valor}
Selector5 Selector6 {propiedad1:valor;...;propiedadn:valor}
#nombre1 { propiedad1:valor; ...;propiedadn:valor}
//-->
</STYLE>

Para secciones reducidas de una página, por ejemplo unas pocas palabras dentro de un párrafo, se utiliza la instrucción <SPAN></SPAN> con el parámetro style:

<p>texto <SPAN style="propiedad1:valor">texto con propiedad1</SPAN>as texto.</p>

Para definir divisiones o bloques de la página que incluyan una o mas instrucciones se utiliza la instrucción <DIV></DIV>. La sintaxis es similar a las anteriores.

<DIV>
<etiqueta …
<etiqueta …
...
</DIV>

Podemos incluso definir los estilos en un fichero aparte, distinto al documento HTML, y después referenciarlo desde varios documentos HTML. Esto lo haremos con la etiqueta <LINK>, dentro de la cabecera del documento (entre <HEAD> ... </HEAD>):

<LINK REL="stylesheet" TYPE="text/css" HREF="URL_Hoja.css">

Otra manera de importar una declaración externa de estilos CSS en por medio de import, que se utiliza para importar unas declaraciones de estilos guardadas en la ruta que se indica entre paréntesis debiéndose escribir en la primera línea de la declaración de estilos:

<style type="text/css">
@import url ("archivo_a_importar.css");
...
</style>

Comentarios

Los comentarios se indican dentro de hojas de estilo con las mismas convenciones usadas en la programación C.

/* LOS COMENTARIOS NO PUEDEN ANIDARSE */
//Comentario de una sola línea.

La notación

//-->

dentro de un bloque STYLE se utiliza para indicar a

Herencia

HTML establece una jerarquía de instrucciones de tal modo que unas contienen a otras, y nos dan una relación de herencia. La instrucción BODY, que hace referencia a todo el cuerpo del documento, podemos considerarla como la instrucción "padre", y dentro de ella todas las demás. Algunas de ellas a la vez, por ejemplo el párrafo es contenedora de otras instrucciones , como la negrita estableciéndose así una nueva relación "padre-hijo".

Atendiendo a esa relación, nos ahorramos establecer algunos parámetros en las instrucciones "hijas" dado que la mayoría de ellos se heredan. Sin embargo, si queremos, siempre podemos definir unos parámetros distintos para una instrucción "hija", de modo que en realidad solo se heredaran de la instrucción "padre" aquellos que no definamos en la instrucción "hija".

Atendiendo a los diferentes niveles de definición resulta que más de una declaración de estilos puede afectar a la misma instrucción. Para despejar las dudas que esto puede generar, siempre se tiene en cuenta la declaración de estilos más particular, siguiendo ese mismo orden de jerarquía de niveles de definición de estilos que hemos establecido en el apartado anterior.

Valores

Cualquier nombre que contenga un espacio en blanco deberá ser entrecomillado, con comillas simples o dobles.

Un valor de longitud se forma por un signo + o - opcional, seguido de un número y de una abreviación de dos letras que indica la unidad. Una longitud de 0 no necesita las dos letras para identificar la unidad. No hay espacios en un valor de longitud.

Las unidades relativas dan una longitud relativa a otra propiedad longitud, y se prefieren ya que se ajustarán mejor a medios diferentes. Las siguientes unidades relativas están disponibles:

Las unidades de longitud absolutas son muy dependientes del medio de salida, y son por lo tanto menos útiles que las unidades relativas. Las siguientes unidades absolutas están disponibles:

Un valor de porcentaje se forma por un signo + o - opcional, seguido de un número y de %. No hay espacios en un valor de porcentaje.

Un valor de color es una palabra clave o una especificación numérica RGB.

Las 16 palabras clave se toman de la paleta Windows VGA

Black #000000 Negro Green #008000 Verde
Silver #C0C0C0 Plateado Lime #00FF00 Verde lima
Gray#808080Gris Olive#808000Verde oliva
White#FFFFFFBlanco Yellow# FFFF00Amarillo
Maroon#800000Marrón Navy#000080Azul marino
Red#FF0000Rojo Blue#0000FFAzul
Purple#800080Púrpura Teal#008080Azul verdoso
Fuchsia#FF00FFFucsia Aqua#00FFFFCeleste

Las especificaciones numéricas RGB se dan en una de cuatro maneras:

Un valor URL es dado por url(foo), donde foo es la URL. La URL puede ser opcionalmente entrecomillada con comillas simples (') o dobles (") y puede contener espacios en blanco.

selector { propiedad: url("ruta-nombre archivo.ext") }

El valor expresado como inherit significa que el elemento toma el mismo valor computado que la propiedad del padre del elemento. De este modo, se refuerza explícitamente el valor heredado. Pero, además, este valor se aplica aún a propiedades que de otro modo no serían heredadas.

Propiedades

Propiedades de fuentes

Propiedad Valores (en negrita valor inicial) Obs
font-family nombre de familia | nombre de familia genérica Pueden ponerse varios nombres separados por comas.
font-stylenormal | italic | oblique Estilo fuente
font-variant normal | small-caps Variante mayúsculas
font-weight normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 Grosor de la fuente. Los valores bolder y lighter son relativos al peso de la fuente heredada.
font-size xx-small | x-small | small | medium | large | x-large | xx-large | larger | smaller | Longitud | Porcentaje Tamaño. Porcentaje, larger y smaller son relativos al elemento padre.
font Valores de style, variant, weight, size, height, line-height y family Forma rápida para varias propiedades de las fuentes.

Propiedades color y background

Propiedad Valores (en negrita valor inicial) Obs
color Color Color del primer plano
background-color Color | transparent Color de fondo
background-image URL | none Imagen de fondo
background-repeat repeat | repeat-x | repeat-y | no-repeat El valor repeat-x repetirá la imagen horizontalmente, repeat-y verticalmente.
background-attachment scroll | fixed Desplazamiento imagen
background-position Porcentaje | Longitud | n,n | top | center | bottom | left | center | right Posición del fondo. Se aplica a elementos de nivel bloque y elementos reemplazados
background Valores de background-color, background-image, background-repeat, background-attachment y background-position Forma rápida para varias propiedades del fondo

Propiedades de texto

Propiedad Valores (en negrita valor inicial) Obs
word-spacing normal | Longitud Espacio entre palabras.
letter-spacing normal | Longitud Espacio entre letras.
text-decoration none | underline | overline | line-through | blink Decoración del texto.
vertical-align baseline | sub | super | top | text-top | middle | bottom | text-bottom | Porcentaje Alineación vertical. Se aplica a elementos en línea.
text-transform none | capitalize | uppercase | lowercase Transformación del texto
text-align left | right | center | justify Alineación
text-indent Longitud | Porcentaje Sangría
line-height normal | n | Longitud | Porcentaje Altura de interlineado

Propiedades de cuadros

Al definir una porción o bloque en las hojas de estilo se considera rodeado por una caja o cuadro, con propiedades de alineación, ancho, margen, borde, padding y fondo.

Propiedad Valores (en negrita valor inicial) Obs
margin-top Longitud | Porcentaje | auto Margen superior
margin-right Longitud | Porcentaje | auto Margen derecho
margin-bottom Longitud | Porcentaje | auto Margen inferior
margin-left Longitud | Porcentaje | auto Margen izquierdo
margin Longitud | Porcentaje | auto Establece márgenes especificando entre uno y cuatro valores
padding-top Longitud | Porcentaje Relleno superior
padding-right Longitud | Porcentaje Relleno derecho
padding-bottom Longitud | Porcentaje Relleno inferior
padding-left Longitud | Porcentaje Relleno izquierdo
padding Longitud | Porcentaje Establece relleno especificando entre uno y cuatro valores
border-top-width thin | medium | thick | Longitud Ancho borde superior
border-right-width thin | medium | thick | Longitud Ancho borde derecho
border-bottom-width thin | medium | thick | Longitud Ancho borde inferior
border-left-width thin | medium | thick | Longitud Ancho borde izquierdo
border-width thin | medium | thick | Longitud Establece el ancho del borde especificando entre uno y cuatro valores
border-color Color Color del borde. Se puede especificar entre uno y cuatro valores
border-style none | dotted | dashed | solid | double | groove | ridge | inset | outset Estilo del borde. Se puede especificar entre uno y cuatro valores
border-top Valores de border-width, border-style y border-color Borde superior. Ancho, estilo y color
border-right Valores de border-width, border-style y border-color Borde derecho. Ancho, estilo y color
border-bottom Valores de border-width, border-style y border-color Borde inferior. Ancho, estilo y color
border-left Valores de border-width, border-style y border-color Borde izquierdo. Ancho, estilo y color
border Valores de border-width, border-style y border-color Ancho, estilo y color del borde.
width Longitud | Porcenaje | auto Ancho. Se aplica a elementos de nivel bloque y elementos reemplazados.
height Longitud | auto Altura. Se aplica a elementos de nivel bloque y elementos reemplazados.
float left | right | none Flotar. Permite ajustar texto alrededor de un elemento.
clear none | left | right | both Despejar. Permitir elementos flotantes a los lados.

Propiedades de clasificación

Propiedad Valores (en negrita valor inicial) Obs
display block | inline | list-item | none Visualización
white-space normal | pre | nowrap Espacio en blanco
list-style-type disc | circle | square | decimal | lower-roman | upper-roman | lower-alpha | upper-alpha | none Tipo de viñeta
list-style-image URL | none Imagen para la viñeta
list-style-position inside | outside Posición de las líneas sucesivas de listas.
list-style Valores de propiedades list-style-type, list-style-position y list-style-image Forma rápida para varias propiedades de estilo de lista.

Propiedades de interfaz de usuario

Propiedad Valores (en negrita valor inicial) Obs
cursor auto | crosshair | default | hand | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize| text | wait | help | URL | inherit Forma del cursor. Las letras de resize indican los puntos cardinales.
outline-color Color | invert | inherit Color del contorno
outline-style none | dotted | dashed | solid | double | groove | ridge | inset | outset | inherit Estilo del contorno
outline-width thin | medium | thick | Longitud | inherit Ancho del contorno
outline Valores de outline-color, outline-style, outline-width | inherit Forma rápida para varias propiedades de contorno.

Seudo clases/elementos

La seudo-clase distingue los diferentes tipos de un mismo elemento y el seudo-elemento se refiere a una parte de un elemento. Ambas son componentes especiales reconocidos automáticamente por los navegadores que soportan CSS.

Seudo-clase ancla

La variación del estilo de los enlaces es de lo mas utilizado.

A:link { propiedad1:valor; ... propiedadn:valor }

Podemos dar estilo de forma independiente o en conjunto, separando las seudo-clases con comas.

Seudo-elemento primera línea

Un seudo-elemento first-line puede usarse en cualquier elemento de nivel de bloque (como P, H1, etc.). Un ejemplo de un seudo-elemento first-line sería:

P:first-line { font-variant:small-caps; font-weight:bold }

Seudo-elemento Primera letra

El seudo-elemento first-letter se emplea para crear letras capitales y otros efectos.

La primera letra de texto dentro del selector asignado se representará de acuerdo al valor asignado. Un seudo-elemento first-letter puede usarse en cualquier elemento de nivel de bloque. Por ejemplo:

P:first-letter { font-size:300%; float:left }

crearía una letra capital tres veces mayor que el tamaño normal de fuente.

Capas

Una capa es una división, una parte de la página, que tiene un comportamiento muy independiente dentro de la ventana del navegador.

Las etiquetas LAYER e ILAYER tienen como objetivo construir capas, pero estas no son compatibles más que con Netscape, por lo que es recomendable utilizar la etiqueta DIV, con el parámetro ID para su identificación.

En el uso de capas se basan muchos de los efectos más comunes del HTML dinámico.

Propiedades para capas

Una capa puede tener cualquiera de los estilos vistos pero existen una serie de propiedades específicas que sirven para posicionar la división en la página como una capa.

Propiedad Valores (en negrita valor inicial) Obs
position relative | absolute Posición relativa al lugar donde se estaba escribiendo en la página en el momento de escribir la capa con su etiqueta, o absoluta desde el punto superior izquierdo de la página.
top longitud, porcentaje Distancia desde el borde superior
left longitud, porcentaje Distancia desde el borde izquierdo
height longitud Tamaño de la capa (altura)
width longitud Anchura de la capa
visibility visible | hidden | nherit Visibilidad de la capa
z-index número Nivel de profundidad de la capa
clip rect(top, right, bottom, left) Determinar áreas de recorte

Orden de Cascada

Cuando se usan varias hojas de estilo, puede haber un conflicto sobre cual controla a un selector en particular. Las reglas de prelación de CSS son las siguientes:

! important

Un estilo designado como ! important prevalecerá sobre estilos contradictorios de similar nivel.

La especificación se hace como si fuese un atributo, p.e.

BODY { background: url(bar.gif) white; background-repeat:repeat-x ! important }

Origen de las reglas

Tanto los autores como los lectores tienen la capacidad de especificar hojas de estilo. Cuando hay un conflicto entre reglas, las reglas del autor prevalecerán sobre las reglas del lector de similar peso.

Tanto las hojas de estilo del autor como las del lector primarán sobre las hojas de estilo incorporadas del navegador.

Cualquier regla ! important prevalecerá sobre las reglas normales, por lo que se aconseja a los autores usar reglas normales casi exclusivamente, para asegurar que los usuarios con necesidades especiales de estilos puedan leer la página.

Regla especificidad

Un estilo más específico siempre prevalecerá sobre uno menos específico.

Es más específico un estilo dependiendo del número de

  1. atributos ID en el selector.
  2. atributos CLASS en el selector.
  3. nombres de etiquetas HTML en el selector.

Orden de especificación

Para hacerlo sencillo, cuando dos reglas tienen el mismo peso, prima la última regla especificada.