Archivo de la categoría: Lenguaje de programación

Lenguaje de programación es un lenguaje formal diseñado para realizar procesos que pueden ser llevados a cabo por máquinas

Funciones en Python

Funciones en Python

Para definir funciones en Python disponemos de la instrucción def

Después de esta palabra reservada va el nombre de la función junto con una lista de argumentos delimitados por paréntesis y separados por comas, finalizando con el símbolo :

La definición de una función no ejecuta el cuerpo de la función

Solamente será ejecutada cuando la función sea llamada

Su ejecución enlaza el nombre de la función con el namespace local actual a un objecto función (un envoltorio alrededor del código ejecutable para la función)

Este objeto función contiene una referencia al namespace local global como el namespace global para ser usado cuando la función sea llamada

De forma opcional puede añadirse una expresión que será devuelta por la función

La expresión puede será un tipo válido de Python precedida por la sentencia return

El DOCSTRING es un texto descriptivo de la función encerrado entre tres comillas dobles de apertura y cierre, antes de la primera instrucción

Es opcional, así que si no queremos añadir una descripción, podemos omitirlo

Pero se recomienda su uso para que cuando revisemos después de un tiempo nuestro código, recordemos qué hacía nuestra función

Argumentos

El paso de argumentos es opcional y en algunos casos puede haber funciones que carezcan de ellos

Tipo de los argumentos

Admite los tipos str, int, float, complex,bool, list, tuple, dic y class

Argumentos con valor por posición

Cuando enviamos argumentos a una función, estos se reciben por orden en los parámetros definidos

Argumentos con valor por nombre

Es posible evadir el orden de los parámetros si indicamos durante la llamada el valor que tiene cada parámetro a partir de su nombre

Sin Argumentos

Al momento de llamar una función la cual tiene definidos unos parámetros, si no pasa los argumentos correctamente provocará una excepción TypeError

Argumentos con valor por defecto

En ocasiones necesitamos que un argumento tenga un valor, para evitar un error (que provocaría el lanzamiento de la excepción TypeError), aunque el usuario de la función no lo introduzca

Hay que tener en cuenta, que los argumentos con valor por defecto pasan a ser opcionales y que todos los argumentos a la izquierda del primer valor por defecto, son obligatorios

En el ejemplo se ha utilizado el valor nulo (None) para expresar que no se habían pasado argumentos

Pero podríamos utilizar cualquier tipo que precisemos como valor por defecto

Argumentos indeterminados

En algunas ocasiones no sabremos previamente cuantos elementos necesitamos enviar a una función

Para estos casos podemos utilizar los parámetros indeterminados por posición o por nombre

Argumentos por posición

Como argumento usaremos un tipo tuple precediendolo con el símbolo *

De esta forma todos los argumentos serán recibidos por posición, pudiendo recorrerlos cómodamente con un bucle for

Argumentos por nombre

Como argumento usaremos un tipo dict precediendolo con los símbolos **

De esta forma todos los argumentos serán recibidos por el nombre de la clave del diccionario, pudiendo recorrerlos cómodamente con un bucle for

Argumentos por posición y nombre

En alguna ocasión puede necesitar utilizar ambos tipos de parámetros simultáneamente en una función, entonces debe crear ambas colecciones dinámicas

Primero los argumentos indeterminados por valor y luego por nombre

En todos los ejemplos se han utilizado los nombres args y kwargs pero no son obligatorios

Muchos frameworks y librerías los utilizan por lo que es una buena practica llamarlos así, por convención

La sentencia pass

Es una operación nula, cuando la ejecutamos, parece que nada sucede

Es útil como un contenedor cuando una sentencia es requerida sintácticamente, pero no es necesario ejecutar código

La sentencia return

La sentencia return es la que permite devolver el resultado de una función

Admite los tipos str, int, float, complex,bool, list, tuple, dic y class

La setencia return es opcional, pero si se omite, por defecto devolverá el valor nulo (None)

Retorno múltiple

Una característica interesante de las funciones en Python, es la posibilidad de devolver valores múltiples separados por comas

Funciones predefinidas por el lenguaje

Las funciones predefinidas por el lenguaje están ordenadas por módulos

Un módulo es un conjunto de clases y funciones almacenadas en un archivo que pueden ser utilizadas posteriormente

Podemos crear nuestros propios módulos e importarlos a los nuevos programas que hagamos

Sin embargo, es aconsejable reutilizar los módulos ya existentes

Para importar un módulo utilizaremos la sentencia import

De esta forma estaremos manejando un namespace, de forma similar a como lo hace C++ (using namespaces) o Java

Que tiene la siguiente sintaxis

Para llamar a una función concreta del módulo utilizaremos nombre.funcion() o alias.funcion en caso de que le hayamos dado un alias al módulo

En caso de no querer utilizar todas la funciones del módulo pero si una concreta, utilizaremos la sentencia from

Que tiene la siguiente sintaxis

Módulo sys

Este módulo es el encargado de proveer variables y funcionalidades relacionadas con el intérprete

Las variables del módulo sys son:

  • sys.executable

    Retorna el directorio absoluto del archivo binario ejecutable del intérprete de Python

  • sys.platform

    Retorna la plataforma sobre la cual se está ejecutando el intérprete

  • sys.version

    Retorna el número de versión de Python con información adicional

Los métodos más destacados del módulo sys son los siguientes:

  • sys.exit()

    Forzar la salida del intérprete

  • sys.getdefaultencoding()

    Retorna la codificación de caracteres por defecto

  • sys.getfilesystemencoding()

    Retorna la codificación de caracteres que se utiliza para convertir los nombres de archivos unicode en nombres de archivos del sistema

  • sys.getsizeof()

    Retorna el tamaño del objeto pasado como parámetro

Módulo os

Este módulo nos permite acceder a funcionalidades dependientes del SO

Sobre todo, aquellas que nos dan información sobre el entorno del mismo y nos permiten manipular la estructura de directorios

Algunos de los métodos más utilizados son:

  • os.getcwd()

    Nos informa de cuál es el directorio actual

  • os.chdir(ruta)

    Cambia el directorio de trabajo a la ruta pasada como argumento

  • os.chroot()

    Cambia al directorio raiz

  • os.mkdir(directorio)

    Crea el directorio pasado como argumento

  • os.rmdir(directorio)

    Elimina el directorio pasado como argumento

  • os.remove(fichero)

    Eliminar el archivo pasado como argumento

  • os.rename(actual, nuevo)

    Renombra el archivo actual por el nombre del archivo nuevo, pasados como argumentos

Módulo math

Este módulo nos provee de funciones y constantes matemáticas

Podemos encontrar todas las funciones y atributos en su documentación

Algunas de los variables más utilizadas son:

  • math.pi

    Representa el valor de la variable \pi (número Pi)

  • math.e

    Representa el valor de la variable e (número de Euler o constante de Napier)

  • math.tau

    Representa el valor de la variable \tau = 2\cdot\pi (constante Tau, propuesta por Bob Palais, Peter Harremoes, Hermann Laurent, Fred Hoyle, Michael Hartl, Nicolás Atanes, entre otros)

Algunos de los métodos más utilizados son:

  • math.ceil(x)

    Devuelve el entero menor que sea mayor o igual que x

  • math.floor(x)

    Devuelve el entero mayor menor o igual a x

  • math.exp(x)

    Devuelve el número e elevado a la potencia x

  • math.log2(x)

    Devuelve el logaritmo en base 2 de x

  • math.sin(x)

    Devuelve el seno de x radianes

  • math.cos(x)

    Devuelve el coseno de x radianes

  • math.tan(x)

    Devuelve la tangente de x radianes

  • math.degrees(x)

    Convierte el ángulo x de radianes a grados

Módulo random

El módulo random se utiliza para todo lo relacionado con números aleatorios

