Los elementos multimedia que ofrece HTML5 permiten añadir audio y vídeo a una web, e incluso acceder a la cámara del PC o de dispositivos móviles para grabar vídeos o hacer fotografías
Durante muchos años estos elementos fueron demandados por los desarrolladores, ya que únicamente era posible reproducir elementos multimedia mediante plugins o addons que debían estar previamente instalados en el navegador
A partir del estándar HTML5 fueron incluidos los elementos:
video
incrusta un vídeo en la página web
audio
incrusta un clip de audio en la página web
La única restricción es que sólo podemos referenciar un archivo (para lo que usaremos su atributo src)
Pero permite incluir más de un formato de codificación (para lo que usaremos elementos source)
La inclusión de los elementos source es debido a las incompatibilidades entre los formatos de codificación de audio o vídeo admitidos por cada navegador, ya que debido a las distintas licencias, todavía no hay un estándar claro para internet
Actualmente, los formatos de audio más compatibles con los navegadores son:
WAV
también conocido como WAVE es un formato de audio digital sin compresión de datos
Fue desarrollado por Microsoft e IBM
OGG
es el contenedor utilizado por los codecs digitales con pérdida:
Opus
es un formato de código abierto
Está estandarizado por el Internet Engineering Task Force (IETF)
Vorbis
es un formato de código abierto
Fue desarrollado por Xiph.org
MP3
formato de compresión de audio digital
Fue desarrollado por Moving Picture Experts Group (MPEG)
AAC
también conocido como Advanced Audio Coding es un codec digital con perdida
Sigue el estándar internacional ISO/IEC 13818-7 como una extensión del MPEG-2
Es muy utilizado en dispositivos Apple
Mientras que para vídeo:
MP4
archivos con el formato MPEG 4 con el codec de vídeo H264 y el codec de audio AAC
WebM
archivos con el formato WebM con el codec de vídeo VP8 y el codec de audio Vorbis
Ogg
archivos con el formato Ogg con el codec de vídeo Theora y el codec de audio Vorbis
Audio
En el ejemplo se ha referenciado la canción del grupo Amaral, Hacia lo salvaje, para ello se han utilizado cuatro elementos source
Se le ha indicado al navegador mediante el atributo src dónde puede localizar el archivo y su extensión y con el atributo type se le ha indicado qué tipo de archivo debe reproducir
En el ejemplo sólo se ha referenciado los tipos WAV, OGG, MP3 y AAC, pero podrían referenciarse varios archivos del mismo tipo pero con distintas calidades de audio
Dentro del elemento audio se ha incluido también un texto que será usado por defecto en el caso de que nuestro navegador no soporte ninguno de los tipos de audio indicados en los elementos source
En el ejemplo se ha utilizado el atributo controls, que es un atributo genérico que comparte con video
Entre los atributos más destacados para los elementos audio y vídeo tenemos:
autoplay
la reproducción comienza en el mismo momento de la carga de la página
controls
se añaden los controles de reproducción para que el usuario pueda controlarla
loop
el archivo se reproduce de forma continua, es decir, cuando acaba la reproducción, se inicia de nuevo desde el principio
Vídeo
El ejemplo para el elemento video es muy similar al visto anteriormente para el elemento audio con la excepción de que se ha incluido un elemento object
Este elemento permite que navegadores que no soportan HTML5 puedan reproducir un archivo mediante el plugin de flash
Esta opción puede ser útil con navegadores antiguos que aún usen versiones anteriores de HTML
Aunque Google ha decidido eliminar el soporte para flash en su navegador Chrome, para fomentar el uso las nuevas capacidades para vídeo de HTML5
En Chrome sólo se puede usar flash bajo demanda, indicándolo explícitamente en su configuración y para las páginas web que el usuario de permiso
Las tablas permiten representar información tabular, en filas y columnas, con cabeceras. Cada elemento de la tabla puede ser simple, o una agrupación de filas, columnas, cabeceras y pies de tabla, subdivisiones, cabeceras múltiples y otros elementos complejos
Como las tablas permiten un control muy detallado, a veces se usan para organizar la estructura general de una página web
Esta práctica no es recomendable, aunque era muy usada en el diseño hace algunos unos años
Es más recomendable utilizar elementos div para la estructura general de la página web
Una tabla se define mediante el elemento table
Las filas se definen con el elemento tr (table row)
Por cada fila se define una celda de elementos td (table data) para contener otros elementos, incluidas otras tablas (aunque no se recomienda, ya que puede obtenerse un resultado visualmente confuso)
En el ejemplo se han listado los números naturales del 1 al 9, rellenado con la primera fila una descripción y las siguientes con los datos
Quedando como resultado:
Número
Ordinal
1
Primero
2
Segundo
3
Tercero
4
Cuarto
5
Quinto
6
Sexto
7
Séptimo
8
Octavo
9
Noveno
Spanning
En ocasiones necesitaremos combinar celdas, a esta práctica se la denomina spanning
Para agrupar o combinar celdas de una fila concreta (se aplican a elementos td), usaremos el atributo colspan asignandole como valor el número de celdas que serán usadas
En el ejemplo se han listado tres lenguajes y para resaltar la descripción se ha aplicado spanning sobre la primera fila
Quedando como resultado:
Lenguajes
HTML5
CSS
JavaScript
Para agrupar o combinar filas de una columna concreta (se aplican a elementos tr), usaremos el atributo rowspan asignandole como valor el número de filas que serán usadas
En el ejemplo se han listado tres lenguajes y para resaltar la descripción se ha aplicado spanning sobre la primera columna, obteniendo una tabla similar a la del ejemplo anterior pero con los valores colocados en la segunda columna
Quedando como resultado:
Lenguajes
HTML5
CSS
JavaScript
Elementos de una tabla
Para añadir complejidad a la tabla podemos añadir más elementos a la misma:
caption
es el título o leyenda de la tabla
Se muestra fuera de la tabla, por defecto arriba de la misma
Se suele poner normalmente después del elemento table
thead
sirve como cabecera de la tabla
th
son unas celdas especiales que se usan sólo dentro de la cabecera de la tabla
tbody
se suele usar después del elemento thead para distinguir la cabecera del cuerpo de la tabla
tfoot
sirve como pie de la tabla
Curiosamente, debe definirse antes de definir un elemento tbody
En el ejemplo se han aplicado todos los elementos que acabamos de definir, como puede apreciarse no hay mucha diferencia con la primera tabla que hemos puesto de ejemplo
Sin embargo, ahora todas sus partes están mejor localizadas y usando hojas de estilo CSS podemos darle un aspecto más atractivo para el usuario
En el ejemplo sólo se ha un valor más a la tabla que originalmente no existía
Gracias al elemento tfoot ahora tenemos la posibilidad de usando JavaScript, añadirle el resultado de cálculos o totales de los valores del resto de celdas
También podemos observar que las celdas dentro del elemento thead aparecen con un tamaño de fuente mayor y en negrita, porque son parte de la cabecera
Al igual que al inicio, gracias al elemento caption, tenemos una breve descripción de nuestra tabla
Un formulario es necesario en cualquier página web, pues permiten al usuario enviar datos al servidor
El ejemplo más común es el formulario de registro o login
Los formularios utilizan el elemento form
Dentro de este elemento estarán los controles que componen el formulario y será de esos controles de los que se extraerá la información que recibirá el servidor
A la hora de definir un formulario debemos indicar la URL la cuál recibirá los datos y qué tipo de método HTTP queremos utilizar
Disponemos de los siguientes atributos:
id
es un identificador único, es muy útil para reconocer el elemento desde JavaScript o para procesarlo desde el servidor
name
este será el nombre del dato que será enviado con la petición HTTP, podrá ser accedido desde JavaScript o desde la URL que se indicó en el atributo action para recibir los datos en el servidor
action
normalmente contiene la URL de la aplicación que recibirá la respuesta en el servidor
Por ejemplo un script en PHP, aunque también podría ser un archivo de código JavaScript
method
tipo de método HTTP para enviar los datos al servidor
Puede ser:
GET
envía la información al servidor como parámetros dentro de la URL indicada en el atributo action
Estos parámetros serán visibles en la barra de navegación y sólo es posible enviar hasta 500 bytes
Por seguridad, se desaconseja utilizar este método, ya que los datos enviados quedan expuestos en la barra de navegación y alguien ajeno al usuario, podría manipularlos antes de ser procesados por el servidor
POST
envía la información al servidor en la misma petición HTTP
No tiene la limitación de tamaño en los datos enviados
Permite enviar archivos adjuntos y los datos enviados no son visibles en la barra del navegador
Se recomienda utilizar este método por seguridad, ya que dificulta la de los datos manipulación antes de ser procesados por el servidor, aunque sigue siendo posible
Elementos input
El elemento input sirve para crear la gran mayoría de los controles que pueden usarse en un formulario
Dependiendo de sus atributos podremos crear botones, casillas de verificación e incluso adjuntar archivos
La gran mayoría de estos controles son nuevos gracias al estándar HTML5 como el control de fechas, colores, etc; y funcionan a través de cuadros de diálogo específicos para cada navegador
A causa de esta circunstancia, es posible que difieran de un navegador a otro o incluso que no sean soportados si el mismo es muy antiguo o no soporta HTML5
Dispone de atributos generales que todos los elementos input poseen y atributos específicos para cada tipo de elemento
Atributos generales:
id
es un identificador único, es muy útil para reconocer el elemento desde JavaScript o para procesarlo desde el servidor
name
este será el nombre del dato que será enviado con la petición HTTP, podrá ser accedido desde JavaScript o desde la URL que se indicó en el atributo action para recibir los datos en el servidor
type
es el tipo específico de control, este atributo le dice al navegador qué debe pintar en pantalla y qué atributos adicionales podría contener
Así que es importante que si tiene atributos específicos para ese tipo, los elijamos correctamente o el navegador los ignorará al no entenderlos
form
identificador del formulario, enlaza el control con el formulario mediante el valor de su atributo id
Atributos específicos:
checked
indica que el control ha sido seleccionado
Se utiliza sólo con las casillas de selección y las casillas de opción
autocomplete
indica al navegador que complete el campo con los datos introducidos por el usuario anteriormente
No puede utilizarse ni con las casillas de selección, ni con las casillas de opción, ni con los botones
list
sirve para definir una lista de valores por defecto que se mostraran al usuario como posibles entradas al usuario
No puede utilizarse ni con las casillas de selección, ni con las casillas de opción, ni con los botones
Se utiliza asociando el identificador del control a un elemento datalist en el cuál enumeraremos los elementos que componen la lista
Estos valores son de sólo lectura, el usuario no puede modificarlos ni añadir nuevos
El elemento datalist no tiene asociada ninguna visualización, sin embargo puede asociarse mediante su id un elemento label con el que podremos visualizar el valor elegido de la lista
maxlenght
indica la longitud máxima que podemos utilizar en el texto introducido
Se utiliza con los controles de cuadro de texto o aquellos similares a él (text, password, email, url, tel, search, etc)
placeholder
permite añadir un texto por defecto para dar una idea al usuario del tipo de control que es o de qué se espera que introduzca en el mismo
Cuando se utiliza, no suele usarse el elemento label
pattern
indica una expresión regular que será utilizada por el navegador para validar el valor introducido en el campo
En caso de que el valor introducido no se ajuste a la expresión regular, mostrará un mensaje de error al usuario indicandolo
Se utiliza con los controles de cuadro de texto o aquellos similares a él (text, password, email, url, tel, search, etc)
multiple
se utiliza con los tipos email y file
Permite incluir más de una dirección de correo electrónico o adjuntar más de un archivo
readonly
impide que el campo sea modificado por el usuario
El navegador lo mostrará ensombrecido para indicar al usuario que no puede ser modificado
El valor del campo se recogerá obligatoriamente del atributo value, por lo que es necesario que tenga algún valor
required
indica al navegador que el campo es obligatorio que tenga algún valor
Es muy útil para realizar validaciones porque en caso de que el campo no haya sido rellenado, mostrará un mensaje de error al usuario
Cuadros de texto
Para crear un cuadro de texto al atributo type le asignaremos el valor text
Dispone del atributo específico value en el cuál se guardará el valor por defecto que será mostrado al usuario
No tiene etiqueta de cierre
En el ejemplo se ha especificado un esqueleto de formulario sin atributos, ya que no necesitamos que sea funcional para mostrar los distintos controles. Lo vamos a hacer con todos los ejemplos a partir de ahora
También se ha incluido un control de cuadro de texto con el atributo value con el valor por defecto Escribe algo aquí
Es una buena practica rellenar este valor para que el usuario tenga una ayuda visual de qué se espera que rellene en el control
Quedando como resultado:
También podemos utilizar el elemento datalist para mostrar al usuario una lista de valores por defecto como posibles entradas al control de texto
En el ejemplo se ha especificado una lista de colores que mediante el atributo list cuyo valor es el atributo id del datalist
Además podemos usar el atributo label para que se visualice una etiqueta con el contenido del valor seleccionado
Una vez seleccionado un valor, podemos comprobar que no podemos modificarlo ni añadir un valor nuevo, pero si borrarlo para elegir otro valor de la lista
Quedando como resultado:
Etiquetas descriptivas
En el ejemplo anterior veíamos como crear un cuadro de texto, pero para el usuario podría no quedar claro qué se esperaba que rellenase en el control
Para solucionarlo usamos el atributo value para mostrarle un valor por defecto
Pero podemos hacerlo mediante una etiqueta descriptiva, mediante el elemento label
Una etiqueta label estará asociada siempre a un elemento input
Podemos utilizar dos métodos para realizar esta asociación:
insertando el control dentro de la etiqueta label
Quedando como resultado:
utilizando su atributo for que tendrá como valor el atributo id del control que queremos asociarle
Quedando como resultado:
Contraseñas
Es similar al cuadro de texto pero para crear una contraseña al atributo type le asignaremos el valor password
En el ejemplo podemos ver que la principal característica de este control es que el contenido del cuadro de texto se camufla
Sin embargo, si utilizamos el método GET esa contraseña será visible en la barra del navegador
Por eso es aconsejable usar el método POST si vamos a introducir contraseñas
Tambien se ha incluido el atributo pattern que corresponde con una expresión regular que añade más seguridad en la validación si no cumple el formato de la expresión
En la expresión del ejemplo se ha forzado que al menos haya un número, una letra en minúscula, otra en mayúscula y que su longitud sea de ocho caracteres
Quedando como resultado:
Correo electrónico
Es similar al cuadro de texto pero para crear un correo electrónico al atributo type le asignaremos el valor email
En el ejemplo podemos ver que la principal característica de este control es que el contenido del cuadro de texto se valida y si se introduce una dirección de correo no válida, el navegador mostrará un mensaje de error
Tambien se ha incluido el atributo pattern que corresponde con una expresión regular que añade más seguridad en la validación si no cumple el formato de la expresión
En la expresión del ejemplo se ha forzado que al menos haya un número o una letra en minúscula antes de la @, al menos haya un número o una letra en minúscula antes del . y dos o tres letras despues del .
Quedando como resultado:
URL
Es similar al cuadro de texto pero para crear una URL al atributo type le asignaremos el valor url
En el ejemplo podemos ver que la principal característica de este control es que el contenido del cuadro de texto se valida y si se introduce una URL no válida, el navegador mostrará un mensaje de error
Quedando como resultado:
Teléfono
Es similar al cuadro de texto pero para crear un teléfono al atributo type le asignaremos el valor tel
En el ejemplo podemos ver que no hay ninguna diferencia significativa con respecto al cuadro de texto
Sólo podría aparecer algún icono o imagen especial generada por el navegador o mediante una hoja de estilo CSS
Quedando como resultado:
Búsqueda
Es similar al cuadro de texto pero para crear una búsqueda al atributo type le asignaremos el valor search
En el ejemplo podemos ver que no hay ninguna diferencia significativa con respecto al cuadro de texto
Sólo podría aparecer algún icono o imagen especial generada por el navegador o mediante una hoja de estilo CSS
Quedando como resultado:
Casillas de verificación
Para crear un conjunto de casillas de verificación al atributo type le asignaremos el valor checkbox
En este caso, el valor que aparece junto al botón será el mismo del atributo name y hay que usar el mismo para formar el grupo de selección exclusiva
No tiene etiqueta de cierre
En el ejemplo se ha especificado la elección de sexo y se ha marcado el sexo Woman por defecto usando la palabra reservada checked
Quedando como resultado:
Hay que tener en cuenta que si marcamos una casilla permanecerá marcada hasta que volvamos a desmarcarla, si queremos el efecto de que se desmarquen las opciones no elegidas, deberemos usar JavaScript
Casillas de opción
Para crear un conjunto de casillas de opción al atributo type le asignaremos el valor radio
En este caso, el valor que aparece junto al botón será el mismo del atributo name y hay que usar el mismo para formar el grupo de selección exclusiva
No tiene etiqueta de cierre
En el ejemplo se ha especificado un grupo de colores y se ha marcado el color Green por defecto usando la palabra reservada checked
Quedando como resultado:
Botones
Los botones normalmente se utilizan para controlar el envío y reinicio del formulario
Podemos añadir nuevas funcionalidades a nuestro formulario usando los botones para activarlas al pulsarlos
Para ello usaremos o una imagen o un botón genérico al que luego le asignaremos JavaScript o usaremos Jquery para facilitarnos la programación
Para crear un botón al atributo type le asignaremos el valor button
No tiene etiqueta de cierre
En el ejemplo se ha usado el atributo value para mostrar al usuario un texto y pueda reconocerlo
Y el atributo onclick que es un evento que permite al botón ejecutar código JavaScript, en este caso un aviso para el usuario de que el botón ha sido pulsado
Quedando como resultado:
Enviar el formulario
Para crear un botón para enviar el formulario al atributo type le asignaremos el valor submit
No tiene etiqueta de cierre
En el ejemplo se ha usado el atributo value para mostrar al usuario un texto y pueda reconocerlo
Este ejemplo no enviará nada al servidor porque no se han usado los atributos action indicandole la URL de destino ni method indicando el método GET o POST
Quedando como resultado:
También podemos simular el comportamiento de un botón submit a partir de una imagen
En el ejemplo se ha usado el atributo value para mostrar al usuario un texto y pueda reconocerlo
Este ejemplo no enviará nada al servidor porque no se han usado los atributos action indicandole la URL de destino ni method indicando el método GET o POST
Quedando como resultado:
Resetear el formulario
Para crear un botón para resetear el formulario al atributo type le asignaremos el valor reset
No tiene etiqueta de cierre
En el ejemplo se ha usado el atributo value para mostrar al usuario un texto y pueda reconocerlo
Si escribimos algo en el cuadro de texto podremos comprobar que si pulsamos el botón reiniciar el contenido del cuadro de texto vuelve a ser su valor por defecto
Quedando como resultado:
Adjuntar archivos
Para crear un botón que permita adjuntar archivos al atributo type le asignaremos el valor file
Este botón sólo será útil si hemos elegido el método POST y hayamos incluido al elemento form el atributo enctype=’multipart/form-data’
Además del botón aparece una etiqueta con el estado del archivo adjunto, que nos dirá si hay un archivo adjunto y en caso de haberlo su nombre y extensión
Al pulsar el botón se abrirá un explorador de archivos del sistema del usuario con el que podrá seleccionar el archivo que desea adjuntar
No tiene etiqueta de cierre
En el ejemplo se adjunta una imagen al formulario aunque no es funcional porque no se ha añadido el atributo action ni tiene un botón para enviar el formulario
Se ha usado el atributo acept para indicarle al navegador qué tipos MIME puede recibir el navegador cuando pulsemos el botón
En este caso sólo puede recibir imagenes de tipo jpeg y png
Quedando como resultado:
Números
Para crear un cuadro que fuerce al usuario introducir un número al atributo type le asignaremos el valor number
No tiene etiqueta de cierre
En el ejemplo se han usado los atributos:
min
valor numérico mínimo que admite el cuadro
max
valor numérico máximo que admite el cuadro
step
controla el incremento en los números, si se omite, por defecto es 1
value
valor numérico por defecto
Quedando como resultado:
Rangos
Para crear un rango de números que fuerce al usuario introducir un número aproximado al atributo type le asignaremos el valor range
No tiene etiqueta de cierre
En el ejemplo se han usado los atributos:
min
valor numérico mínimo que admite el rango
max
valor numérico máximo que admite el rango
step
controla el incremento en los números, si se omite, por defecto es 1
value
valor numérico por defecto
Quedando como resultado:
Paleta de colores
Para asignar un color a partir de una paleta al atributo type le asignaremos el valor color
No tiene etiqueta de cierre
En el ejemplo se ha utilizado en el atributo value el valor por defecto hexadecimal #FF0000
Quedando como resultado:
Calendario
Para asignar una fecha a partir de un calendario al atributo type le asignaremos el valor date
No tiene etiqueta de cierre
En el ejemplo se han usado los atributos:
min
valor de fecha mínima que admite el rango de fechas
max
valor de fecha máxima que admite el rango de fechas
step
controla el incremento de fechas en el calendario, si se omite, por defecto es 1
value
valor de fecha por defecto
Hay que tener en cuenta que el formato para fechas que admite el control es AAAA-MM-DD, es decir, A para un año con 4 dígitos, M para un mes de 2 dígitos y D para un día de 2 dígitos todos ellos separados con el símbolo –
Quedando como resultado:
Oculto
En ocasiones hay información que el desarrollador no quiere que el usuario sea capaz de ver, para ello se usan los campos ocultos
Son campos que el usuario no puede ver, pero que son enviados junto al formulario al servidor
Para asignar campo oculto al atributo type le asignaremos el valor hidden
No tiene etiqueta de cierre
En el ejemplo se envian tres campos ocultos dando al servidor información sobre el cliente, sin que aparezca esa información en el navegador del usuario
Quedando como resultado:
No deberíamos poder ver ninguno de los campos ocultos en el navegador, pero si usamos la opción de nuestro navegador Ver código, podremos ver que efectivamente, esos campos existen
Cuadro de texto de varias líneas
Es similar al cuadro de texto pero permite escribir más de una línea para ello utilizaremos el elemento textarea
En el ejemplo podemos ver que la diferencia más significativa con respecto al cuadro de texto es que podemos usar más de una línea
Además hemos especificado con el atributo rows el número de filas a 4, con el atributo cols el número de columnas a 50 y con el atributo maxlength el máximo de caracteres a 100
Quedando como resultado:
Listas de selección
El elemento select sirve para crear una lista desplegable de selección
Su esquema es muy similar a los cuadros de texto, aunque su contenido no puede ser modificado, sólo seleccionado
Los elementos option forman la lista y al servidor se enviará en valor de su atributo value
En el ejemplo se ha especificado una lista de selección de colores y se ha marcado el color Green por defecto usando la palabra reservada selected
Quedando como resultado:
Agrupaciones de elementos
El elemento fieldset sirve para agrupar elementos relacionados
En el ejemplo creado un grupo para contener el control de acceso de usuario mediante login
Se ha usado el elemento legend que sirve de título o leyenda del grupo
Se ha usado el atributo required para que los campos user y pass sean obligatorios y si tratamos de enviar el formulario, el navegador nos mostrará un mensaje de error
El resultado es un cuadro que contiene todos los controles y que tiene como título Login de Usuario
Las Hojas de estilo en cascada (Cascading Style Sheets, CSS), son un lenguaje de diseño gráfico para definir y crear la presentación de un documento estructurado escrito en un lenguaje de marcado, normalmente páginas web escritas en HTML o XHTML; el lenguaje puede ser aplicado a cualquier documento XML, incluyendo XHTML, SVG, XUL, RSS, etc. También permite aplicar estilos no visuales, como las hojas de estilo auditivas
Una hoja de estilos no es más que un archivo de texto con extensión .css. Aunque las hojas de estilo se definieron a mediados de los años noventa, han tenido especial repercusión a partir de su última versión (CSS3), en combinación con HTML5
Se pueden aplicar distintas hojas de estilo dependiendo del dispositivo en el que mostremos nuestra página web (una pantalla grande, un móvil, papel impreso, etc)
Integración de estilos en una página
Existen varias formas de integrar estilos en una página. Pero normalmente usaremos una de estas dos:
Incluida como etiqueta que forma parte del HTML
El problema de esta opción es bastante obvio. Si en un futuro quisiéramos modificar el color de los párrafos que contienen el texto, tendríamos que buscar uno por uno todas las apariciones y cambiarlos manualmente
Definida como una regla de estilo en la cabecera
En una página web real usaremos más de una regla de estilo, por lo que tampoco será una buena opción añadirlas una a una en la cabecera
Definida con la etiqueta <link> a un fichero externo
Normalmente usaremos más de una regla de estilo, por lo que será una buena opción añadirlas desde un fichero externo de extensión .css y enlazarlas en la cabecera del HTML con la etiqueta <link>
Estructura de una hoja de estilo
Una hoja de estilo define una o más reglas que se aplicarán a los elementos que cumplan dicha regla
Cada regla se compone de dos partes:
Selector: indica a qué elementos vamos a aplicarle la regla. Pueden escribirse más de un selector para la misma regla separados por comas
Lista de declaraciones: los estilos que se van a aplicar a los elementos que cumplan la regla. Corresponden a un par propiedad:valor, separados por punto y coma
En el ejemplo se ha definido una regla que se aplica a todos los elementos p de párrafo del HTML. Además el texto se ha definido de color rojo, su fuente como Verdana y su alineación de párrafo es centrada
De forma adicional, podemos añadir comentarios, que aparecerán escritos entre /* y */
También podremos añadir directivas at (que empiezan por @), las cuales modifican la forma de aplicar las reglas
El árbol DOM
El document object model (DOM) es la representación estructurada, en forma de árbol, de todos los elementos escritos en un documento HTML
Por ejemplo, cualquier documento HTML empieza por la etiqueta , conteniendo además las etiquetas
y
, con su respectivas etiquetas de cierre
Por su parte, dentro de la cabecera (etiqueta <head>) contendrá a su vez elementos con las etiquetas <meta>, <link>, <title>, etc
Y el cuerpo (etiqueta <body>), contendrá a su vez más elementos y así sucesivamente hasta llegar a sus etiquetas de cierre
A la estructura jerárquica resultante en informática se la denomina árbol
En concreto, el árbol que representa la estructura de un documento HTML es el DOM
Gracias a esta estructura en forma de árbol, podemos identificar de forma única cada elemento del documento HTML, según cómo estén relacionados entre sí esos elementos, podremos aplicarles distintas reglas de estilo
Las relaciones que podemos identificar son:
Descendientes: son todos los elementos contenidos (directa o indirectamente) por un elemento
Por ejemplo, <head>, <meta> o <body> son descendientes de <html>
Hijo directos: son los descendientes de primer nivel
Por ejemplo, <head> es hijo de <html>
Hermanos: descendientes que tienen un padre común
Por ejemplo todos los elementos <meta> son hermanos entre si
Gracias a estas relaciones dentro del DOM, en el ejemplo que usamos anteriormente que afectaba sólo a los elementos <p>, podríamos aplicárselo también a los elementos contenidos en una división <div> que contuviera una clase o un identificador concreto
O podríamos crear reglas para los hermanos con los que compartiera un nodo
Apoyándonos en el lenguaje JavaScript y en el DOM, podremos modificar el contenido de los elementos una vez cargada la página web en el navegador
Cascada de estilo
Gracias al DOM podemos identificar los elementos concretos de un documento HTML y por eso podemos aplicarle las hojas de estilo
Una hoja de estilos puede contener diferentes reglas que configuren el mismo elemento, incluso podemos tener varias hojas de estilo con reglas contradictorias
En este ejemplo, nuestras reglas dicen que para todo elemento del <body>, incluidos sus descendientes, se le van a aplicar el color de fondo negro y el color de texto rojo
En la siguiente regla, le indicamos que en el elemento <p> de párrafo, el texto ha de ser de color azul
El documento final tendrá todos los elementos de color de fondo negro y el texto de color rojo, pero además los párrafos tendrá color azul
Las reglas se han ido aplicando unas sobre otras, en forma de cascada. Por eso tienen el nombre de cascadas de hojas de estilos (cascade style sheets, CSS)
En general, los estilos se heredan. Primero se establecen la propiedad del elemento padre y sus descendientes los heredan, para finalmente aplicar los suyos, que a su vez son heredados por sus descendientes, hasta que llegar al último nodo de descendientes de la hoja de estilos
En el caso de que tengamos dos elementos que son hermanos y haya conflicto por ver quien hereda qué propiedad, se aplica el más específico y en el caso de que tengan las mismas propiedades, se aplicará el último estilo definido
Es decir, si una regla está definida en dos hojas de estilo externas, se aplicará la regla de la hoja que se incluyó más tarde en el documento HTML. Por eso, el orden en el que las incluyamos es muy importante
Primero incluiremos las hojas más generales y después aquellas que sean más específicas
En el caso de haber incrustado en el HTML alguna regla, el estilo que se ha definido, será el que tendrá mayor prioridad que la regla que esté incluida en la cabecera del HTML
Resumiendo, se aplicarán las siguientes prioridades a la hora de aplicar una regla a un elemento concreto:
Se buscan todas las declaraciones aplicables al elemento
Si no existen reglas, se usará el valor heredado
Si no hubiera valor heredado, el navegador aplicará el valor por defecto
Si existen reglas, se aplicará la de mayor prioridad de acuerdo a los siguientes criterios:
Se asigna un peso según su origen: hoja de estilos del autor, del usuario o del navegador
Atributos con la palabra clave !important: tendrán mayor prioridad
Selectores específicos: tendrán mayor prioridad
Dos reglas con la misma prioridad: se aplica la indicada en último lugar
CSS Reset
Cada navegador posee su propia hoja de estilos por defecto
Esto implica que el estilo por defecto de algunos elementos puede ser diferente para cada navegador
Por esta razón es recomendable realizar un reinicio de los estilos aplicados a los elementos añadiendo una CSS especial (la CSS Reset) al principio de nuestras páginas web
Existen múltiples CSS que realizan esta tarea (como las utilizadas en los frameworks de Yahoo YUI, HTML5 BoilerPlate o Normalize), pero uno de los más populares es la de Eric Meyer considerado como uno de los gurús de las CSS
Para añadirla sólo has de guardar el archivo en la carpeta css contenida en la raíz de tu sitio web y definirla con la etiqueta <link> en la cabecera de tu HTML:
Los selectores sirven para identificar los elementos a los que se aplicará el formato definido en la lista de declaraciones
Hay distintos tipos de selectores que pueden ser utilizados para definir las reglas CSS
Vamos a describirlos de los más generales a los más específicos (desde el punto de vista de menor a mayor prioridad)
Selector Universal
Se define con * y se aplica a todos los elementos de la página:
En el ejemplo se han configurado los márgenes y la fuente del texto, que suelen ser algunas de las reglas más usadas
Selector de etiqueta HTML
Indica el estilo que se va a aplicar a un elemento o una etiqueta concreta
Su hay más de uno, serán separados por comas
En el ejemplo se han configurado las etiquetas 1 a 5 de título, aplicándoles la fuente del texto de tamaño grande
Como puede apreciarse, podemos prescindir de < y de > de la etiqueta
Selector de clase
Algunos elementos HTML tienen el atributo class que indica que las clases a las cuales pertenece el elemento
Este atributo nos permite tratar a esa «clase» de elemento de una manera concreta, tanto en la aplicación de estilos CSS como en su comportamiento mediante programación con JavaScript
Para aplicar el selector de clase, usaremos etiqueta.class
En el ejemplo se han configurado el texto en color azul para todos los elementos de la clase cabecera, ya que si no especificamos una etiqueta, se usará por defecto el selector universal *
En el ejemplo se han configurado la alineación del texto centrada solo para los elementos de la clase cabecera que pertenecen a la etiqueta de título <h1>
Debemos tener especial cuidado en no dejar espacios entre la etiqueta, el punto y el nombre de la clase, ya que ese espacio es significativo, como veremos más adelante
Selector de identificador
Algunos elementos HTML tienen el atributo id que indica que ese identificador único pertenece a ese elemento concreto
Para aplicar el selector de identificador, usaremos etiqueta#id
Al igual que con las clases, es muy importante el uso de los espacios
En el ejemplo se han configurado el color de fondo del texto como amarillo, en aquel párrafo que tenga el identificador destacado
Selectores descendientes y adyacentes
Estos selectores permiten seleccionar elementos contenidos dentro de otros de acuerdo a la estructura del árbol DOM
Aquí es donde toman importancia los espacios, ya que si separamos dos selectores con un espacio, entonces estaremos aplicando la regla a todos los descendientes del primer selector
En el ejemplo se han configurado la fuente del texto como Verdana para todos los elementos <p> que son descendientes del elemento <section > (recordemos que pueden ser los descendientes de cualquier nivel, ya que esa regla será heredada)
Se pueden mezclar indistintamente selectores descendientes de clase o de identificador
En el ejemplo se han configurado el color del texto como rojo para cualquier elemento de la clase error que sea descendiente del elemento
Si en vez de aplicarlo a todos los descendientes queremos que sólo se aplique a los descendientes directos (los hijos), entonces usaremos el simbolo >
En el ejemplo se han configurado la fuente del texto como Verdana sólo para los elementos <p> que son hijos del elemento <section >
También podemos seleccionar los elementos hermanos, es decir, aquellos que aparecen justo después de otros elementos, entonces usaremos el simbolo +
En el ejemplo se han configurado la indentación del primer párrafo que aparece justo después de la etiqueta de título <h1>
Selectores de atributos
Estos selectores se utilizan para seleccionar elementos en función de sus atributos
Hay de cuatro tipos:
[atributo]: elementos que tienen un atributo llamado atributo independientemente de su valor
[atributo=valor]: elementos que tienen un atributo llamado atributo con el valor especificado
[atributo^=valor]: elementos que tiene un atributo llamado atributo y cuyo valor empieza por el valor especificado
[atributo$=valor]: elementos que tienen un atributo llamado atributo y cuyo valor termina con el valor especificado
En el ejemplo se han configurado un enlace que queremos en un color distinto si lleva a una url con HTTP seguro
Pseudoclases
Existen selectores especiales para especificar elementos que tienen unas determinadas propiedades
Son clases virtuales, ya que no se especifican en el HTML, pero representan las posiciones o estados en los que se puede encontrar un elemento mientras se visualiza en el navegador
En el ejemplo se han configurado para que se aplique solo si un elemento es el primer hijo de su padre, para ello hemos usado la pseudoclase first-child, solo el primer elemento <li> de una lista de viñetas (<ul>) aparecerá en color verde
Existen otras pseudoclases que nos ayudarán a seleccionar a un hermano concreto de entre los hijos de un elemento:
:nth-child(n) : representa el n-ésimo hermano
Permite incluir una forma más compleja como:
:nth-child(even) : que representa los hijos que ocupan posiciones pares
:nth-child(odd) : que representa los hijos que ocupan posiciones impares
(por ejemplo para hacer que las filas impares de una tabla tengan distinto color de fondo y tener un efecto cebreado en una tabla)
:nth-last-child(n) : similar al anterior, pero empezando a contar desde el final
Hay también pseudoclases dinámicas, que indican el estado de los elementos cuando el usuario interactúa con ellos:
:hover : se utiliza para establecer el estilo cuando el usuario coloca el ratón sobre el elemento
:active : se utiliza para establecer el estilo cuando el usuario pincha sobre el elemento o mantiene el botón del ratón pulsado sobre él
:focus : se utiliza para establecer el estilo cuando el elemento tiene el foco
También son muy típicas las pseudoclases relacionadas con los los enlaces:
a:link : establece el estilo del enlace cuando aún no se ha visitado o cuando el usuario aún no lo ha pulsado
a:hover : establece el estilo cuando el usuario coloca el ratón sobre el elemento de enlace
a:active : establece el estilo cuando el usuario pincha sobre el enlace
a:visited : establece el estilo cuando el usuario ya lo ha visitado
En el ejemplo se han configurado el estado de los enlaces sin visitar, visitados o cuando pasemos el ratón sobre ellos
Al usar este CSS, los enlaces del documento aparecerán sin subrayar y en verde
Al situar el ratón sobre ellos pararán a azul y, una vez visitados, pasarán a rojo
Ejemplo de Selectores en acción
En el siguiente ejemplo se ha incluido una página HTML y varios de los selectores explicados anteriormente
Puedes comprobar el resultado visualizándolo por ti mismo en tu navegador y si no utilizas un CSS reset, podrías tener resultados distintos en otros navegadores
Ahora mostramos el contenido del fichero ejemploSelectores.css
El posicionamiento ‘clásico‘ de elementos se basa en el modelo de bloques, los cuales se van colocando para llenar el espacio de la página de izquierda a derecha y de arriba abajo
Sin embargo, este modelo no se adapta bien en los dispositivos móviles, donde nos encontraremos con problemas con el tamaño, la orientación en el navegador e incluso en la reordenación de los elementos para que se ajusten al tipo de dispositivo
Para solucionar estos problemas apareció el modelo de posicionamiento flexible, el cual simplifica esas tareas considerablemente
Sin embargo, este modelo es demasiado detallado para organizar la estructura general de la página web
Por esa razón, se está imponiendo el modelo de rejilla, el cual divide el espacio en una rejilla virtual y crea una matriz dividida en celdas dentro de esa rejilla, asignando los elementos a una celda concreta que ocuparan tantas celdas adicionales dependiendo del tamaño y orientación del dispositivo
Estos dos modelos admiten además el denominado diseño adaptativo (responsive desing), el cual permite que nuestra página web se adapte al dispositivo en el que será visualizada: teléfonos inteligentes, tabletas o PCs de escritorio
Modelo de bloque
Las cajas de los elementos se colocan por defecto siguiendo el ‘flujo normal‘, es decir, empujando las cajas hacia la izquierda y hacia arriba
Puede utilizarse la propiedad position para modificar el ‘flujo normal‘:
position: static es el modo de posicionamiento por defecto
La caja ocupará la posición del ‘flujo normal‘
position: relative utilizando la propiedades top, right, bottom y left desplazamos su posición
Estas dimensiones indican el espaciado que se deja a cada lado de acuerdo con la posición original de la caja
El resto de las cajas no se ven afectadas por este desplazamiento, por lo que respetan su espacio reservado
position: absolute se elimina la caja del flujo normal y se coloca la nueva caja en una posición fija con respecto a su caja contenedora
Admite las propiedades top, right, bottom y left
Puede superponerse a otros elementos porque no se respeta su espacio reservado
position: fixed similar al posicionamiento absolute, pero se especifica la posición con respecto a la ventana
Esto implica que la caja mantiene su posición y que no se moverá cuando se use la barra de desplazamiento
position: float la caja se desplazará hacia un lado usando la propiedades left o right, desplazandola hacia uno de los extremos de la caja contenedora o hasta la primera caja flotante que encuentre en esa dirección
Puede superponerse a otros elementos que no sean cajas flotantes
clear sólo será aplicable si hay cajas flotantes, fuerza a que el elemento se muestre debajo de la caja flotante de un determinado tipo con las propiedades left o right; o de cualquiera con both
Vamos a usar este html de ejemplo para poder comprobar el uso del modelo de bloque, para ello usaremos como base, la siguiente hoja de estilos de ejemplo:
Se ha usado una tamaño de fuente grande de forma intencionada para forzar el uso del scroll. Ahora realiza el siguiente ejercicio para que puedas comprobar por ti mismo como funciona el modelo de bloques:
Cambia el posicionamiento del bloque a a relative y asignale un espaciado superior de 1em y un espaciado izquierdo de 2em
El bloque azul se superpondrá al rojo, pero el espacio reservado que debería haber ocupado el bloque azul, se conserva
Cambia el posicionamiento del bloque c a relative y asignale un espaciado superior de 1em y un espaciado izquierdo de 2em
El bloque rosa cambiará su posición con respecto a su contenedor (el bloque rojo)
Cambia el posicionamiento del bloque a a absolute y asignale un espaciado superior de 1em y un espaciado izquierdo de 2em
El bloque azul se superpondrá al rojo, pero como no se ha reservado espacio para el bloque azul, el rojo se colocará en la esquina superior izquierda
Y si hacemos scroll, los bloques dejarán de ser visibles
Cambia el posicionamiento del bloque a a fixed y asignale un espaciado superior de 1em y un espaciado izquierdo de 2em
El bloque azul se superpondrá al rojo, pero como no se ha reservado espacio para el bloque azul, el rojo se colocará en la esquina superior izquierda
Y si hacemos scroll, veremos que el bloque azul ha quedado fijo en su posición con respecto a la ventana
Cambia el posicionamiento del bloque a a float: right
El bloque azul se superpondrá al resto de elementos, se habrá colocado en el borde derecho de la pantalla y no se ha reservado espacio para ese bloque
Cambia el posicionamiento del bloque c a float: right
El bloque rosa se pegará al lado derecho de su contenedor, el bloque rojo
Cambia el posicionamiento del bloque b a float: right
El bloque rojo se pegará al lado derecho del elemento flotante anterior, el bloque azul
Cambia el posicionamiento del bloque a a float: left y añade a p la propiedad clear: right
El párrafo se colocará debajo del bloque rojo, pero se superpondrá al bloque azul
Cambia el posicionamiento de p a clear: both
El párrafo se colocará debajo del bloque azul
Modelo flexible
El posicionamiento flexible permite acomodar los elementos de la página según cambien las dimensiones y orentación de la página
Nos permite hacer un diseño adaptativo para que nuestras páginas web se visualizen correctamente en cualquier dispositivo
Este estándar es relativamente reciente y todavía no está soportado por todos los navegadores, pero en un futuro lo estará
Como ventajas se obtiene un código más legible y simple, donde podremos cambiar el orden de los elementos independientemente del orden en el código HTML
El modelo flexible es apropiado para colocar pequeños componentes de una página web
Para realizar una disposición general de los elementos de la página, se está imponiendo el modelo de rejilla
La idea principal es que un contenedor flexible expande o comprime sus elementos para rellenar el espacio libre o ajustarse al área disponible
Así tendremos un contenedor flex (flex container) y una serie de elementos flex contenidos (flex item)
Para definir un contenedor utilizaremos la propiedad display: lex (o display: kit-web.flex si queremos compatibilidad con Safari)
Todos los elementos contenidos pasarán a ser elementos flex
En este modelo no se utilizan conceptos como ordenamiento horizontal o vertical sino que se define un eje principal (main axis) y otro secundario (cross axis)
De esta forma, el diseño se ajusta fácilmente a los cambios de orientación del dispositivo
Para cada eje podemos situar los componentes en su inicio (main-start o cross-start) y final (main-end o cross-end)
Vamos a usar este html de ejemplo para poder comprobar el uso del modelo flexible, para ello usaremos como base, la siguiente hoja de estilos de ejemplo:
Dirección de los elementos
La propiedad flex-direction especifica la dirección del eje principal, es decir, cómo se colocan los elementos dentro del contenedor
Admite los siguientes valores:
row fila
row-revese fila invertida
column columna
column-reverse columna invertida
Para comprobar su comportamiento, añade el siguiente CSS al ejemplo anterior:
Ajuste en el eje principal
La propiedad wrap establece si es necesario ajustar los elementos para mostarlos en una única fila (o columna)
Admite los siguientes valores:
nowrap ajusta los elementos a una línea
wrap ajusta los elementos pero sin cambiar su tamaño
wrap-reverse ajusta los elementos pero sin cambiar su tamaño, pero en el orden inverso de filas
Para comprobar su comportamiento, añade el siguiente HTML al ejemplo anterior:
Y el siguiente CSS:
Alineación del contenido
Con la propiedad justify-content podemos alinear los elementos con respecto al eje principal del contenedor
Nos permite decidir qué hacer con el espacio restante
Admite los siguientes valores:
flex-start junta los elementos al principio del eje
flex-end junta los elementos al final del eje
center centra los elementos
space-between reparte el espacio entre los elementos dejando los extremos pegados al borde
space-around todo el espacio restante se reparte alrededor de cada elemento
Para comprobar su comportamiento, añade el siguiente HTML al ejemplo anterior:
Y el siguiente CSS:
Ajuste en el eje secundario
Para alinear los elementos con respecto al eje secundario disponemos de la propiedad align-items
Admite los siguientes valores:
strech para ocupar todo el ancho
flex-start alinea los elementos al principio del eje
flex-end alinea los elementos al final del eje
center centra los elementos
Para comprobar su comportamiento, añade el siguiente HTML al ejemplo anterior:
Y el siguiente CSS:
Propiedades de los elementos
Hasta ahora hemos visto propiedades para configurar el contenedor principal
Ahora vamos a enumerar algunas propiedades muy interesantes para manipular los elementos:
order indica el orden en el que aparece el elemento dentro del contenedor
De esta forma no será necesario modificar el HTML para reordenar los elementos, ya que lo realizaremos por código
flex-grow establece el factor de crecimiento del elemento
Es decir, cómo crece en relación a los otros elementos, siempre que el contenedor tenga espacio libre
flex-shrink establece el factor de encogimiento del elemento
Es decir, cómo decrece en relación a los otros elementos, siempre que el contenedor tenga espacio libre
flex-basis indica el tamaño por defecto (ancho) antes de que el espacio libre del contenedor sea distribuido
Normalmente se deja su valor por defecto: flex-basis: auto
Existe una forma abreviada para las propiedades flex-grow, flex-shrink y flex-basis, simplemente especificando el valor que tomarán: flex: 1 1 auto
Para comprobar su comportamiento, añade el siguiente HTML al ejemplo anterior:
Y el siguiente CSS:
Modelo de rejilla
Aunque el modelo de cajas flexibles permite crear sitios adaptativos gracias a los media queries, el modelo que se está imponiendo es el de rejilla
En este modelo la pantalla se divide en una rejilla virtual y el diseñador puede elegir cuántas celdas de esa rejilla ocupará cada elemento dependiendo del dispositivo
Este diseño se ha popularizado gracias a Bootstrap creada por los desarrolladores de Twitter
En Bootstrap el espacio disponible se divide en 12 columnas de igual tamaño
Para cada elemento se indicará cuántas columnas ocupará dependiendo del tamaño del dispositivo
Por ejemplo, para una barra lateral podemos indicar que ocupe 2 columnas en un escritorio, 6 columnas (la mitad del ancho total) para tablets y 12 columnas (todo el ancho) en los dispositivos móviles
Para conseguirlo se usará un conjunto de clases, en este ejemplo serían: .col-md-2, .col-sm-6 y .col-xs-12
Los tamaños se definen en Bootstrap cómo:
xs (extra small)
Pantallas con ancho inferior a 768px
La gran mayoría de teléfonos inteligentes
sm (small)
Pantallas con ancho inferior a 992px
Si se ha definido la clase xs y el tamaño inferior a 768px, entonces se aplicará esa clase
md (medium)
Pantallas entre 992px y 1200px
Este rango representa la mayoría de los navegadores de escritorio
lg (large)
Pantallas muy grandes con ancho superior a 1200px
Normalmente son grandes pantallas de alta definición
Como puede verse en el ejemplo, el contenido se organiza en filas (clase row) y dentro de estas filas crearemos las columnas con los tamaños deseados
Media Queries
Una media query permite utilizar las reglas de las hojas de estilo dependiendo de las caracteristicas del medio (ancho, alto y color)
Fueron añadidas a partir de CSS3, permiten que la presentación del contenido se adapte a un rasngo específico de dispositivos de salida sin tener que cambiar los contenidos y son la base del diseño adaptativo
Pueden utilizarse de dos formas: importando una hoja de estilo o aplicandolas dentro de una misma hoja de estilo
Importación de hojas de estilo
Podemos utilizar las media queries para elegir distintas CSS dependiendo del medio o las características del mismo
Actualmente sólo existen dos medios admitidos:
screen un navegador
print una impresora
Como puede observarse en el ejemplo, definir el tipo de medio es tan sencillo como añadir el atributo media dentro del elemento link
También es posible indicar condiciones sobre el tipo de medio, en el ejemplo le hemos dicho que se se cargue cuando el medio tenga una anchura inferior a 800px, para poder usarla con tablets
Reglas @media
Las reglas @media nos permiten indicar sobre qué tipo de medio deben aplicarse ciertas reglas CSS
Su sintasix genérica es:
Los únicos mediatype admitidos son screen y print, como hemos visto anteriormente
Como puede verse en el ejemplo, las media feature nos permiten indicar características del dispositivo y se pueden añadir condiciones utilizando los operadores lógicos and, not y only
Podemos utilizando los media feature especificar el tamaño del dispositivo, su orentación o resolución, número de colores, etc
Algunos de los más destacados son:
aspect-ratio ancho/alto del dispositivo
min-aspect-ratio mínimo ancho/alto del dispositivo
max-aspect-ratio máximo ancho/alto del dispositivo
color-index número de colores que el dispositivo puede mostrar
width ancho exacto
min-width ancho mínimo
max-width ancho máximo
height alto exacto disponible
min-height alto mínimo disponible
max-height alto máximo disponible
orientation orientación, admite los valores:
landscape
portrait
Diseño adaptativo con Media Queries
Vamos a ver dos ejemplos con media queries para entender cómo hacer nuestros propios diseños adaptativos, uno con el modelo flexible y otro con el modelo de rejilla
Diseño adaptativo con el modelo flexible
En siguiente ejemplo veremos que crear un diseño adaptativo con el modelo flexible es muy fácil
Ya que podemos aprovecharnos de la posibilidad de reordenar los elementos que nos ofrece esta opción
Vamos a partir de una disposición de 3 columnas con la barra de navegación, el contenido principal y una barra lateral
Cuando el tamaño del navegador sea menor que 640px pasaremos a una única columna
El código HTML que usaremos en el ejemplo es el siguiente:
El código CSS del archivo flexible.css que usaremos en el ejemplo es el siguiente:
Diseño adaptativo con el modelo de rejilla
En siguiente ejemplo veremos que crear un diseño adaptativo con el modelo de rejilla es muy fácil
Una de las principales limitaciones es que ya no que podemos reordenar los elementos
Vamos a usar una rejilla de tipo Bootstrap
Para ello vamos a utilizar las clases cols-xs-12 para indicar que en tamaño pequeño el elemento ocupará 12 columnas, col-sm-8 ocupará 8 columnas para un tamaño pequeño y col-sm-2 ocupará 2 columnas para un tamaño un poco más grande
Para el cambio de tamaño pequeño a grande se ha asignado 768px
El código HTML que usaremos en el ejemplo es el siguiente:
El código CSS del archivo rejilla.css que usaremos en el ejemplo es el siguiente:
A continuación vamos a tratar algunas de las principales listas de declaraciones
Unidades de medida
Muchas propiedades aceptan como valor una unidad de medida
En general, es recomendable utilizar medidas relativas en vez de absolutas
Por ejemplo, para una página para la web podríamos indicar que queremos 20 píxeles de alto, sin embargo, si nuestros usuarios cambian de dispositivo, como por ejemplo a un móvil o a una tablet, ese tamaño seria o muy grande o el contenido aparecería desproporcionado
Para evitar ese problema u otros similares, las declaraciones CSS admiten las siguientes unidades:
Porcentaje: establece el tamaño en un tanto por ciento con respecto al valor heredado
em: establece el tamaño de acuerdo a la fuente actual (o de la fuente heredada, si no se ha definido un tamaño de fuente)
px: establece el tamaño en píxeles (un píxel representa un punto concreto de la pantalla que muestra nuestra página), siendo una medida absoluta, como puede generar problemas, deberíamos limitar su uso a casos concretos
Podemos utilizar las declaraciones CSS para indicar la apariencia visual de la página web en distintos dispositivos, como por ejemplo una impresora. Para esos casos podemos utilizar otro tipo de medidas:
cm, mm, in: el tamaño se establece en una de las unidades internacionales (cm para centímetros, mm para milímetros e in para pulgadas)
pt: el tamaño se establece en puntos (un punto equivale a \frac{1}{72} de pulgada)
El uso de medidas relativas (porcentajes o em) permiten que nuestra página se visualice correctamente en cualquier dispositivo. A esta práctica se la denomina diseño adaptativo o responsive, es decir, nuestro diseño se adaptará al dispositivo en el cual sea visualizado (un navegador, un móvil, una tablet, etc)
Colores
Otro de los elementos fundamentales para una página web es el tratamiento de los colores
Hay una lista de 140 colores básicos que podemos encontrar predefinidos, también podemos definirlos manualmente utilizando la notación RGB (Red, Green, Blue) para indicar la cantidad de rojo, verde y azul que componen ese color
Para definir el color usaremos un valor entre 0 y 255 (en su valor hexadecimal), iniciando la codificación con el simbolo ‘#’ seguido de un número hexadecimal de 6 cifras
Podemos definir el color de las siguientes maneras:
color: valor dónde valor es uno de los colores predefinidos
color: codigo dónde código es un valor que empieza por el símbolo ‘#’ seguido de un número hexadecimal de 6 cifras
color: RGB(entero, entero, entero): dónde RGB es una función que admite 3 valores entre 0 y 255 que corresponden a la cantidad de rojo, verde y azul que componen ese color
color: RGB(entero%, entero%, entero%): igual que la anterior, pero el valor entero es un porcentaje
color: transparent: el color transparente también es un color válido en CSS3
Propiedades de texto
Las principales propiedades que se pueden utilizar en los elementos de texto son:
color
indica el color de la fuente. Su valor es un color, ya lo hemos descrito en el párrafo anterior
font-size
representa el tamaño de la fuente, como ya se ha descrito en el párrafo anterior es recomendable usar valores relativos
font-style
admite un estilo de letra para el texto, podemos elegir entre uno de los siguientes estilos:
normal es el estilo por defecto del navegador, si no se especifica, se tomará este valor
italic es el estilo por defecto del navegador para la letra en cursiva
oblique es el estilo por defecto del navegador para la letra oblique, es similar a la cursiva, si la fuente no permite el tipo oblique tomará el estilo como italic
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
font-weight
admite un estilo de letra en negrita para el texto, podemos elegir entre uno de los siguientes tipos de negrita:
normal es la negrita por defecto del navegador, si no se especifica, se tomará este valor
bold define la negrita con caracteres gruesos
bolder define la negrita con los caracteres más gruesos
lighter define la negrita con los caracteres más finos
entero define la negrita con un valor múltiplo de 100, con el valor 400 por defecto y el 700 para bold
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
text-decoration-line
establece el tipo de decoración del texto para el subrayado, podemos elegir entre uno de los siguientes tipos de decoración:
none valor por defecto del navegador, si no se especifica, se tomará este valor
underline el subrayado será debajo del texto
overline el subrayado será sobre el texto
line-through el subrayado será a través del texto
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
text-decoration-color
establece el color para la decoración del texto, podemos elegir entre uno de los siguientes tipos de decoración:
color donde color es uno de los valores vistos en el párrafo anterior
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
text-decoration-style
establece el tipo de decoración del texto, podemos elegir entre uno de los siguientes tipos de decoración:
solid valor por defecto del navegador, si no se especifica, se tomará este valor. Mostrará la línea en una única línea
double mostrará la línea con una doble línea
dotted mostrará la línea como una línea de puntos
dashed mostrará la línea como una línea discontinua
wavy mostrará la línea como una línea ondulada
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
text-transform
establece el texto en letras minúsculas o mayúsculas, podemos elegir entre uno de los siguientes tipos de transformación:
none valor por defecto del navegador, si no se especifica, se tomará este valor. No se tomarán letras mayúsculas
capitalize se transforma la primera letra de cada palabra a mayúscula
uppercase se transforman todas las letras a mayúsculas
lowercase se transforman todas las letras a minúsculas
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
letter-spacing
aumenta o disminuye el espacio entre caracteres en un texto, podemos elegir entre uno de los siguientes:
normal valor por defecto del navegador, si no se especifica, se tomará este valor. No hay espacios extra
length dónde lenghth es la cantidad de espacios extra entre caracteres (también están permitidos valores negativos)
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
word-spacing
aumenta o disminuye el espacio entre las palabras en un texto, podemos elegir entre uno de los siguientes:
normal valor por defecto del navegador, si no se especifica, se tomará este valor
length dónde length es la cantidad de espacios extra entre palabras (también están permitidos valores negativos)
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
line-height
especifica la altura de una línea, podemos elegir entre uno de los siguientes:
normal valor por defecto del navegador, si no se especifica, se tomará este valor
number dónde number es un valor que se multiplicará por el tamaño de la fuente actual para establecer la altura de la línea
length dónde length es la altura para esa línea (también están permitidos valores negativos)
% es la altura para esa línea en porcentaje del tamaño de la fuente actual
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
text-align
especifica la alineación horizontal del texto en un elemento, podemos elegir entre uno de los siguientes:
left el texto se alinea a la izquierda
right el texto se alinea a la derecha
center el texto se alinea centrado
justify el texto las líneas son estiradas para que cada línea tenga el mismo ancho (como en los periódicos y las revistas)
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
text-indent
especifica la sangría de la primera línea en un bloque de texto, podemos elegir entre uno de los siguientes:
length dónde length es la sangría de la primera línea en un bloque de texto (también están permitidos valores negativos, en ese caso se usará una sangría a la izquierda)
% es la sangría de la primera línea en un bloque de texto en porcentaje del tamaño del elemento padre
initial se utiliza para establecer una propiedad CSS a su valor por defecto
inherit se utiliza para heredar una propiedad del valor desde su elemento padre
Es muy importante definir una fuente que sea coherente con el estilo de nuestra web. Para ello se dispone de la propiedad font-family, en la cual especificaremos la fuente (verdana, arial, time new roman, etc) que será usada para ese texto
Sin embargo nos encontraremos con un problema si esa fuente en concreto no está definida en el navegador, por eso es recomendable especificar varias fuentes en caso de que no existiera alguna de ellas
Otra de las limitaciones es que sólo podremos usar fuentes que cumplan los estándares permitidos por los navegadores
Para solucionar los problemas relacionados con las fuentes existen servidores de fuentes de texto que ofrecen la posibilidad de cargar la fuente que necesitamos de ese servidor
En el ejemplo anterior hemos utilizado una de las fuentes de referencia de Google llamada Roboto y la hemos añadido a nuestra cabecera
Propiedades de fondo
Para establecer el fondo de un elemento utilizaremos la propiedad background-color
También puede utilizarse como fondo una imagen utilizando la propiedad background-image, que se repetirá vertical y horizontalmente para cubrir todo el elemento
Podemos limitar la forma en que se repite esa imagen con las propiedades background-repeat: repeat-y y background-repeat: repeat-x
En el ejemplo anterior hemos utilizado la propiedad background-repeat: no-repeat para desactivar la repetición de la imagen, estableciendo además una posición fija, en la esquina inferior derecha, con la propiedad background-position: right bottom
Para mantenerla fija y que haga scroll en la página, se ha utilizado la propiedad background-attachment: fixed
Dimensiones y bordes
Para indicar las dimensiones de un elemento usaremos las propiedades width y height (anchura y altura)
Debemos tener en cuenta si sus márgenes son internos o externos
Para ello primero definiremos el margen desde el borde hasta los otros elementos con la propiedad margin
En segundo lugar definiremos el margen interno hasta el propio borde del elemento con la propiedad padding
Podemos asignar un margen externo para los cuatro lados con la propiedad margin o podemos indicarle un margen externo en particular para cada lado utilizando margin-top, margin-bottom, margin-left o margin-right
De forma análoga, se puede realizar para los márgenes internos utilizando padding-top, padding-bottom, padding-left o padding-right
Una vez difinidos los márgenes externos e internos, podremos configurar la apariencia que tomará el borde
Primero estableceremos el estilo con la propiedad border-style, la cual admite los valores dotted (puntuado), dashed (discontinuo), solid (sólido) o double (doble)
También es posible usar valores para crear bordes biselados, pero las guías de estilo modernas desaconsejan su uso por estar «pasados de moda»
En segundo lugar podremos personalizar la anchura del trazo con la propiedad border-width y su color con border-color
Propiedades para listas
Podemos utilizar las siguientes propiedades para manejar elementos lista:
list-style-type: representa el tipo de marcador que se utilizará en la lista
Existen estos valores predefinidos:
circle
square
decimal
lower-roman
upper-roman
none
list-style-position: indica si el marcador se incluirá dentro del texto (propiedad inside) o fuera (propiedad outside), siendo esta última la más habitual
list-style-image: permite añadir una imagen como marcador
Podremos usar los valores none o url(‘url de la imagen’)
Otras propiedades
Además de las propiedades anteriores vamos a destacar un par más que nos serán de especial utilidad a la hora de dar formato a nuestros elementos:
visibility: indica si el elemento está visible o no Puede tomar uno de los siguientes valores:
visible: el elemento está visible
hidden: el elemento está no visible
collapse: solo podremos usarlo con los elementos de tablas para no visualizar una fila o una columna concreta
display: cambia el tipo de caja del elemento, puede tener los valores:
El uso de procesadores CSS surge por un problema muy común en las hojas de estilo, muchos valores se repiten constantemente
Como podemos ver en el ejemplo anterior, el color #C0392B se repite constantemente en el código porque es nuestro color principal en este diseño
¿Pero, y si necesitamos cambiarlo? Esa situación nos obligaria a cambiar todas sus apariciones en la hoja de estilo
En el ejemplo anterior se ha solucionado el problema con la variable colorPrincipal, sin embargo, esta solución no es permitida por el CSS estándar
Por eso surge la necesidad del uso de procesadores CSS, que son aplicaciones que permiten dotar al CSS de las ventajas de un lenguaje de programación, como el uso de variables, funciones, condiciones e incluso cálculos matemáticos, los cuales serán traducidos posteriomente a un CSS válido
No existe un estándar claro para este tipo de procesadores, pero tenemos las siguientes alternativas:
Sass funciona con Ruby, el cual viene preinstalado en Mac; si eres usuario de Windows necesitaras instalar previamente Ruby
Funciona mediante línea de comandos en un terminal, ya que no tiene entorno gráfico
Si quieres usarlo en modo visual, existen varias herramientas de pago que podrian interesarte
LESS está escrito en javascript, por lo que su instalación es tan sencilla como su importación directamente a nuestro documento HTML
Existen herramientas gratuitas que ayudan a compilar tus archivos escritos en LESS a un CSS válido
Aunque puede configurarse LESS para que haga el proceso de compilación ‘al vuelo‘, aunque no es recomendable porque consume tiempo de carga cada vez que recompila
Stylus necesitaremos instalar previamente Node.js, el cuál tiene su propio conjunto de repositorios que permite tener siempre la última versión estable del programa
Funciona mediante línea de comandos en un terminal, ya que no tiene entorno gráfico
Si quieres usarlo en modo visual, existen varias herramientas de pago que podrian interesarte
La sintaxis de estas herramientas es similar aunque hay pequeñas diferencias entre ellas, ya que como se ha dicho, no hay un estándar para preprocesadores CSS
LESS
Instalación
Con esta herramienta crearemos archivos .less donde se guardarán nuestras reglas CSS mejoradas
Incluiremos LESS en nuestro HTML mediante la importación de Javascript y se encargará de traducir el archivo .less en un .css válido que será cargado en la página HTML
Este tipo de instalación usada sólo en desarrollo es considerada ‘al vuelo‘ y llamada compilación, por motivos de eficiencia, en la página de producción, se añadirá el .css válido y ya traducido
Para poder realizar esta traducción ‘al vuelo‘ añadiremos las siguientes líneas en el head de nuestro HTML:
En el ejemplo nuestro fichero LESS se llama mystyle.less y le hemos indicado al navegador que es una hoja de estilos LESS con la referencia ‘stylesheet/less’
Despues hemos cargado la libreria Javascrip de LESS llamada less.js, que será la encargada de traducir el archivo mystyle.less al CSS válido y lo cargará en el HTML
Variables
Antes hemos visto un ejemplo para definir una variable para el color, en LESS se definen las variables con el símbolo @
Mixins
Los mixins permiten que una regla CSS herede todas las declaraciones de otra
En el ejemplo anterior hemos hecho que los elementos p, ul y ol incluyan todas las declaraciones de .bloque y así nos ahorramos el tener que volver a escribirlas en cada aparición
Los mixins también permiten la utilización de parámetros para configurarlos
En el ejemplo anterior hemos definido el mixin error donde el ancho de borde es configurable con la variable @anchoBorde
Si no hay parámetros, su valor por defecto será 2px, como se ha indicado en su definición
.error-generico llama al mixin para heredar todas las declaraciones y, como no tiene parámetros toma su valor por defecto
.error-login llama al mixin pero esta vez, como tiene un parámetro toma el valor del mismo
Código heredado
A veces surge el problema de tener varios elementos con el mismo padre, con lo que nos vemos obligados a repetir en cada aparición referencias al padre
En el ejemplo anterior tenemos el problema comentado, section es el padre en la mayoría de los elementos de la hoja de estilo, a su vez nav es padre de varios de ellos, al igual que a
En el ejemplo anterior lo hemos solucionado escribiendo anidaciones de los hijos dentro de los elementos padre, así nos ahorramos repetir las referencias
Además permite usar el símbolo & para referirse al elemento padre inmediato dentro del elemento hijo
Funciones para el color
Las funciones para el color permiten modificar el color en tiempo de compilación
Son bastante útiles para crear degradados, oscurecer botones al pasar el ratón, etc
Operaciones
LESS permite operaciones matemáticas
Como se puede ver en el ejemplo, no tiene muchas restricciones, ya que permite hacer cosas sin sentido como mezclar distintas unidades
Media queries
Uno de los problemas de los media queries es que podemos tener distintas definiciones de la misma clase en disintos puntos del archivo CSS
Podemos anidar los media queries dentro de la misma clase, solucionando el problema del ejemplo anterior
JavaScript, al igual que Java o VRML, surgió para extender las capacidades del lenguaje HTML y conseguir páginas web dinámicas
JavaScript no es un lenguaje de programación propiamente dicho
Es un lenguaje script u orientado a documento, como pueden ser los lenguajes de macros que tienen muchos procesadores de texto. Nunca podrás hacer un programa escrito en JavaScript, tan sólo podrás mejorar tu página Web insertando código javascript en la misma
Utilidad de JavaScript
JavaScript sirve principalmente para mejorar la gestión de la interfaz cliente / servidor. Un script JavaScript insertado en un documento HTML permite reconocer y tratar localmente, es decir, en el cliente, los eventos generados por el usuario. Estos eventos pueden ser el recorrido del propio documento HTML o la gestión de un formulario
Por ejemplo: cuando la página HTML es un formulario que permite acceder a una agenda telefónica, se puede insertar un script que verifique la validez de los parámetros proporcionados por el usuario. Esta prueba se efectúa localmente y no necesita un acceso a la red
Por otro lado, también se podrá utilizar JavaScript para efectuar varias opciones a la vez; por ejemplo, visualizar dentro de un documento HTML un vídeo o ejecutar un applet de Java…
Diferencias con Java
La principal diferencia entre JavaScript y Java, es que este último es un lenguaje de programación completo. Aunque comparten la misma sintaxis
JavaScript es un lenguaje que se integra directamente en las páginas HTML. Tiene como características principales las siguientes:
Es interpretado (no compilado) por el cliente, es decir, se ejecuta directamente el programa fuente, al contrario que en los lenguajes compilados, no se genera ni código objeto ni ejecutable para cada ordenador en el que se quiera ejecutar dicho programa
Está basado en objetos. No es, como Java, un lenguaje de programación orientada a objetos (OOP). JavaScript no emplea ni clases ni herencia, ni otras técnicas típicas de la OOP
Su código se integra en las páginas HTML, incluido en las propias páginas
No es necesario declarar los tipos de variables que van a utilizarse, JavaScript realiza una conversión automática de tipos
Las referencias a objetos se comprueban en tiempo de ejecución. Esto es consecuencia de que JavaScript no es un lenguaje compilado
No es posible trabajar directamente con ficheros, ni escribir automáticamente al disco duro. Por eso se dice que JavaScript es un lenguaje seguro para los usuarios de internet
Utilización de JavaScript en un documento HTML
La inserción de un documento HTML se realiza mediante la marca SCRIPT utilizando la sintaxis:
Los atributos de esta marca son:
type=“text/javascript”
Precisa el lenguaje del script. Este atributo es obligatorio en ausencia del atributo SRC
src=url
El atributo SRC precisa el URL del script a insertar en el documento. Este atributo es opcional, porque el script puede insertarse directamente en un documento HTML
Podrá especificarse para insertar en un documento un script de un lenguaje determinado y que cuyo código fuente se encuentra en un archivo especificado en un determinado url. Puede sernos útil si queremos que varias de nuestras páginas web compartan los mismos scripts sin tener que insertarlos en cada una, repitiendo el código
A continuación enunciaremos algunos puntos a tener en cuenta respecto a la introducción de JavaScript en un documento HTML:
El script insertado mediante la marca SCRIPT es evaluado por el cliente tras la visualización de la página HTML. Las funciones definidas no se ejecutan inmediatamente, dependen de los eventos asociados a la página
La inserción del script mediante la marca SCRIPT puede colocarse en cualquier lugar del documento HTML pero se recomienda colocarla en la cabecera, es decir, en la zona definida por el HEAD. De este modo, el script está definido desde el principio del documento, lo que garantiza que éste sea visible en todo el documento
Si se definen, además del script mediante el atributo SRC, scripts en el propio documento, el cliente evaluará en primer lugar el insertado mediante el atributo SRC y seguidamente los incluidos en el documento
Los URL correspondientes a un JavaScript poseen generalmente la extensión .js
Es preferible delimitar los scripts insertados en un documento por comentarios HTML para asegurarse de que el contenido del script no aparecerá en los clientes que no reconozcan la marca SCRIPT. Por ejemplo:
El lenguaje JavaScript no es case sensitive, es decir, no distingue mayúsculas de minúsculas salvo en las cadenas de caracteres literales
Por último, comentar otra forma de introducir scripts en documentos HTML, y es incluir estos script como controladores de eventos de algunas marcas, como pueden ser la marcas de imágenes, anclas, links, botones, etc. Veamos un ejemplo:
Como puede verse, dentro de esta marca, como atributo de esta, se pone un controlador de eventos y después del signo igual y entre comillas se incluye el código de JavaScript. Ahora bien, también es posible llamar a una función desde el HEAD del documento. Se recomienda esta segunda opción ya que es una manera más limpia y clara de escribir páginas. Se conseguiría el mismo resultado que en el ejemplo anterior:
Las versiones de JavaScript
El lenguaje fue inventado por Brendan Eich en la empresa Netscape Communications. Apareció por primera vez en el Netscape Navigator 2.0. La cual incluía JavaScript bajo el nombre de Mocha, cuando apareció esta versión de Navigator se le llamaba LiveScript. Finalmente fue rebautizado como JavaScript en un anuncio conjunto entre Sun Microsystems y Netscape, el 4 de diciembre de 1995
Tradicionalmente, se venía utilizando en páginas web HTML, para realizar tareas y operaciones en el marco de la aplicación únicamente cliente, sin acceso a funciones del servidor. JavaScript se ejecutaba en el navegador del usuario al mismo tiempo que las sentencias iban descargándose junto con el código HTML. Lo que quería Netscape es que JavaScript fuera un lenguaje de guiones, fácil de usar y que cualquier persona pudiera utilizarlo. Después de 2 años JavaScript se convirtió en una de las herramientas más utilizadas por los desarrolladores web, utilizándose casi en el 90% de los desarrollos web, incluso más que Java y Activex
Netscape introdujo una implementación de script del lado del servidor con Netscape Enterprise Server, lanzada en diciembre de 1994 (poco después del lanzamiento de JavaScript para navegadores web)
En el año de 1996 Microsoft empezó a mostrar gran interés en competir con JavaScript por lo que lanzó el lenguaje llamado Jscript, que era la implementación de ECMAScript, muy similar al JavaScript de Netscape, pero con ciertas diferencias en el modelo de objetos del navegador que hacian a ambas versiones incompatibles. Pero la versión 4.0 del Internet Explorer soportaba sin ningún problema, la versión 1.1 de JavaScript. Sin embargo, Jscript no pudo competir directamente con Javascript
A mediados de 1997, Netscape promocionó JavaScript y lanzó la versión 1.2. Esta nueva versión incluía nuevos componentes que daban gran potencial al lenguaje, pero lamentablemente esta versión solo funcionaba en la última versión del Navigator. Los autores propusieron que fuera adoptado como estándar de «the European Computer Manufacturer’s Association» (ECMA, con la implementación ECMAScript), que a pesar de su nombre no era europeo sino internacional, con sede en Ginebra. Poco después también fue propuesto como un estándar ISO
La versión 1.3 fue una pequeña revisión de la 1.2, que fue incluida en la versión 4.07 del Netscape Navigator
Para evitar estas incompatibilidades, el World Wide Web Consortium diseñó el estándar Document Object Model (DOM, ó en castellano, Modelo de Objetos del Documento), que incorporan Konqueror, las versiones 6 de Internet Explorer y Netscape Navigator, Opera versión 7, y Mozilla desde su primera versión
A partir de mediados de la década de los 2000, ha habido una proliferación de implementaciones de JavaScript para el lado servidor. Node.js es uno de los notables ejemplos de JavaScript en el lado del servidor, siendo usado en proyectos importantes
La llegada de Ajax devolvió a JavaScript a la fama y atrajo la atención de muchos programadores. Como resultado de esto hubo una proliferación de un conjunto de frameworks y librerías de ámbito general, mejorando las prácticas de programación con JavaScript, y aumentado el uso de JavaScript fuera de los navegadores web, con la proliferación de entornos JavaScript del lado del servidor. En enero de 2009, el proyecto CommonJS fue inaugurado con el objetivo de especificar una librería para uso de tareas comunes principalmente para el desarrollo fuera del navegador web
En junio de 2015 se cerró y publicó el estándar ECMAScript 6 (última versión hasta la fecha) con un soporte irregular entre navegadores y que dota a JavaScript de características avanzadas que se echaban de menos y que son de uso habitual en otros lenguajes como, por ejemplo, módulos para organización del código, verdaderas clases para programación orientada a objetos, expresiones de fecha, iteradores, generadores o promesas para programación asíncrona
Los comentarios en JavaScript
Los comentarios en el código permiten insertar observaciones del autor para describir las distintas partes del programa. El intérprete de JavaScript los ignora y por ello poseen una sintaxis particular
Se distinguen los comentarios en una sola línea, precedidos por la barra oblicua doble // y los comentarios en varias líneas delimitados por los símbolos /* y por */. Por ejemplo:
Identificadores y palabras reservadas
Conocer cuál es la sintaxis de los identificadores y cuales son las palabras reservadas es algo necesario antes de empezar a escribir un programa en un lenguaje de programación determinado
Los identificadores de un lenguaje son la ristra de caracteres que le asignamos a los nombres de variables, constantes, funciones, objetos, etc…, que nosotros definimos en dicho lenguaje, estos son necesarios para poder invocar a dichos elementos en lugares posteriores a su definición
Los identificadores deben seguir las siguientes reglas:
El identificador debe empezar por una letra o por el carácter ‘_’
Los caracteres siguientes, además de letras o el carácter ‘_’, pueden ser cifras
Hay que tener en cuenta que el uso de mayúsculas o minúsculas no es importante, porque JavaScript no diferencia de los nombres de mayúsculas o minúsculas en los identificadores. Veamos algunos ejemplos de nombres de variables:
Primeramente decir que las palabras reservadas son palabras especiales que se utilizan para aumentar la legibilidad y separar las entidades sintácticas. Estas palabras no pueden usarse como identificadores
A continuación veremos un cuadro en el que se muestran todas las palabras reservadas existentes en JavaScript, estas palabras tienen o tendrán un significado especial dentro del lenguaje:
JavaScript posee una amplia variedad de operadores
Estos operadores los podemos distinguir en dos grupos: binarios, que actúan sobre dos operandos y unarios, que sólo requieren un operando
Así, su sintaxis general es:
operando1 operador_Binario operando2
operando1 operador_unario
operador_unario operando1
Operadores aritméticos
JavaScript suministra las operaciones básicas con el único añadido del operador que devuelve el resto de la división entre el operador izquierdo y el derecho. Se carece de operadores más complejos, aunque el objeto Math definido en JavaScript posee dichas tareas
Operadores aritméticos
+
Suma
–
Resta
*
Multiplicación
/
División
%
Resto
NotaEl operador + aplicado a strings, concatena ambas strings en una sola
Operadores de incremento (++) y decremento (- -)
Estos operadores son unarios y realizan el autoincremento y el autodecremento a la variable que se les aplica. Además de modificar la variable, devuelven el valor de la misma
El operador de incremento o decremento puede ir delante p detrás de la variable teniendo diferente significado
Si el operador es ++ se sitúa después de la variable se denomina post-incremento, haciendo que primero tome el valor y después se incrementa en una unidad la variable
Si el operador ++ se sitúa antes de la variable se denomina pre-incremento y hace que primero se incremente en una unidad la variable y luego se tome el valor
Si el operador es – – se sitúa después de la variable se denomina post-decremento, haciendo que primero tome el valor y después se decrementa en una unidad la variable
Si el operador – – se sitúa antes de la variable se denomina pre-decremento y hace que primero se decremente en una unidad la variable y luego se tome el valor
Operadores relacionales
Se emplean típicamente en las expresiones condicionales. Los operadores relacionales devuelven valores booleanos. Los operandos pueden ser tanto numéricos como strings
Operadores relacionales
>
Mayor que
<
Menor que
> =
Mayor o igual que
< =
Menor o igual que
! =
Distinto que
= =
Igual que
Operadores lógicos
Los operandos lógicos está relacionados con los relacionales ya que normalmente los operandos que usan son resultado de expresiones relacionales. Los valores resultantes son booleanos
Operadores lógicos
& &
AND
| |
OR
!
NOT
Operadores bit a bit
La forma de trabajar de estos operadores es convertir a binario los operandos y luego operar con ellos bit a bit
Operadores bit a bit
&
AND
|
OR
^
XOR
<<
Propagación a la izquierda Desplaza el valor hacia la izquierda introduciendo ceros, si se sale de rango se pierden valores
>>
Propagación a la derecha Desplaza el valor hacia la derecha introduciendo por la izquierda el bit de signo y eliminando los valores que se salgan por la derecha
>>>
Zero fill, propagación a la derecha Similar a << pero hacia la derecha. No introduce bit de signo
NotaLos operadores de propagación toman dos operandos: el primero es la variable a propagar y el segundo es el número de posiciones a propagar
Operadores de asignación
La asignación también es un operador que devuelve la variable modificada. El operador de asignación en JavaScript es =. Los operadores de asignación que se muestran a continuación no son sino abreviaturas que hacen más cómoda y simples las expresiones, aunque a veces sean más ilegibles
Operadores de asignación
Operador
Expresión
Equivalencia
=
A=B=C;
A=C;
B=C;
+ =
A + = 4;
A = A + 4;
– =
A – = 3 * B;
A = A – (3 * B);
* =
A * = 2;
A = A * 2;
/ =
A / = 35 + B;
A = A / (35 + B);
>> =
A >> = 1;
A = A >> 1;
<< =
A << = B;
A = A << B;
>>> =
A >>> = B + 1;
A = A >>> (B + 1);
& =
A & = (C + = 3);
C = C +3;
A = A & C;
^ =
A ^ = 2;
A = A ^ 2;
| =
A | = C;
A = A | C;
Otros operadores
Operador de selección
Este operador se utiliza para ejecutar una operación u otra dependiendo de la condición. El formato es el siguiente:
Condición ? Exp1 : Exp2
Si se cumple la condición se evalúa y se devuelve la expresión Exp1 si no la Exp2. Podemos poner un sólo valor. Ejemplo:
Operador new
Este operador se va a utilizar para crear una instancia de un tipo de objetos previamente definido. La sintaxis a seguir es la siguiente:
variableObjeto = new tipoDeObjeto(parámetro 1, parámetro 2, …)
Estos parámetros son los que se le pasan al constructor de dicho objeto en cuestión
Operador typeof
Este operador aplicado a una variable devuelve el tipo de objeto al que pertenece el dato contenido por dicha variable. Su sintaxis es:
typeof(variable)
Preferencia
La preferencia de los operadores va a determinar el orden en que se ejecuten en una expresión determinada. Usando paréntesis controlaremos que las operaciones se lleven a cabo según nosotros queramos. En JavaScript la preferencia de los operadores de mayor a menor es la siguiente:
Preferencia
Negación / (in / de) cremento
!
++
—
Mul / Div / Resto
*
/
%
Suma / Resta
+
–
Propagación
<<
>>
>>>
Relacionales
<
< =
>
> =
Igualdad
= =
!=
AND bit a bit
&
XOR bit a bit
^
OR bit a bit
|
AND lógica
&&
OR lógica
| |
Otros operadores
?:
New
Typeof
Asignación
=
+ =
– =
* =
/ =
>> =
<< =
>>> =
& =
^ =
| =
Página web de Sergio Cárcamo García dedicada a la informática y temas relacionados como los lenguajes de programación, la estadística, las matemáticas, etc
Política de Cookies
Este sitio web utiliza cookies para mejorar su experiencia. Asumiremos que está de acuerdo con ello, pero puede optar por abandonarnos si lo desea. AceptarLeer más
Política de Privacidad y Cookies
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Cookies que son necesarias para el buen funcionamiento de la página web, ya que en caso de no aceptarlas, cancelarlas o borrarlas, podría notar problemas de rendimiento o fallos en el contenido mostrado
Cookies que no son necesarias para el buen funcionamiento de la página web, ya que en caso de no aceptarlas, cancelarlas o borrarlas, no notaría problemas de rendimiento o fallos en el contenido mostrado
Las cookies funcionales ayudan a realizar ciertas funciones, como compartir el contenido del sitio web en plataformas de redes sociales, recopilar comentarios y otras funciones de terceros.
Cookie
Duración
Descripción
CookieLawInfoConsent
Hasta finalizar la sesión del navegador
Controla la visualización del consentimiento de Cookies, su gestión y visualización en la página web por parte del usuario
qtrans_admin_language
Hasta finalizar la sesión del navegador
Permite al administrador gestionar la traducción de la página web a varios idiomas
qtrans_edit_language
Hasta finalizar la sesión del navegador
Permite al administrador editar la traducción de la página web a varios idiomas
viewed_cookie_policy
Hasta finalizar la sesión del navegador
Controla si la visualización del consentimiento de Cookies es visible actualmente en la página web para el usuario o por el contrario está oculta
Las cookies de rendimiento se utilizan para comprender y analizar los índices de claves para mejorar el rendimiento del sitio web, lo que ayuda a brindar una mejor experiencia de usuario a los visitantes.
Cookie
Duración
Descripción
PHPSESSID
Hasta finalizar la sesión del navegador
Preferencias del usuario, información sobre la interacción con el sitio web (servicio solicitado, fecha y hora), tipo de navegador y lenguaje, localización geográfica, etc
Las cookies de análisis se utilizan para comprender cómo interactúan los visitantes con el sitio web. Estas cookies ayudan a proporcionar información sobre métricas, el número de visitantes, la tasa de visitas, el origen del tráfico, etc.
Las cookies publicitarias se utilizan para proporcionar a los visitantes anuncios y campañas de marketing relevantes. Estas cookies rastrean a los visitantes en los sitios web y recopilan información para proporcionar anuncios personalizados.