Codigos CSS 2
Codigos CSS 2
Y puede que te preguntes qué es un bloque. Como bloque puede entenderse todo lo
comprendido dentro de elementos con cierre, como <body> </body>, <p> </p>, <form>
</form>, <table> </table>, <td> </td>, <div> </div>, etc., y al aplicar estilos con CSS
no es buena idea escribir nada fuera de estos elementos. En lugar de ser un nombre de
elemento HTML, un bloque también puede tener un nombre definido por el
programador, por ejemplo "menu", y generalmente son éstos los que contienen en su
interior a los anteriores o a otros bloques definidos por el usuario. El número de bloques
en una página puede ser muy elevado (más de mil), y dependerá de la capacidad del
navegador utilizado.
Veamos cómo funciona cada cosa:
Los Márgenes de bloque son el espacio comprendido entre el bloque y el borde de la
ventana activa del navegador. Se controla con el atributo margin.
Los Bordes de bloque, sin aplicar estilos, no son visibles, y es como un cuadro
imaginario que envuelve todo el contenido del bloque. Su atributo de control es border.
Espaciado interno del bloque es la distancia entre el borde del bloque y su contenido.
Es el atributo padding (en inglés significa algo así como "acolchado")
El Estilo y color de los bordes, son evidentes: son las líneas que delimitan el bloque,
que pueden dibujarse de varias formas en cuanto a tipo de trazo, grosor y color. Estos
dos atributos también pueden actuar sobre los bordes de otros elementos contenidos
dentro de un bloque, como formularios, tablas, gráficos, etc.
El Color del fondo se controla con las mismas instrucciones que las de la página
HTML: background. Los parámetros de color, al igual que en HTML, se pueden
escribir con su nombre (en inglés) o con la notación RGB en hexadecimal.
El Tamaño son las dimensiones del bloque. Si no se indican dimensiones, por defecto,
el bloque ocupará todo el ancho de la ventana, y de alto lo que su contenido precise. Se
utilizan dos atributos para controlarlo: width para el ancho y height para el alto.
<HTML>
<HEAD><TITLE>Estilos</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="[Link]">
</HEAD>
<BODY>
</BODY>
</HTML>
Se obtiene:
Texto fuera de párrafo.
Segunda línea fuera de párrafo.
Texto De Párrafo.
Segunda Línea De Párrafo
Fíjate en la gran diferencia de estilo que hay entre las dos primeras líneas y las dos
siguientes. Analicemos cómo funciona: Las dos primeras líneas de texto, en color verde,
tienen todos sus valores por defecto, excepto el color que lo reciben de la
etiqueta BODY definida en la css. Las dos siguientes, en rojo, reciben todas sus
características de la etiqueta P, también definida en la css. Como puedes ver, hay una
gran cantidad de atributos que actúan sobre el estilo de ese texto.
color:red; Este ya lo conocemos. Define el color del texto. El color deseado puede
escribirse directamente, en inglés, o puede utilizarse el sistema RGB en hexadecimal.
Por ejemplo, este mismo color rojo en RGB sería: #FF0000; Ciertos valores, como el
rojo, pueden escribirse de forma abreviada: #F00; Otra forma de declarar el color es
mediante la función rgb() que puede parametrizarse en decimal o en tantos por ciento.
He aquí un ejemplo con las cuatro formas del color rojo:
color: #ff0000
color: #f00
color: rgb(255,0,0)
color: rgb(100%, 0%, 0%)
Recuerda que en el índice tienes unas tablas con los nombres y códigos de los colores.
font-size:20px; También muy conocido: define el tamaño de los caracteres. Además
del tamaño definido por el usuario, expresado en cualquiera de las unidades de medida
conocidas, puede tener alguno de los siguientes valores absolutos: xx-large x-large
large medium small x-small xx-small.
font-family:Courier; Indica el nombre (o nombres) del tipo de letra que se va a
emplear. En el ejemplo se ha utilizado el tipo "Courier", pero pueden escribirse varios
separados por comas, lo que indica al navegador que si no existe en la máquina el primer
tipo, utilice el segundo, y si tampoco, el tercero, etc. Por ejemplo: font-
family:Courier,Verdana,Arial;
Cuando definas tipos de letra, recuerda que muchos programas y algunos drivers de
impresora instalan sus propias fuentes en el sistema sin avisarte, y puede que en tu
máquina haya tipos que no son estándar en Windows. No se deben utilizar tipos extraños
que difícilmente se encontrarán en las máquinas de los clientes, es decir, el tipo de
fuente indicado en la hoja simplemente le indica al navegador qué fuente debe usar, NO
se la sirve. En la versión 3 de CSS parece que se podrá indicar al cliente dónde obtener
una fuente que no tenga instalada.
font-weight:bold; Aquí se especifica el peso o grosor de la fuente. Pueden emplearse
literales como lighter, normal (por defecto) o bold. También se pueden utilizar
números entre 100 y 900, escritos de 100 en 100 (no sirve 190, pero sí 200). Los pesos
no tienen los mismos resultados en todas las máquinas, ya que depende mucho de la
calidad de su pantalla, de su resolución, del navegador que emplea... En cualquier caso,
no deben hacerse combinaciones extrañas, como definir un size muy pequeño y darle
peso 900, ya que lo único que conseguirás es un borrón perfectamente ilegible.
font-style:italic; Solamente tiene dos posibilidades: normal (por defecto) o italic que
es el empleado en el ejemplo que estamos analizando, y que hace que el texto tenga
cierta inclinación.
line-height:30px; Sirve para establecer la distancia entre líneas consecutivas de un
mismo párrafo. Además de en píxels o alguna de las unidades de medida que ya
conocemos, puede indicarse con un simple número que viene a indicar,
aproximadamente, cuantas anchuras de línea se tomarán como unidad de medida para
separar una línea de otra. Así, por ejemplo, si pones 0 la segunda línea se suporpone a la
primera.
letter-spacing:5px; Establece la separación entre los caracteres de la línea.
word-spacing:5px; Establece la separación entre las palabras de la línea.
text-decoration:underline; Con este parámetro, que no influye en el tamaño, puedes
acompañar al texto de una delgada línea decorativa que puede estar en tres posiciones
distintas, como underline (el típico subrayado debajo de la línea), through (en el centro
de la línea -tachado-) o overline (encima del texto). Para que no aparezca se
utiliza none (por defecto). El valor none se puede utilizar para eliminar el efecto de
subrayado que ponen otros elementos, como ocurre en los links.
text-transform:capitalize; Curioso efecto que provee de cuatro
posibilidades: capitalize que convierte en mayúscula la primera letra de cada palabra del
texto, como puedes ver en el ejemplo, donde el texto original no es así. uppercase para
convertir todas las letras a mayúsculas y lowercase para lo contrario, es decir, convertir
todas las letras a minúsculas. El valor por defecto es none, que como ya habrás
supuesto, deja el texto tal como está escrito.
text-align:left; Alinea el texto según convenga. Con left a la izquierda (por
defecto), right a la derecha, center centrado, y justify justificado, es decir, igualando
todas las líneas en longitud a izquierda o derecha.
text-indent:30px Produce que la primera línea del párrafo se escriba adentrada
(indentada) un cierto espacio hacia la derecha o hacia la izquierda, dependiendo de la
alineación activa.
Este sería un resumen sobre la declaración font:
Declaración font-size font-family font-weight font-style
Valor por Definido por el
medium normal normal
defecto usuario
normal, lighter,
Absoluto, relativo,
Familia de fuente bolder, normal, bold,
Valores posibles porcentaje,
Windows un valor entre 100 y italic
unidad de tamaño
900
Valor Se calcula respecto al
No aplicable No aplicable No aplicable
porcentual padre
Se aplica a Todos Todos Todos Todos
Se hereda? Sí Sí Sí Sí
Y este sobre el resto:
Declaración line-height text-decoration text-transform text-align text-indent word-spacing letter-spacing white-space
Valor por
normal none none left 0 normal normal normal
defecto
número, capitalize, left, right, normal, pre,
none, normal, normal,
Valores longitud, uppercase, center, longitud, nowrap, pre-
underline, line- inherit, inherit,
posibles porcentaje, lowercase, justify, porcentaje wrap, pre-
through, blink medida medida
normal none, inherit none line, inherit
Valor Se calcula No aplicable No aplicable No Se calcula No aplicable No aplicable No aplicable
porcentual respecto al aplicable respecto al
tamaño de ancho del
la fuente elemento
padre
Elementos Elementos Elementos
Se aplica a a nivel de Todos Todos a nivel de a nivel de Todos Todos Todos
bloque bloque bloque
Se hereda? Sí No Sí Sí Sí Sí Sí Sí
Tenemos también otras instrucciones que pueden modificar el aspecto de determinadas
zonas en lugar de actuar sobre todo el bloque.
Son los pseudo-elementos. Por ejemplo:
p :first-letter{
color:red;
}
p :first-line{
color:green;
}
p :after{
content:"Hola";
}
p :before{
content:"Por ejemplo:";
}
Bordes de un bloque
Con css se pueden definir los bordes de un bloque, que por defecto son invisibles. Por
tanto, lo primero que hay que definir es el estilo del borde. Además del estilo, se puede
definir su color y grosor, y todo ello puede hacerse globalmente, sobre los cuatro lados
del bloque, o cada uno por separado. Las unidades de medida y los nombres o códigos
de colores que pueden utilizarse, son los mismos que ya se han visto anteriormente para
los textos. Para definir el grosor de los bordes tenemos:
•border-left-width:unidad borde izquierdo
•border-right-width:unidad borde derecho
•border-top-width:unidad borde superior
•border-bottom-width:unidad borde inferior
•border-width:unidad los cuatros bordes
Donde unidad es una de las ya conocidas, por ejemplo 1px. También pueden utilizarse
constantes tales como thin para fino (2px), medium para medio (4px), y thick para
grueso (6px).
Ningun estilo de bordes (excepto solid) se lleva bien con el parámetro de grosor, que
implícitamente establece su dimensionado más conveniente. Tenemos:
•border-left-style:estilo borde izquierdo
•border-right-style:estilo borde derecho
•border-top-style:estilo borde superior
•border-bottom-style:estilo borde inferior
•border-style:estilo los cuatros bordes
Donde estilo puede ser:
•none (por defecto)
•solid
•double
•ridge
•groove
•inset
•outset
•dotted
•dashed
Por último, los parámetros de color de los bordes:
•border-left-color:color borde izquierdo
•border-right-color:color borde derecho
•border-top-color:color borde superior
•border-bottom-color:color borde inferior
•border-color:color los cuatros bordes
Donde color puede ser un nombre de color, en inglés, o su código RGB en hexadecimal,
como ya sabes.
Las combinaciones de todos estos parámetros son infinitas, y lo mejor es ir haciendo
pruebas. Recuerda que cada nevegador interpreta todo esto a su manera, y algunos no lo
interpretan en absoluto. He aquí aplicado al ejemplo anterior sobre texto:
Si escribimos la siguiente hoja de estilo [Link]:
BODY {color:green }
P {color:red;
font-size:20px;
font-family:Courier;
font-weight:bold;
font-style:italic;
line-height:30px;
letter-spacing:5px;
text-decoration:underline;
text-transform:capitalize;
text-align:left;
text-indent:30px;
border-width:2px;
border-color:blue;
border-style:solid;
}
Se obtiene:
Texto fuera de párrafo.
Segunda línea fuera de párrafo.
Texto De Párrafo.
Segunda Línea De Párrafo
width:100px;
height:100px;
}
Y este texto:
<P>Esto es un ejemplo de bloque de reducidas dimensiones que ocupa solamente 100 x
100 pixels</P>
Dependiendo del navegador utilizado, esta sintaxis provocará varios resultados:
Internet Explorer Opera Netscape/Mocilla
Como puedes ver, los tres navegadores dan preferencia al texto, y luego... hacen lo que
pueden. Es evidente que la instrucción que se les ha dado no es muy coherente, y para
intentar solucionar el fiasco, se puede recurrir a un nuevo atributo: overflow que tiene
cuatro parámetros:
•visible Indica que el contenido no será recortado a los límites del bloque, es
decir, que puede ser presentado fuera de la caja de bloque ignorando sus límites.
Este valor provoca el mismo comportamiento del navegador que si no se utiliza el
atributo overflow
•hidden Lo contrario del anterior. El contenido que no quepa dentro de los límites
del bloque será recortado y no será visible ni accesible.
•scroll Mantiene las dimensiones definidas para el bloque, y provee de barras de
escroll horizontal y vertical para todo el contenido que exceda los límites del
bloque.
•auto Parecido al anterior. En lugar de crear barras de scroll tanto vertical como
horizontal, incluso aunque alguna de ellas no sea necesaria, decide
automáticamente cuales son precisas.
Veamos un ejemplo utilizando scroll:
P {color:red;
font-size:20px;
font-family:Courier;
border:2px;
border-color:blue;
border-style:solid;
width:100px;
height:100px;
overflow: scroll
}
Se obtiene:
Esto es un ejemplo de bloque de reducidas dimensiones que ocupa solamente 100 x 100 pixels
Si se utiliza el parámetro hidden puede ocurrir que interese recortar una parte del bloque
en lugar de utilizar toda el área resultante. No necesariamente el área a recortar debe
provenir de hidden, puede ser un bloque cualquiera, con overflow o no. Para hacer un
recorte de un bloque se utiliza la propiedad clip: Por ejemplo:
clip: rect(0,100px,100px,0);
El parámetro rect indica la forma geométrica que se va a recortar. Actualmente sólo está
disponible el rectángulo. El resto del parámetro son dos ejes de coordenadas:
0,100px,100px,0 que corresponden con los vértices superior derecho e inferior
izquierdo respectivamente.
background: yellow;
}
Esto es un ejemplo de bloque de reducidas dimensiones que ocupa solamente 200 x 100 pixels con
fondo de color.
Como es habitual en HTML, los colores pueden definirse con su nombre en inglés o con
la notación RGB en hexadecimal. En este caso, el color amarillo del ejemplo puede
obtenerse también con background: #FFFF00; el color del fondo de cualquier elemento
también puede ser transparent (por defecto). La propiedad color no se hereda, pero
puede forzarse de la forma habitual: inherit
Si en lugar de un color le quieres poner un gráfico la sintaxis será:
background-image: url(../imgenes/[Link]);
Esta opción tiene tres parámetros:
•repeat no-repeat repeat-y repeat-x repeat (por defecto) hace que la
imagen se repita tanto en horizontal como en vertical por todo el bloque.
Dependiendo del tamaño del gráfico se puede conseguir un efecto mosaico o una
sola imagen estática. Para que solamente se repita en horizontal se utiliza repeat-
x, y para que lo haga en vertical repeat-y.
•attachment: fixed attachment: scroll , el valor fixed sirve para que la
imagen se quede fija al hacer scroll con el texto, con lo que parece que el texto
"flota" sobre la imagen. Para que la imagen acompañe al texto en su
desplazamiento se utilizará scroll (por defecto).
•position Indica la posición del gráfico dentro del bloque. Si no se indica otra
cosa, por defecto éste será colocado en el ángulo superior izquierdo del bloque.
Para variar su posición se pueden escribir las coordenadas deseadas de la esquina
superior izquierda del gráfico en píxels o en tantos por ciento respecto al total del
bloque.
Estos tres parámetros adicionales (si se utilizan) hay que escribirlos después de haber
indicado la imagen a emplear como fondo. Por ejemplo:
P {color:red;
font-size:10px;
font-family:Courier;
border:2px;
border-color:blue;
border-style:solid;
width:200px;
height:100px;
background-image: url([Link]);
background-attachment: fixed;
background-repeat: repeat;
}
Esto es un ejemplo de bloque de reducidas dimensiones que ocupa solamente 200 x 100 pixels con
fondo gráfico.
p {color:red;
font-size:10px;
font-family:Verdana;
border:2px;
border-color:blue;
border-style:solid;
width:200px;
height:100px;
}
Se obtiene:
texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto
texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto
texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto
texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto
texto texto texto texto
Después de haber utilizado una instrucción float en un bloque, para cerrar su efecto
sobre la alineación de los objetos hay que escribir otra en el siguiente bloque: clear que
también tiene un parámetro con tres posibles valores: left right both Evidentemente,
habrá que utilizar left o right según se haya definido el float anterior, y si se han incluido
los dos, se utilizará both (ambos).
Recuerda que las instrucciones de posicionamiento y dimensionado cada navegador las
interpreta a su manera, y como siempre, se deberán probar con los navegadores más
habituales hasta dar con los parámetros que mejor funcionen en todos ellos (y esto puede
llevar su tiempo...).
Posición y visibilidad de los bloques
Cuando un navegador carga una página, generalmente, interpretará el código HTML
siguiendo el mismo orden en que fue escrito. A este orden natural de aparición de los
elementos se le llama flujo. Viene a ser como ir apilando un elemento encima de otro al
tiempo que se asigna un número de índice a cada uno, de forma que el que tenga el
número más alto aparecerá más cerca del espectador. Es posible alterar el flujo de una
página, es decir, que un elemento aparezca delante de otro que fue escrito después. Para
ello simplemente hay que cambiarle el número que tiene en la pila con la propiedad z-
index = n, donde n es un número entero positivo o negativo.
Cuando se altera el orden de la pila, los elementos hijos del elemento reasignado
heredarán el mismo nuevo número de índice de su padre en la pila. Por ejemplo:
Sea una página que contiene dos elementos A y B. A con z-index = 4 y B con z-index =
3, A será procesado por encima de B. Supongamos que A tiene un descendiente C con z-
index = 1. El elemento C también será procesado por encima de B aunque B tenga z-
index = 3. Todos los elementos descendientes de A se situarán por encima de B y por
encima de todos los descendientes de B.
La propiedad z-index solamente funciona si los elementos han sido previamente
colocados utilizando una instrucción de tipo de posicionamiento: position: valor;
Declaración position
Valor por defecto static
static
relative
Valores posibles absolute
fixed
inherit
Valor porcentual No aplicable
Se aplica a Todos
Se hereda?: No
Si se utiliza static, como su nombre indica, no se puede modificar la posición natural de
los elementos. Si se quiere mover un elemento de su posición natural hay que utilizar los
valores relative o absolute.
En este ejemplo de posicionamiento relativo, al segundo elemento se le aplica un
desplazamiento de 5 px por arriba y por la izquierda, lo que da por resultado que invada
parte del espacio del elemento 3 y se salga del contenedor por la derecha, es decir, que
los posicionamientos relativos de un elemento solamente afectan a ese elemento,
mientras que el resto continua manteniendo sus posiciones normales en el flujo.
BLOQUE 1
BLOQUE 2
BLOQUE 3
Este es el código necesario:
<div style="position: relative; border: 2px solid red; width: 200px;">
<div style="background: #0000ff; color: white;"> BLOQUE 1</div>
<div style="position: relative; top: 5px; left: 5px;
background: #00a0a0; color: white;">BLOQUE 2</div>
<div style="background: #ffc0c0; color: white;">BLOQUE 3</div>
</div>
Y puede que te preguntes de dónde han salido las instrucciones top y left. Pues son dos
de las cuatro direcciones en que se pueden mover los bloques, y junto
con bottom y rigth nos permitirán indicar la dirección de los movimientos tanto
absolutos como relativos. Fíjate en que estas cuatro instrucciones no indican en qué
dirección se moverá el elemento, sino el espacio que se dejará libre antes de procesar el
elemento.
Veamos ahora qué ocurre si el desplazamiento indicado es absolute:
BLOQUE 1
BLOQUE 2
BLOQUE 3
Como puedes ver, en este caso el espacio abandonado por el elemento 2 no queda libre,
y ha sido optimizado por el bloque contenedor, superponiéndose el bloque 2 sobre el 1 y
el 3. El bloque 2, además, ha perdido la longitud que heredaba del bloque contenedor, y
que si se quiere mantener, será necesario forzar la herencia con width: inherit;
Este es el código:
<div style="position: relative; border: 2px solid red; width: 200px;">
<div style="background: #0000ff; color: white;"> BLOQUE 1</div>
<div style="position: absolute; top: 10px; left: 85px; width: inherit;
background: #00a0a0; color: white;">BLOQUE 2 </div>
<div style="background: #ffc0c0; color: white;">BLOQUE 3</div>
</div>
CSS + JavaScript
La combinación de CSS y JavaScript es una poderosa herramienta para que las páginas
resulten mucho más dinámicas.
En este ejemplo se consigue que un bloque sea sustituido por otro al pulsar el botón de
un formulario. Pude hacerse con un link, o con cualquier otro elemento. Solamente hay
que capturar el evento correspondiente.
BLOQUE 1
BLOQUE 2
BLOQUE 3
Ver código Ver bloque
a {text-decoration: none;}
Donde link indica que el enlace no ha sido visitado, visited que el enlace ha sido
visitado, active que el enlace está siendo pulsado, y hover que el ratón está pasando
sobre él (sin pulsar).
Botón transparente
Borde simple Borde doble Solo lectura sin borde
Se escribe así:
<FORM METHOD="GET" ACTION="">
</FORM>
En los formularios se puede cambiar el estilo de los bordes de los controles, pero no el
grosor como se hace en los bloques de texto. Un formulario se puede considerar un
bloque, por lo que también es posible cambiar el color del fondo, definir bordes, etc. Por
supuesto, todo esto también es aplicable a las tablas, imágenes y al resto de elementos
html.
Se obtiene:
Prueba de texto sombreado
Prueba de texto sombreado
Y si en lugar de escribir una hoja css prefieres hacerlo con estilo embebido en el HTML,
este es el código:
<DIV ALIGN="CENTER" STYLE="margin-top:2px; margin-left:2px; color:black;
font-size:20px; font-family:Verdana;">Prueba de texto sombreado</DIV>
Tablas
Las tablas generadas con HTML tienen un serio problema de estética. En efecto, si los
bordes son visibles, su estilo es bastante tosco y pueden arruinar cualquier diseño.
Existen instrucciones en CSS para conseguir que las tablas tengan bastante mejor
aspecto. Se puede modificar cualquiera de sus componentes: bordes de la tabla, bordes
de las celdas, fondo, título, alineación, etc.
Declaración caption empty-cells border-collapse border-spacing table-layout white-space
Valor por
top show separate 00 auto normal
defecto
show cualquier normal
Valores top separate auto
hide unidad pre
posibles bottom collapse fixed
inherit de medida nowrap
Valor No
No aplicable No aplicable No aplicable No aplicable No aplicable
porcentual aplicable
Se aplica a table td th Todos Todos table Todos
Se hereda?: No Si Si Si No No
Además de estas declaraciones específicas están disponibles todas las que afectan a los
bordes, tanto de la tabla como de las celdas. Las combinaciones posibles de todas ellas
son tantas, que lo mejor es verlas sobre la marcha con el magnífico asistente disñado
por SONACON. El código obtenido, como siempre, es conveniente probarlo en los
navegadores más comunes, ya que suele haber notables diferencias de interpretación
entre ellos.