Algunos de los métodos más utilizados son:

  • shuffle(col)

    Reordena aleatoriamente los elementos de una colección

  • sample(col, k)

    Toma n elementos sin reemplazo de una coleccion

  • random()

    Genera un número aleatorio en el intervalo [0, 1)

  • uniform(a, b)

    Genera un número aleatorio en el intervalo [a, b]

  • randint(a, b)

    Genera un número aleatorio entero en el intervalo [a, b]

  • gauss(media, sigma)

    Genera un número aleatorio siguiendo una distribución gaussiana con media y sigma dadas

Módulo NumPy

Numpy nos proporciona una gran cantidad de funciones matemáticas y el tipo de variable NumPy array

Por lo general el paquete NumPy suele importarse con el alias np

Este módulo nos permite trabajar con estructuras matemáticas de una forma muy cómoda (producto de matrices, números aleatorios, operaciones sobre matrices…)

Es un módulo que no viene instalado por defecto

Para ello abre un terminal y ejecuta:

Podemos encontrar todas las funciones y atributos en su documentación

Algunos de los métodos más utilizados son:

  • random.rand()

    Nos devuelve valores aleatorios con la forma deseada

  • empty()

    Crea un array vacío con la forma indicada

  • zeros()

    Crea un array de ceros con la forma indicada

  • dot()

    Calcula el producto matricial entre dos arrays

  • sum()

    Calcula la suma de los elementos de un array

Módulo Pandas

El paquete pandas es muy utilizado en el Data Scientists

Es uno de los paquetes sobre el que deberíamos centrarnos para aprender sobre análisis de datos

A través de pandas podemos familiarizarnos con nuestro set de datos limpiándolo, transformándolo y analizándolo

Por ejemplo, con pandas podemos leer un fichero CSV de nuestro ordenador, pasarlo a un DataFrame (una tabla, en esencia) y hacer cosas como:

  • Calcular estadísticas y responder preguntas sobre los datos como sacar el máximo, minimo y media de cada columna, saber cómo de correlacionadas están las columnas A y B o conocer la distribución estadística de la columna C
  • Limpiar los datos haciendo cosas como eliminar los valores faltantes o filtrando filas y columnas de acuerdo a algún criterio
  • Visualizar los datos con la ayuda de matplotlib
  • Guardar los datos ya limpiados de vuelta en un CSV o una base de datos
  • Pandas se basa en NumPy, por lo que debemos tener ese módulo instalado previamente

    Jupyter Notebooks es una aplicación que se complementa muy bien con Pandas, ya que podemos ejecutar el código por celdas en vez que de forma completa, lo cual es útil si trabajamos con grandes datasets

    Los componentes primarios de Pandas son series y DataFrame, siendo el primer tipo una columna y el segundo una table

    Por lo general el paquete pandas suele importarse con el alias np

    Es un módulo que no viene instalado por defecto

    Para ello abre un terminal y ejecuta:

    Podemos encontrar todas las funciones y atributos en su documentación

    Ahora vamos a crear un ejemplo sencillo para mostrar el uso de pandas usando una serie que contendrá a los integrantes de la selección Española de fútbol que ganó el mundial del año 2010

    Para crear la serie utilizamos el método pd.Series que recibirá una lista con los nombres de los jugadores y una lista con el número de dorsal de los jugadores

    Después lo mostraremos por pantalla

    Ahora no le vamos a indicar los índices de forma explícita, entonces generará los índices de forma automática empezando desde el valor cero

    Ahora vamos a introducir en la serie un diccionario en vez de una lista y le vamos a añadir un jugador más

    Ahora vamos a crear un ejemplo sencillo para mostrar el uso de pandas usando un DataFrame que contendrá a los integrantes de la selección Española de fútbol que ganó el mundial del año 2010

    Para crear el DataFrame utilizamos el método pd.DataFrame que recibirá un diccionario con los datos de los jugadores, una lista con el nombre de la columna y una lista con el número de dorsal de los jugadores

    Añadiremos un jugador más utilizando el método loc del objeto DataFrame

    Después lo mostraremos por pantalla

    Funciones de visualización

    print

    La función print sirve para enviar la salida de sus argumentos al navegador con un formato

    Operador %

    El operador % también se puede utilizar para el formato de la cadena

    Interpreta el argumento izquierdo de manera muy parecida a una cadena de formato de estilo de la función printf de C++, que se aplica al argumento derecho

    En Python, no hay una función printf pero se le ha dotado de su funcionalidad a print

    Para este propósito, el operador % está sobrecargado para cadenas para mostrar el formato de la cadena

    A menudo se le llama operador de módulo de cadena (o, a veces, incluso, módulo)

    Tiene el formato:

    Para formatear un texto deberemos introducir los siguientes caracteres de formato precedidos por el símbolo %:

    Caracteres de formato para texto
    Caracter Descripción
    c

    El argumento es tratado como un valor de tipo string y recoge un único carácter

    d

    El argumento es tratado como un valor de tipo int y presentado como un número entero

    e

    El argumento es tratado con notación científica (por ejemplo 1.2e+2)

    E

    Como %e pero utiliza la letra mayúscula (por ejemplo 1.2E+2)

    f

    El argumento es tratado como un valor de tipo float y presentado como un número de punto flotante (considerando la configuración regional)

    F

    El argumento es tratado como un valor de tipo float y presentado como un número de punto flotante (sin considerar la configuración regional)

    g

    Igual que %e y %f

    G

    Igual que %E y %f

    o

    El argumento es tratado como un valor de tipo integer y presentado como un número octal

    s

    El argumento es tratado como un valor de tipo string y recoge una cadena de caracteres

    u

    El argumento es tratado como un valor de tipo int y presentado como un número decimal sin signo

    x

    El argumento es tratado como un valor de tipo integer y presentado como un número hexadecimal

    X

    El argumento es tratado como un valor de tipo integer y presentado como un número hexadecimal en mayúsculas

    Método format

    El método format se añadió a los tipos string en Python 2.6

    Permite el uso de los caracteres {} para marcar dónde se sustituirá una variable y utiliza directivas de formato detalladas usadas para formatear

    Este método nos permite concatenar elementos dentro de una salida a través del formato posicional

    Los corchetes y los caracteres dentro de ellos (llamados campos de formato) se reemplazan con los objetos pasados al método format

    Se puede usar un número entre paréntesis para referirse a la posición del argumento pasado al método format

    Hay que tener en cuenta que el primer argumento empieza en cero

    También se puede usar un identificador clave cuando el argumento sea pasado por nombre

    Esta opción nos será útil cuando trabajemos con diccionarios o cuando queramos reducir algo el código

    Opcionalmente se puede poner el símbolo : después del número o nombre, y explicitar el tipo del objeto:

    Caracteres de formato para texto
    Caracter Descripción
    s

    El argumento es tratado como un valor de tipo string y recoge una cadena de caracteres

    d

    El argumento es tratado como un valor de tipo int y presentado como un número decimal (con signo)

    f

    El argumento es tratado como un valor de tipo float y presentado como un número de punto flotante (considerando la configuración regional)

    Funciones de orden superior

    En matemáticas y ciencias de la computación, las funciones de orden superior son funciones que cumplen al menos una de las siguientes condiciones:

    • Tomar una o más funciones como entrada
    • Devolver una función como salida

    Funciones lambda

    Las funciones lambda son funciones anónimas, es decir, funciones sin nombre

    Sólo se utilizan en el lugar en el que se han creado (aunque se les puede asignar un nombre y usarlas más adelante)

    Se utilizan por lo general junto a las funciones map, filter y reduce

    Por lo general se utilizan para crear funciones que son pasadas como argumentos a otras funciones

    En Python la sintaxis de una función lamdba es:

    Donde la expresión puede ser cualquier operación que haríamos al realizar una asignación

    Funcion map

    Nos permite aplicar una función sobre cada uno de los elementos de un iterable

    Nos devuelve un map object, que podemos transformar fácilmente en una lista

    Funcion filter

    Nos permite filtrar los elementos de una colección (por ejemplo una lista)

    Es una función muy utilizada en el tratamiento de colecciones

    Función reduce

    Toma una función y una colección reduciéndola a un solo valor

    Sería equivalente a una función de agregación

    Pertenece al módulo functools, por lo que deberá ser importado antes de poder usar reduce

    La función que pasemos debe tomar al menos dos parámetros y uno opcional

    El primero es el parámetro del agregado que se va acumulado en cada iteración sobre los elementos de la colección

    El segundo el elemento corresponde al paso de la iteración

    El tercero es en caso que se necesite un valor inicial

Excepciones en Python

Excepciones en Python

Si una operación no puede completarse debido a un error, el programa deberá:

  • volver a un estado estable y permitir otras operaciones

  • intentar guardar el trabajo y finalizar

Esta tarea es difícil debido a que generalmente el código que detecta el error no es el que puede realizar dichas tareas por eso debe informar al que pueda manejarlo

La solución más habitual son los códigos de error

Python ofrece otra forma de tratar con los errores en condiciones excepcionales: las excepciones

Una condición excepcional es aquella que impide la continuación de una operación

No se sabe como manejarla, pero no se puede continuar

En Python se lanza una excepción para que alguien que sepa manejarla la trate en un contexto superior

En el ejemplo la función open comprueba si el fichero readme.txt existía en el sistema y en caso de no existir se lanza la excepción FileNotFoundError que de momento está sin tratar

Cuando el intérprete detecta el lanzamiento de la excepción finaliza el método actual y lanza un objeto que facilite información sobre el error ocurrido

Normalmente se gestionará cada tipo de error de forma individual

Manejo de la excepciones

Una vez detectado el error hace falta indicar quien se encarga de tratarlo

Un manejador de excepciones tiene el siguiente formato:

Bloque try

El bloque try delimita el grupo de operaciones que puede producir excepciones

Bloque except

El bloque except es el lugar al que se transfiere el control si alguna de las operaciones produce una excepción

En el ejemplo se ha usado un bloque try con su bloque except para gestionar los errores del ejemplo anterior

Si alguna de las operaciones del bloque produce una excepción, se interrumpe el bloque try y se ejecuta el except

Al finalizar este, se continua normalmente

Si no se produce ninguna excepción, el bloque except se ignora

Excepciones múltiples

También existe la posibilidad de utilizar un nombre de excepción para tratar errores específicos

Algunos de los cuales ya son reconocidos por el sistema, como la excepción FileNotFoundError, que se lanza cuando un archivo no existe en el sistema

En el ejemplo se ha usado un bloque try con varios bloques except para gestionar varias excepciones

Un bloque try puede tener varios except asociados

Le hemos añadimos la sentencia as al bloque except despues de nombrarlo para convertirlo en el objeto de excepción que hemos llamado e

Como puede verse, después de convertirlo en objeto, podemos utilizarlo como si fuera una clase

Cuando una excepción no se corresponde con ningún catch se propaga hacia atrás en la secuencia de invocaciones hasta encontrar un catch adecuado

En el ejemplo se gestionan las excepciones de los métodos f1 y f2 y si no encuentran ninguna continua la ejecución del código de forma normal fuera del bloque try

Se ha usado la sentencia raise seguida del nombre del tipo de excepción para propagarla y tratarla en otro lugar

En este caso la hemos tratado dentro de la propia función f1 en sus bloques excepción

Aunque al propagarla podría haberse tratado fuera de la misma en otro lugar del script

También se ha utilizado un bloque else que permite continuar la ejecución del código en caso de que no haya excepciones antes de continuar fuera del bloque try

Bloque else

Permite continuar la ejecución del código en caso de que no haya excepciones antes de continuar fuera del bloque try

El bloque else puede utilizarse para salir de un bucle si al final del mismo se añade la sentencia break

Es opcional y si no se usa, continuará la ejecución del código en el bloque finally y por último fuera del bloque try

Bloque finally

Puede haber ocasiones en que se desea realizar alguna operación tanto si se producen excepciones como si no

Dichas operaciones se pueden situar dentro de un bloque finally

Si no hay ninguna excepción se ejecutará el bloque try, después el bloque else y por último el finally

Al igual que el bloque else, es opcional y si no se usa, continuará la ejecución del código fuera del bloque try

Normas de uso

  1. Norma

    • Si una excepción se puede manejar no debe propagarse

    • Es más cómodo usar métodos que no produzcan errores

  2. Norma

    • No utilizar las excepciones para evitar una consulta

      • No abusar de ellas

  3. Norma

    • Separar el tratamiento de errores de la lógica

      Todo junto
      Separado
  4. Norma

    • No ignorar una excepción ya que dejamos el código con errores sin controlar

Página Web

Página web

Una página web, o página electrónica, página digital, o ciberpágina es un documento o información electrónica capaz de contener texto, sonido, vídeo, imágenes digitales, programas, acceso a otras páginas web mediante enlaces de hipertexto, imágenes, etc

Se difunde en los formatos HTML o XHTML, también incluye otros recursos llamados hojas de estilo en cascada (CSS) y guiones (scripts)

Una página web puede estar almacenadas en un equipo local o en un servidor web remoto

Un servidor web puede restringir el acceso únicamente a redes privadas, por ejemplo, una intranet corporativa, o puede publicar las páginas en la World Wide Web (WWW)

El acceso a las páginas web es realizado mediante una transferencia desde servidores, utilizando el protocolo de transferencia de hipertexto (HTTP) o el protocolo de transferencia de hipertexto seguro (HTTPS), siendo accesible desde un navegador

Html

Html

El lenguaje HTML (hypertext markup language) describe el contenido de una página web, incluyendo el texto, las imágenes, los vídeos, etc

Las especificaciones sobre el funcionamiento de la web las hace el W3C (World Wide Web Consortium). En su página web podemos encontrar toda la documentación sobre HTML y otros estándares de la red

Para la edición de páginas web podemos usar cualquier editor de texto

En windows el Bloc de notas o el Wordpad, en linux vi, joe, mcedit, etc

En ellos aprovecharemos las capacidades de cada uno de copiar y pegar. Existen multitud de editores web que nos facilitan la inserción de código HTML

Unos freeware, otros shareware y otros comerciales como Adobe Dreamweaver con el que se obtienen unas páginas más profesionales ya que cuentan con plantillas predefinidas que agilizan nuestra labor

Para desarrolladores avanzados tenemos Sublime Text, aunque puede ser poco amigable para el resto de desarrolladores

Entre los más amigables tenemos Brackets, que permite visualizar el código HTML automáticamente

Y Atom, como otra alternativa más, que ahora se está poniendo de moda

Hay que tener muy en cuenta el tipo de codificación que usemos con este lenguaje, ya que si al escribir nuestra página web usamos una codificación distinta a la del navegador web, podemos obtener una página con caracteres extraños o ilegibles

La opción más usada es la codificación UTF-8, que es el estándar para Internet y para sistemas Linux

Los sistemas Windows y MacOS utilizan otros tipos de codificación por lo que deberemos hacer coincidir la codificación en la cabecera del documento, con la que será mostrada en el navegador web

Estándares

HTML 1.0

Tim Berners-Lee en 1991 describe 18 elementos que incluyen el diseño inicial y relativamente simple de HTML. Trece de estos elementos todavía existen en HTML 4.4

Berners-Lee consideraba el HTML una ampliación de SGML, pero no fue formalmente reconocida como tal hasta la publicación a mediados de 1993, por el IETF (Internet Engineering Task Force), de una primera proposición para una especificación del HTML: el borrador del Hypertext Markup Language de Berners-Lee y Dan Connolly, que incluía una Definición de Tipo de Documento SGML para definir la gramática

El borrador expiró a los seis meses, pero fue notable por su reconocimiento de la etiqueta propia del navegador Mosaic usada para insertar imágenes sin cambio de línea, que reflejaba la filosofía del IETF de basar estándares en prototipos con éxito. De la misma manera, el borrador competidor de Dave Raggett HTML+ (Hypertext Markup Format), de finales de 1993, sugería estandarizar características ya implementadas, como las tablas

HTML 2.0

La versión oficial para HTML fue hasta hace pocos años la HTML 2.0, denominado HTML+, comenzó a desarrollarse a finales de 1993. Se diseñó originalmente para ser un superconjunto del HTML que permitiera evolucionar gradualmente desde el formato HTML anterior

A la primera especificación formal de HTML+ se le dio, por lo tanto, el número de versión 2.0 para distinguirla de las propuestas no oficiales previas. Los trabajos sobre HTML+ continuaron, pero nunca se convirtió en un estándar, a pesar de ser la base formalmente más parecida al aspecto compositivo de las especificaciones actuales

Cumplía su función perfectamente, pero muchos usuarios del HTML querían tener un control mayor sobre sus documentos, tanto en el formateo del texto como en la apariencia de la página

HTML 3.0

Mientras tanto, Netscape, que era en esa época el líder indiscutible de los navegadores, introducía con cada nueva versión etiquetas y atributos no contemplados en el estándar oficial, creando descontento entre algunos desarrolladores

Debido a su amplia difusión y aceptación, otros navegadores intentaban copiar esas innovaciones, pero debido a que Netscape no especificaba completamente sus nuevas etiquetas, los resultados no eran distintos de los deseados. Lo que provocaba una gran confusión y numerosos problemas, cuando los desarrolladores utilizaban estos elementos y comprobaban que no funcionaba como querían en otros navegadores

El borrador del estándar HTML 3.0 fue propuesto por el recién formado W3C en marzo de 1995. Con él se introdujeron muchas nuevas capacidades; por ejemplo, facilidades para crear tablas, hacer que el texto fluyese alrededor de las figuras y mostrar elementos matemáticos complejos. Aunque se diseñó para ser compatible con HTML 2.0, era demasiado complejo para ser implementado con la tecnología de la época, y cuando el borrador del estándar expiró en septiembre de 1995, se abandonó debido a la carencia de apoyos de los fabricantes de navegadores web

HTML 3.2

El HTML 3.1 nunca llegó a ser propuesto oficialmente, y el estándar siguiente fue el HTML 3.2, que abandonaba la mayoría de las nuevas características del HTML 3.0 y, a cambio, adoptaba muchos elementos desarrollados inicialmente por los navegadores web Netscape y Mosaic. La posibilidad de trabajar con fórmulas matemáticas que se había propuesto en el HTML 3.0 pasó a quedar integrada en un estándar distinto llamado MathML

Cada vez era más evidente la necesidad de un nuevo estándar que fuera aceptado por todos. Se formó otro comité, el W3C, apoyado por los principales vendedores de software (entre ellos, IBM, Microsoft, Novell, Netscape, Sun, etc). El nuevo estándar fue desarrollado durante todo el año 1996 por el W3C con el sobrenombre de Wilbur, y finalmente, en Enero de 1997 fue aprobado como el HTML 3.2

El HTML 3.2 era totalmente compatible con el estándar anterior, pero incorpora muchas de las innovaciones de los navegadores comerciales (Netscape e Internet Explorer principalmente), tales como tablas, applets, texto que bordea las imágenes, entre otras, aunque no todas, como por ejemplo los frames

HTML 4.0

En Julio de 1997 se presentó el primer borrador público del estándar oficial HTML 4.0 (que tiene el nombre clave de Cougar). En él se incorporan las especificaciones sobre tablas, frames, scripts, hojas de estilo, accesibilidad por distintos medios, e internacionalización (incluyendo el uso de Unicode, en lugar del Latin-1)

En 1997, HTML 4.0 (que tiene el nombre clave de Cougar) se publicó como una recomendación del W3C. HTML 4.0 adoptó muchos elementos específicos desarrollados inicialmente para un navegador web concreto, pero al mismo tiempo comenzó a limpiar el HTML señalando algunos de ellos como deprecated (desaprobados)

HTML 4.0 implementa características como XForms 1.0 que no necesitan implementar motores de navegación que eran incompatibles con algunas páginas web HTML. En él se incorporan las especificaciones sobre tablas, frames, scripts, hojas de estilo, accesibilidad por distintos medios, e internacionalización (incluyendo el uso de Unicode, en lugar del Latin-1)

HTML 5.0

HTML5 especifica dos variantes de sintaxis para HTML: una «clásica», HTML (text/html), conocida como HTML5, y una variante XHTML conocida como sintaxis XHTML5 que deberá servirse con sintaxis XML (application/xhtml+xml). Esta es la primera vez que HTML y XHTML se han desarrollado en paralelo

En 2004 la W3C reabrió el debate de la evolución del HTML, y se dieron a conocer las bases para la versión HTML5. No obstante, este trabajo fue rechazado por los miembros del W3C y se daría preferencia al desarrollo del XML

Apple, Mozilla y Opera anunciaron su interés en seguir trabajando en el proyecto bajo el nombre de WHATWG, que se basa en la compatibilidad con tecnologías anteriores

En 2006, el W3C se interesó en el desarrollo de HTML5, y en 2007 se unió al grupo de trabajo del WHATWG para unificar el proyecto

La versión definitiva de la quinta revisión del estándar se publicó en octubre de 2014

Al no ser reconocido en viejas versiones de navegadores por sus nuevas etiquetas, se recomienda al usuario común actualizar su navegador a la versión más nueva, para poder disfrutar de todo el potencial que provee HTML5

Formato de una página Html

Formato de una página HTML

Su principio esencial es el uso de etiquetas (tags). Las etiquetas son palabras reservadas del lenguaje encerradas entre < >

Tipos de etiquetas

Hay tres tipos de etiquetas:

  • Pareadas
    cuando aparece una etiqueta de inicio y otra de final, los bloques contenidos entre el inicio y el cierre son elementos, que su vez pueden contener otros elementos

  • Sin parear
    cuando la etiqueta representa la inserción de un elemento, estas etiquetas terminan con una barra inclinada

  • Con final opcional
    son etiquetas pareadas en la cuales no es obligatorio emplear la etiqueta final

Las etiquetas pueden incluir atributos que modifican su comportamiento, especificando alguna característica singular del elemento o incluyendo información adicional

Los atributos se especifican como pares atributo=’valor’, separados por espacios dentro de la etiqueta de inicio

No es obligatorio que los valores estén encerrados entre comillas, pero sí es recomendable

Pueden utilizarse comillas simples o dobles indistintamente, siempre que coincidan su apertura y cierre

En el ejemplo se ha utilizado el atributo id, el cuál es genérico para cualquier etiqueta y que nos será de utilidad cuando usemos CSS y Javascript, ya que nos permite distinguir de forma única el elemento al que pertenece esa etiqueta concreta

Existen más atributos genéricos, como por ejemplo class, title o style, todos ellos muy útiles cuando queramos dar formato o mejorar la accesibilidad a nuestros elementos

Cuando introducimos una etiqueta que no existe, esta será ignorada, debemos prestar atención a este asunto porque dificulta la detección de errores

Las etiquetas pueden escribirse en mayúsculas o en minúsculas

No se consideran los saltos de línea ni los espacios en blanco extras. Esto último permite indentar el código para hacerlo más legible

Comentarios dentro del HTML

A veces es muy útil escribir comentarios en el documento HTML sobre el código que escribimos, nos pueden servir para recordar posteriormente lo que fue hecho, y que no queremos que se vea en pantalla

Esto se consigue encerrando dichos comentarios entre estos dos símbolos:

Los comentarios se pueden utilizar en cualquier parte del documento HTML, pero no se verá en pantalla

Caracteres especiales

Hay ciertos caracteres que un navegador no es capaz de reconocer a pesar de utilizar la codificación correcta

Imaginemos que queremos escribir el texto x > y dentro de nuestro HTML, sin embargo, el carácter > no será reconocido por el navegador o nos mostrará uno erróneo

Esto ocurre con un conjunto de caracteres que son especiales y que el navegador reconocerá utilizando la etiqueta específica de ese carácter con el siguiente formato &etiqueta;

En el ejemplo anterior, la etiqueta para el carácter > es gt, empezando por & y terminando por ;

En la siguiente web podremos consultar la lista completa de los 256 caracteres universales HTML

Cabecera de una página Html

Cabecera de una página Html

La cabecera está delimitada por el elemento head (que a su vez está contenido dentro del elemento html), en ella se describe información del documento (titulo, configuración, scripts y estilos)

Se coloca información del documento, que no se verá en la pantalla principal y puede ser:

  • Título del documento
  • Metadatos
  • Enlaces a otros archivos
  • Scripts
  • Estilos

Título del documento

El título debe ser breve y descriptivo de su contenido, pues será lo que vean los demás cuando añadan nuestra página a su agenda de direcciones (bookmark)

Esta etiqueta es obligatoria y que debe aparecer sólo una vez en nuestro documento

El navegador la visualizará en la barra de título de su ventana

En el ejemplo se ha introducido la palabra página acentuada y como todavía no se ha introducido el código de caracteres podría mostrar caracteres extraños, asegúrese introducir la etiqueta de caracteres especiales para evitarlo

Metadatos

Los metadatos son elementos introducidos con la etiqueta meta, el tipo de metadato se define mediante sus atributos, algunos de los más habituales son:

  • charset

    indica la codificación en la cual está escrito el documento

    Es importante que introduzcamos la codificación correcta para que el navegador visualice el documento correctamente

    En este ejemplo se ha usado la codificación UTF-8 que es la estándar para internet

  • author

    indica quien es el autor de la página, se especifica con los atributos name y content

  • keywords y description

    Ambas hacen referencia al contenido de la página y suelen ser usadas por los motores de búsqueda para indexar las páginas web

    Gracias a estos campos, que se especifican con los atributos name y content, los buscadores saben que términos de búsqueda describen mejor nuestra página web para mostrarsela al resto de usuarios

Enlaces a otros archivos

En la cabecera podemos indicar enlaces a otros archivos que queremos cargar junto con nuestra página web, para ello utilizamos la etiqueta link

Generalmente serán hojas de estilo CSS, archivos JavaScript, librerias adicionales en otros lenguajes o nuestros propios archivos

En el ejemplo se ha incluido la hoja de estilo CSS del tema twentyfourteen de wordpress, para ello se han usado los atributos:

  • rel

    para indicar que tipo de documento es, en este caso una hoja de estilo

  • id

    para asignarle un identificador único

  • type

    para indicar el tipo de texto que el navegador recibirá, en este caso una hoja de estilo CSS

  • href

    es la ruta relativa del documento o su ruta absoluta

En el ejemplo también se ha incluido una especificación para definir varios idiomas, los cuales utilizará el buscador para indexar usando correctamente el idioma en el que está escrita la página, para ello se han usado los atributos:

  • rel

    para indicar que tipo de documento es, en este caso una referencia para multisitio en varios idiomas

  • hreflang

    para asignarle un idioma, en este caso es para español en para ingles y x-default para el idioma por defecto para la página de inicio

  • href

    es la ruta relativa del documento o su ruta absoluta, en este caso se le añade el parámetro lang, empezando por ? para indicar las siglas del idioma

Scripts

El elemento script permite incluir código ejecutable en nuestra página web

Por defecto, el navegador tomará JavaScript como el lenguaje por defecto a ejecutar, si no especificamos otro

En el ejemplo se ha tenido en cuenta el caso de que el navegador no pueda usar scripts, ya sea por ser antiguo o que el usuario lo haya bloqueado en su configuración

Para ello hemos usado el elemento noscript, que en este caso mostrará el texto en el navegador en vez de ejecutar el script

En el ejemplo se ha utilizado un fichero externo para incluir el código ejecutable, utilizando la ruta absoluta o relativa en el atributo src

En muchas páginas web no se realiza la inclusión de los scripts en el head, sino en el body

La razón para acelerar la carga del HTML, ya que al encontrar un fichero externo tiene que leerlo y ejecutarlo, deteniendo el proceso de carga del resto del HTML

Imaginemos que tenemos el servidor saturado por la carga de los scripts, el usuario no recibiría nada del HTML y por tanto no vería la página, sólo una página en blanco

Por esta razón, algunos desarrolladores incluyen los scripts al final del documento, al final del elemento body

Como normalmente los scripts se encargan de la interacción con el usario, no es demasiado grave que haya una pequeña demora para empezar a ver las animaciones, enviar formularios, etc

Es más fácil para los usuarios si pueden ver el contenido y luego pueden interactuar con él

Estilos

El elemento style permite definir propiedades de estilos que se aplicarán a lo largo del documento

Como se puede ver en el ejemplo, con este elemento generalmente se indica lo que se espera aplicar, aunque también podremos incrustarlos dentro del propio HTML

También es posible utilizar una hoja de estilo externa, en este caso hemos utilizado la CSS del tema twentyfourteen de wordpress, especificando la ruta relativa o absoluta del archivo, en el atributo href

Cuerpo de una página Html

Cuerpo de una página Html

El cuerpo de una página HTML incluye los contenidos de la propia página web y se define con el elemento body

Existen gran cantidad de etiquetas que podemos usar en el body, a modo de consulta podemos usar este listado completo

Vamos a agrupar algunas de su etiquetas por:

  • Estructura del documento

    cabecera, sección, navegación

  • Estructura del texto

    títulos, parrafos, …

  • Caracterización del texto

    texto enfatizado, fragmentos de código, …

Estructura del documento

Normalmente toda página web tiene una cabecera de título, algún tipo de barra lateral de navegación, un contenido principal y quizás un pie de página

Para conseguir esta estructuración se puede utilizar el elemento div mediante divisiones

Una división no puede insertarse dentro de una etiqueta de nivel inferior, como las de estructuración y caracterización de texto, pero sí que puede insertarse dentro de otro elemento div

Gracias a las hojas de estilo y a los atributos genéricos id y class daremos formato a esas agrupaciones

La estructura de la web de ejemplo es bastante estándar y las divisiones que acabamos de ver se repiten constantemente

Por eso a partir de HTML5 se añadieron una serie de divisiones con significado para poder indicar más fácilmente como estructuramos la web

Elementos de estructura semántica

Estos elementos son análogos a las divisiones, pero además llevan asociado un significado relacionado con la estructura

En el ejemplo podemos ver que hemos podido sustituir algunas divisiones por una etiqueta equivalente

Algunas de las etiquetas de estructuración semántica más importantes son:

  • header

    representa la cabecera de un documento o sección

    Debe usarse para contener información introductoria

    Puede haber más de uno en el documento

  • footer

    representa el cierre de un documento o sección

    Suele contener información sobre el autor, copyright, términos de uso, información de contacto, etc

  • nav

    representa la sección que contiene los enlaces de navegación por el sitio web

  • section

    define una sección del documento

  • article

    representa un contenido independiente y autocontenido

    Por ejemplo los post de un blog, noticias, comentarios, etc

  • aside

    define contenido que se encuentra fuera de lugar en el que está contenido

    Como por ejemplo una barra lateral

    Suele estar relacionado con el elemento que contiene

  • figure

    define un elemento independiente como una imagen, un fragmento de código, un diagrama, etc

    Suele estar relacionado con el elemento que contiene, pero su posición es independiente del mismo

  • figcaption

    es el título o leyendo de un elemento figure

    Se suele poner como primer o último elemento del mismo

  • details

    representa una serie de detalles adicionales que el usuario puede ocultar

Elementos de estructuración del texto

Las etiquetas de estructuración del texto sirven para definir los encabezados de las secciones y los parrafos

Entre las etiquetas de bloque destacamos las siguientes:

  • p

    contiene el texto de un párrafo

    El navegador no muestra los espacios en blanco ni los saltos de línea adicionales que escribamos dentro del párrafo

  • hN

    define los encabezados de las secciones (hay 6 niveles, dónde N es de 1 a 6)

    Pueden configurarse cómo se visualizan los encabezados a través de CSS

    Normalmente se utiliza una fuente mayor cuanto más alto sea el nivel, siendo h1 el de mayor nivel

    Cambiando el número se pueden conseguir distintos efectos visuales al cambiar el tamaño de la letra

    Estos elementos se usan para estructurar el documento en secciones, subsecciones, etc

  • pre

    contiene un párrafo con texto preformateado, es decir, que aparecerá como si hubiera sido escrito con una máquina de escribir, con una fuente de espaciado fijo (Courier)

    Tiene en cuenta los espacios en blanco y los saltos de línea adicionales

    Puede ser útil para escribir párrafos con ejemplos de código fuente

    En el ejemplo hemos simulado una tabla, aunque para esa tarea es aconsejable usar mejor la etiqueta para tablas

    Se pueden simular otros tipos de elementos, ya que el texto se tomará de forma literal, pero es recomendable usar sus etiquetas específicas, siempre que estas existan

    Con lo que obtendremos:

    Texto
         Texto con tabulación
    
    Simulación de tabla
    
    columna1    columna2    columna3   columna4
    fila11       fila12     fila13     fila14
    fila21       fila22     fila23     fila24
    

  • blockquote

    se usa para incluir citas, que pueden contener varios párrafos u otros elementos

    Genera márgenes a izquierda y derecha, aunque se recomienda definir el formato deseado mediante una hoja de estilo

    En el ejemplo se ha utilizado el atributo cite para indicar el origen de la cita, en este caso la novela de Don Quijote de la Mancha, ya que hemos citado un párrafo del principio de la novela

    Con lo que obtendremos:

    En un lugar de la mancha de cuyo nombre no quiero acordarme…

  • tt

    conseguimos que el texto tenga un tamaño menor y la apariencia de los caracteres de una máquina de escribir (typewriter)

    No preformatea el texto, sino que únicamente cambia su apariencia

    En el ejemplo se ha escrito un párrafo y le hemos dado el aspecto de los caracteres de una máquina de escribir

    Con lo que obtendremos:
    A veces... veo muertos

Elementos de caracterización del texto

Se utilizan generalmente dentro de los párrafos

Sirven para definir el formato del texto, aunque gracias a las hojas de estilo, cada vez se utilizan menos

Se mantienen por compatibilidad con versiones antiguas de HTML, entre las más importantes destacamos:

  • br

    añade un salto de línea sin cambiar de párrafo

    No tiene etiqueta de cierre

    En el ejemplo se ha escrito un párrafo y dentro del mismo hemos usado el salto de línea

    Con lo que obtendremos:

    A veces…
    veo muertos

  • nbsp

    no es una etiqueta, sino más bien una forma de añadir espacios en blanco adicionales para que el navegador los reconozca

    Si queremos forzarle a que lo haga, debemos poner el código nbsp (non-breaking space)

    En el ejemplo se ha escrito un párrafo y dentro del mismo hemos añadido un espacio en blanco, pero hemos forzado la aparición de otro adicional

    Con lo que obtendremos:

    A veces…  veo muertos

  • center

    permite centrar un elemento, ya sea un párrafo, un texto, una imagen, etc

    Algunos navegadores más antiguos no lo soportaban, aunque actualmente se usa poco ya que muchos elementos incluyen un atributo similar que lo sustituye

    Otra causa de su desuso es porque es posible simularlo mediante hojas de estilo

    En el ejemplo se ha escrito un párrafo y hemos forzado su centrado

    Con lo que obtendremos:

    A veces… veo muertos

  • hr

    se obtiene una raya horizontal tan ancha como la pantalla, y con la apariencia de estar embutida sobre el fondo

    No tiene etiqueta de cierre

    En el ejemplo se ha escrito un párrafo y hemos añadido una raya horizontal para separarlo para simular que hay dos párrafos

    Con lo que obtendremos:

    A veces… veo muertos


    En un lugar de la mancha de cuyo nombre no quiero acordarme…

  • sup

    sirve para obtener una fórmula matemática que incluya un índice

    En el ejemplo se ha escrito un texto con una fórmula matemática en la cual le hemos asignado el índice 2

    Con lo que obtendremos:
    m2

  • sub

    sirve para obtener una fórmula matemática que incluya un subíndice

    En el ejemplo se ha escrito un texto con una fórmula matemática en la cual le hemos asignado el subíndice 2

    Con lo que obtendremos:
    m2

  • italic

    pone el texto en cursiva

    Se puede usar su forma corta i, ya que es equivalente

    En el ejemplo se ha escrito un texto en cursiva

    Con lo que obtendremos:
    A veces… veo muertos

  • em

    indica que se va a enfacitar el texto, normalmente se pone el texto en cursiva, aunque si usamos una hoja de estilo podemos elegir de qué forma será enfacitado

    En el ejemplo se ha escrito un texto enfacitado

    Con lo que obtendremos:
    A veces… veo muertos

  • bold

    pone el texto en negrita

    Se puede usar su forma corta b, ya que es equivalente

    En el ejemplo se ha escrito un texto en negrita

    Con lo que obtendremos:
    A veces… veo muertos

  • strong

    indica que se va a enfacitar más el texto, normalmente se pone el texto en negrita, aunque si usamos una hoja de estilo podemos elegir de qué forma será enfacitado

    En el ejemplo se ha escrito un texto con mayor énfasis

    Con lo que obtendremos:
    A veces… veo muertos

  • code

    incrusta código en medio de un párrafo de manera similar a pre, pero sin crear margenes a izquierda y derecha

    En el ejemplo se ha escrito un párrafo con el carácter especial de espacio en blanco, pero al incrustarlo como código, en la página se visualizará de forma literal

    Con lo que obtendremos:

    A veces…&nbsp;veo muertos

Listas en Html

Listas en Html

A menudo nos interesará presentar las cosas en forma de listas, ya que permiten hacer enumeraciones de elementos, usando una numeración o no, también crear definiciones de términos

Podemos escoger entre tres tipos distintos:

  • Listas numeradas

    sirven para crear una lista con números

  • Listas con viñetas

    sirven para crear una lista con símbolos o viñetas, no están numeradas

  • Listas de definiciones

    sirven para crear definiciones de términos, no están numeradas y pueden usarse para simular diccionarios

Listas numeradas

Las listas numeradas (ordered lists) sirven para presentar cosas en un orden determinado

En la lista resultante aparecerá automáticamente un número correlativo para cada elemento:

En el ejemplo se puede ver que la lista ordenada empieza con el elemento ol incluidos en su interior la lista de elementos li

Se ha usado el atributo type para especificar qué tipo de numeración queremos usar:

  • 1

    utiliza valores numéricos

  • a

    utiliza letras en minúscula

  • A

    utiliza letras en mayúscula

  • i

    utiliza números romanos en minúscula

  • I

    utiliza números romanos en mayúscula

Si no se especifica, el valor por defecto es 1

Se ha usado el atributo start para especificar a partir de qué número empieza la numeración, en este caso empieza a partir del número 3

Se ha usado el atributo value para especificar un valor concreto para ese elemento, en este caso el número 8

En el ejemplo también podemos observar que listas con numeradas pueden anidarse

Quedando como resultado:

  1. Mamíferos
  2. Peces
    1. Sardina
    2. Bacalao
  3. Aves

Listas con viñetas

Las listas con viñetas (unordered lists) sirven para presentar cosas que, por no tener un orden determinado, no necesitan ir precedidas por un número

En la lista resultante aparecerá automáticamente el símbolo o viñeta elegidos con el atributo:

En el ejemplo se puede ver que la lista ordenada empieza con el elemento ul incluidos en su interior la lista de elementos li

Se ha usado el atributo type para especificar qué tipo de viñeta queremos usar:

  • circle

    utiliza un círculo

  • disc

    utiliza un círculo con el interior hueco

  • square

    utiliza un cuadrado

Si no se especifica, el valor por defecto es circle

En el ejemplo también podemos observar que listas con viñetas pueden anidarse y además se han usado distintos tipos de viñetas para distinguir entre ellas

Quedando como resultado:

  • Mamíferos
  • Peces
    • Sardina
    • Bacalao
  • Aves

Listas de definiciones

Las listas de definición son apropiadas para glosarios (o definiciones de términos)

Gracias a este tipo de lista, pueden construirse sencillos diccionarios

En el ejemplo se puede ver que la lista de definiciones que empieza con el elemento dl incluidos en su interior la lista de elementos dt que representan la cosa a definir y los elementos dd que representan la definición de la cosa a definir

En el ejemplo no se ha incluido, pero también podemos anidar listas de definiciones

Quedando como resultado:

Sardina

Pez osteíctio del orden clupeiformes (Sardina pilchardus) del Mediterráneo y del océano Atlántico

De unos 25 cm. de longitud, verde azulado en el dorso, plateado en los flancos y en el vientre

Se consume fresco o en conserva

Bacalao

Pez marino osteíctio del orden gadiformes (Gadius callarias) que alcanza más de un metro de longitud

Enlaces

Enlaces

Los enlaces, hipervínculos o hiperenlaces permiten al usuario explorar de manera no secuencial, otras páginas web externas repartidas por todo el mundo por medio de enlaces hipertexto o partes de la misma web

Para ello utilizamos el elemento a que es un ancla (anchor)

En ejemplo se ha enlazado con la página inicial de esta web dónde el atributo href es el destino del enlace (es aconsejable usar las comillas (simples o dobles) para que el navegador entienda que es de tipo texto) y el texto dentro del elemento es el texto indicativo que aparecerá en la pantalla del enlace (con un color especial y generalmente subrayado)

Quedando como resultado:

Página de inicio

Se pueden distinguir tres tipos de enlaces:

  • Con dirección absoluta
  • Con dirección relativa
    • Dentro de la misma página
    • Dentro de nuestra web
    • Fuera de nuestra web
  • Correo electrónico

Con dirección absoluta

Si queremos enlazar con nuestra página u una página que esté fuera de la nuestra (es decir, que esté en un servidor distinto del que la tenemos alojada)

Es necesario conocer su dirección completa, o URL (Uniform Resource Locator)

El URL podría ser, además de la dirección de una página de Internet, una dirección de ftp, gopher u otro servicio de internet

El destino del enlace será en estos casos la página inicial o por defecto de esa página web, que normalmente será por defecto index.html, index.htm, index.php o index.asp, dependerá del lenguaje utilizado al escribir la página web

Por esa razón podremos omitir esa página de inicio y depende cómo esté configurado el servidor obtendremos la respuesta deseada o un error de tipo 404 de dirección incorrecta

En el ejemplo se ha enlazado con la página inicial de Microsoft mediante el URL de web segura HTTPS y se ha usado el atributo target con el valor _blank para indicarle al navegador que nos abra una nueva ventana con la página enlazada, así podremos ver ambas páginas sin perder el contenido que estábamos visualizando previamente

Es muy importante copiar estas direcciones correctamente (respetando las mayúsculas y minúsculas, pues los servidores son capaces de distinguirlas y pueden no reconocer la dirección que hemos escrito, devolviendonos el ya citado error 404 de dirección incorrecta)

También se ha utilizado el atributo rel con los valores noopener y noreferrer para que no sea guardada en la caché del navegador

Quedando como resultado:

Página inicial de Microsoft

Con dirección relativa

Puede ser que tengamos una sola página. Pero lo más frecuente es que tengamos varias páginas, una inicial (o principal) y otras conectadas a ella, entre ellas mismas o con otras externas que a su vez están conectadas consigo mismas y con otras externas

Dentro de la misma página

A veces, en el caso de páginas muy extensas, nos puede interesar dar un salto desde una posición a otra determinada

El destino del enlace, en este caso el sitio dentro de la página a donde queremos saltar, se sustituye por una marca (la palabra marca puede ser cualquier palabra que queramos, pero precedida del símbolo #)

Esta palabra (o palabras, ya que podemos utilizar más de una separadas con _) aparecerán en pantalla coloreada (en forma de hipertexto y si usamos una hoja de estilo CSS puede ser modificada según nuestras necesidades)

En el ejemplo se ha creado un enlace al final de esta misma página, al cuál podremos saltar hasta la etiqueta que hemos llamado final si pulsamos en el enlace

Para que funcione correctamente, también debe existir el enlace final, sino el navegador ignorará el enlace porque no sabrá a donde saltar

En el ejemplo tenemos el enlace que deberemos incluir, en la posición que queremos que se salte, para ello se ha utilizado el atributo name, con el valor elegido pero sin usar el símbolo #

Quedando como resultado:

Pulsa para ir al final

Dentro de nuestra web

También podemos ir a otra página de nuestra web alojada a nuestro servidor

En el ejemplo se ha enlazado con la página dentro de esta web que habla de la listas, hemos incluido en el atributo href la dirección relativa y unos parámetros, que van precedidos del símbolo ? y tienen el formato de variable=’valor’ y si tenemos más de uno, se separan con el símbolo &

Quedando como resultado:

Listas

En el ejemplo se ha enlazado con un lugar concreto de la página de listas, en concreto la que habla del listado con viñetas

Para ello, se ha utilizado el sistema de marcas explicado anteriormente

Quedando como resultado:

Listas con viñetas

En los ejemplos anteriores estábamos suponiendo que la página en la que escribimos la etiqueta y la página a la que queremos saltar estaban en el mismo directorio

Ya que pudiera ocurrir que hemos organizado el sitio Web con un directorio principal y subdirectorios auxiliares que cuelgan del mismo

Si la página a la que quiero saltar está en el subdirectorio subdir, entonces en el atributo href deberíamos haber escrito /subdir/pagina.html, indicando la ruta completa desde el directorio raíz hasta la página pagina.html

Y a la inversa, si queremos saltar desde una página a otra que está en un directorio anterior, en el atributo href deberíamos haber escrito ../pagina.html

En este caso, los dos puntos indican al navegador que se dirija al directorio anterior

Se debe utilizar el símbolo / para indicar los subdirectorios si se está trabajando con un servidor Unix, y el símbolo \, si se está trabajando con un servidor Windows, ya que el sistema de directorios se trata de distinta forma

Si queremos evitarnos las complicaciones derivadas de tener tanto subdirectorio, podemos guardarlo todo en el directorio raíz o en un único directorio

Sin embargo, esta práctica tiene el inconveniente de que todo esté más desordenado y si en un futuro queremos realizar modificaciones sea más complicado de encontrar los contenidos, que si lo hubiéramos ordenado por subdirectorios específicos con un nombre que sea descriptivo sobre su contenido

Fuera de nuestra web

Se aplica lo explicado anteriormente para las direcciones absolutas y dentro de nuestra web, pero esta vez los enlaces no estarán alojados en nuestro servidor, sino en uno externo

Correo electrónico

Si queremos que nuestros usuarios se pongan en contacto con nosotros podemos incluir nuestra dirección de correo electrónico en un enlace

En el ejemplo se ha incluido dentro del atributo href la palabra reservada mailto seguida de dos punto junto con la dirección de correo electrónico del administrador de esta web

También se ha repetido la misma dentro de la etiqueta para que el usuario sepa que el enlace pertenece a un correo electrónico, de este modo reconocerlo fácilmente, aunque podría haberse usado un mensaje descriptivo o la imagen de un buzón (una metáfora que el usuario podría relacionar con el correo), por ejemplo

Quedando como resultado:

edrunner1@hotmail.com

Al pinchar el enlace veremos que el navegador intentará abrir el programa que tenga asociado para la gestión del correo, con la dirección del destinatario ya rellenada, que es la que aparecía en el enlace

También podemos añadir otros valores que serán usados por el gestor de correo utilizando palabras reservadas que van precedidas del símbolo ? y tienen el formato de variable=’valor’ y si tenemos más de uno, se separan con el símbolo &

Entre las más destacadas tenemos:

  • subject

    es el usuario destinatario del correo, por defecto será Feedback

  • cc

    simula una copia en carboncillo (Carbon Copy) se utiliza en caso de haber más de un destinatario, deberíamos indicarlos aquí separándolos con el símbolo ;

    Los destinatarios serán capaces de ver quienes son el resto de destinatarios

  • bcc es similar a la copia en carboncillo (Carbon Copy)

    En este caso la copia está oculta y los destinatarios no serán capaces de ver quienes son el resto de destinatarios

  • body

    es el texto del correo en sí, el gestor de correo podría ignorarlo o añadirle algo, como un mensaje de despedida o una firma, así que no siempre será igual al que nosotros hayamos escrito en el enlace

Final

Esta es la marca de final (no contiene un enlace real ya que es una referencia de enlace, pero como tiene texto, aparecerá subrayado como si lo fuera) para el ejemplo anterior del sistema de marcas explicado anteriormente

Imágenes en Html

Imágenes en Html

Las imágenes de una página web son conocidas como mapas de bits y pueden representar iconos, botones, imágenes con zonas transparentes o fotografías

Dependiendo del nivel de compresión utilizado perderemos calidad, por eso debemos saber elegir el formato más adecuado a nuestras necesidades:

  • png

    es un formato de compresión sin pérdida que además soporta transparencias

    Podemos representar iconos o imágenes con zonas transparentes por lo que es una buena alternativa para cualquier tipo de imagen que no sea una fotografía

  • jpg o jpeg

    es un formato de compresión con pérdida que no soporta transparencias

    Se usa normalmente para fotografías

  • gif

    es un formato de compresión sin pérdida, pero está limitado a 256 colores

    Ocupa muy poco espacio y es idóneo para imágenes con poca calidad, como por ejemplo los iconos o botones

    Soporta transparencias y animaciones

Al igual que ocurre con la edición del HTML, necesitamos de un editor de imágenes para su manipulación

Existen editores comerciales y muy potentes como Photoshop, pero tambien podemos utilizar editores con una calidad similiar y de código libre como GIMP

Tambien tenemos la posibilidad de usar alguna herramienta que permita convertir entre los distintos formatos, como ImageMagick

El elemento para incluir imágenes en nuestra página web es img al cuál deberemos incluirle al menos el atributo src al que le indicaremos al navegador, mediante la ruta relativa o absoluta, el nombre de la imagen y mediante su extensión, el formato de la misma

En el ejemplo podemos ver que además del atributo src hemos utilizado width que nos permite especificar el ancho de la imagen

El atributo height que permite especificar la altura de la imagen

Y el atributo alt que introduce una descripción (una palabra o una frase breve) sobre la imagen

En principio se puede omitir, pero es beneficioso para aquellos que accedan a la página con un navegador en forma de sólo texto, ya que no serán capaces de ver la imagen, pero al menos podrán hacerse una idea sobre ella gracias a esa descripción

Quedando como resultado:

Web sobre Informática de Secarcam

Se pueden capturar las imágenes que nos muestra el navegador, con objeto de guardarlas permanentemente en nuestro disco duro

Desde el navegador, pulsamos sobre la imagen con la tecla derecha del ratón, nos aparecerá un menú en el que está la posibilidad de guardar la imagen en el directorio del disco duro que le indiquemos

En caso de que no nos interese que los usuarios puedan guardar las imágenes de nuestra web deberemos utilizar alguna técnica para evitar la pulsación de la tecla derecha del ratón mediante Javascript

Imagen usada como enlace

En algunos casos, también se utiliza una imagen como enlace a otra página

Con respecto a la localización del fichero de la imagen, se usa igual que como un enlace. Si no se indica nada especial, quiere decir que el fichero está en el mismo directorio que el documento HTML que estamos escribiendo

Se puede cargar una imagen que no esté en nuestro sistema siguiendo el mismo método que con los enlaces, se indica en la etiqueta el URL completo de la imagen. Aunque esto no es muy aconsejable, pues alargaría innecesariamente el tiempo de carga de nuestra página

Un aspecto muy importante a tener en cuenta es el tamaño de las imágenes, pues una imagen grande supone un fichero grande, y esto puede ocasionar un tiempo excesivo de carga, con el consiguiente riesgo de que quien esté intentando cargar nuestra página se canse de esperar, y desista de ello

En el ejemplo se ha usado un thumbnail (reproducción en miniatura de la imagen), que hace de enlace a la imagen en su verdadero tamaño

De esta manera no recargamos demasiado una página, y el usuario será quien decida qué imágenes desea cargar

Otra manera de conseguirlo es reducirla con un editor de imágenes a 150×75, guardarla con otro nombre, y luego hacer que la pequeña sea el enlace de la grande

Esta sería una solución si utilizamos una versión muy antigua de Netscape, ya que no reconocía los atributos width y height

Quedando como resultado:

En el ejemplo se ha usado la imagen para redirigirnos a la página de inicio, así podemos enlazar la imagen con la página deseada

También podemos usar iconos, botones o animaciones para realizar esta tarea

En el ejemplo también hemos usado el atributo border con el valor 0 porque sinó la imagen estará rodeada de un rectángulo del color normal de los enlaces, de esta manera, evitamos que aparezca ese rectángulo

Quedando como resultado:

Posicionando el cursor sobre esta imagen, comprobamos que actúa también como enlace aunque carezca del rectángulo de color. Esto puede resultar más estético, aunque se corre el riesgo de que el usuario no se dé cuenta de que la imagen sirve de enlace

Posición del texto con respecto a la imagen

Para elegir la posición de la imagen con respecto al texto hay distintas posibilidades

La más sencilla es colocarla entre dos párrafos, con el texto a un lado

Utilizando hojas de estilo CSS se pueden conseguir efectos más elaborados, como animaciones, movimiento, rotaciones, etc

Para escoger la posición del texto con respecto a la imagen se utilizaba el atributo align y permitía las siguientes posibilidades:

  • top

    el texto aparece alineado arriba

  • middle

    el texto aparece alineado en medio

  • bottom

    el texto aparece alineado abajo

Este atributo ya no es soportado en HTML5 y se ha incluido el ejemplo por compatibilidad con versiones anteriores, es recomendable utilizar una hoja de estilo para obtener este efecto o utilizando el elemento div

En el ejemplo se ha optado por usar el elemento div

Quedando como resultado:

Texto alineado arriba
Texto alineado en medio
Texto alineado abajo