Web Dev (Frontend)

¿Qué es la programación?

La programación es una de las maneras de comunicarnos con las computadoras y otros dispositivos electrónicos para decirles cómo deben comportarse.

Lo hacemos por medio de palabras y frases que tienen un propósito predefinido. Con ellas podemos crear instrucciones y manipular dispositivos o programas.

Cada lenguaje de programación define los aspectos que puede manipular de un sistema y las palabras que deben de usarse para dicho propósito, a esto le llamamos sintaxis.

Existe una gran cantidad de lenguajes que podemos usar para controlar lo que hace una computadora.

Logos de lenguajes de programación


¿Qué es sintaxis?

En programación utilizamos código para decirle a los dispositivos qué tareas realizar.

Cada lenguaje de programación tiene un conjunto de reglas que dicta la validez de las instrucciones.

Dicho de otra manera, cada lenguaje decide qué palabras tienen qué significado y en qué orden deben ir para ser interpretadas correctamente por el dispositivo. A esto se le denomina sintaxis.

Analogía

En los lenguajes naturales, como el inglés o el español, tenemos estructuras de palabras con cierto significado como: saludos, preguntas, afirmaciones, etc.

Comunicación entre personas

En lenguajes de programación tenemos estructuras que definen comportamientos como: declaración de variables, ciclos, condicionales, etc.

Comunicación entre persona y pc

Prácticamente aprender programación es como aprender idiomas, sólo que en lugar de usarlo para hablar con otras personas, lo usamos para hablar con dispositivos electrónicos, usualmente computadoras y celulares.

Al aprender un lenguaje es una buena idea enfocamos en las estructuras de palabras que podemos usar y el propósito de cada una de ellas.

Sobre el dominio de la sintaxis

Para dominar un lenguaje de programación, debemos saber usar las diferentes estructuras de código para crear los comportamientos que deseamos en un programa.

Una vez que dominemos alguno de ellos, aprender otro lenguaje no resulta tan complicado, ya que la mayoría comparten estructuras similares, sólo cambian las palabras usadas para crear los mismos comportamientos.

Por ejemplo, el siguiente código nos sirve para crear una función que imprime un mensaje a la consola en JavaScript:

function myFun() {
console.log("Hello");
}

Y así se ve la misma función pero para Python:

def myFunc():
print("Hello")

Como podemos ver, el patrón de la estructura de código es fácil de identificar incluso si hay algunas diferencias.


El código sólo es texto

Ver en YouTube

De manera simplificada, el código sólo es texto que es interpretado por algún programa específico. Ese programa sabe qué hacer con la estructura del texto que le damos y le da vida a las aplicaciones que conocemos.

En el desarrollo web (por lo menos en el frontend), el programa que interpreta nuestros archivos es el navegador.

Los archivos que maneja son HTML, CSS y JavaScript, que usan las extensiones .html, .css y .js, respectivamente.

Para crear estos archivos podemos usar cualquier editor de texto que nos permita guardarlos con las extensiones necesarias.

Aunque utilizar una herramienta dedicada para crear código puede darnos algunas ventajas.


¿En dónde se usa la programación?

Áreas de trabajo

Existe una gran cantidad de áreas donde se puede utilizar la programación, algunas de ellas son:

Desarrollo Web

Es el diseño y construcción de sitios y aplicaciones web. Cubre todo, desde diseños de páginas simples hasta software complejo para empresas, con un enfoque en la arquitectura web, la interfaz de usuario y la experiencia del usuario.

Desarrollo de Juegos

El arte de crear experiencias de entretenimiento interactivo, que van desde juegos independientes hasta títulos AAA, involucrando la mecánica de juego, la narración de historias y el diseño de la interfaz de usuario.

Ciencias de la Computación

Es el estudio de las computadoras y los procesos algorítmicos, incluidos sus principios, sus diseños de hardware y software, sus aplicaciones y su impacto en la sociedad.

Ciencia de Datos

El campo que combina la experiencia en un dominio específico, habilidades de programación y conocimiento de matemáticas y estadísticas para extraer conocimientos significativos de los datos. Involucra análisis de datos, aprendizaje automático y modelado predictivo.

Aprendizaje Automático e IA

Desarrollo de algoritmos que pueden aprender y hacer predicciones sobre datos.

Computación Científica

Uso de capacidades de computación avanzadas para resolver problemas científicos complejos.

Finanzas y Comercio

Escritura de algoritmos para comercio automatizado o gestión de datos financieros.

Ciberseguridad

Protección de sistemas, redes y programas contra ataques digitales.

Robótica

Programación de robots para realizar diversas tareas.

Diseño Gráfico y Animación

Programación para diseño visual y gráficos en movimiento.

Bioinformática

Aplicación de herramientas y técnicas de informática para capturar e interpretar datos biológicos.

Procesamiento de Lenguaje Natural (PLN)

Permitir que las computadoras entiendan e interpreten el lenguaje humano.

Desarrollo de Herramientas

Creación de herramientas de software que ayudan en el desarrollo de software u otras tareas informáticas. Esto podría incluir compiladores, editores de texto, depuradores o cualquier software que facilite la realización de una tarea.

IoT (Internet de las Cosas)

Desarrollo de dispositivos interconectados que pueden recopilar e intercambiar datos. Involucra la programación para sensores, dispositivos portátiles, electrodomésticos inteligentes y otros dispositivos que contribuyen a ecosistemas inteligentes.

Mods de Juegos

Modificación de software de juegos para alterar cómo se juegan o se experimentan los juegos. Esto puede incluir cambios en niveles, personajes, objetos y también puede introducir nuevas mecánicas de juego o historias.

Música

La programación se puede utilizar para crear herramientas de producción de música digital, sintetizadores, algoritmos para componer música o incluso IA que puede realizar análisis o composición musical.

Desarrollo de Aplicaciones Móviles

Creación de aplicaciones para dispositivos móviles.

Sistemas Embebidos

Escritura de software para dispositivos que no se consideran tradicionalmente computadoras, como electrodomésticos, automóviles y cámaras.

Diseño de Experiencia de Usuario (UX)

Creación de software con un enfoque en la experiencia del usuario final.

Blockchain y Criptomoneda

Desarrollo de libros de contabilidad digitales descentralizados y monedas digitales.

Realidad Aumentada (AR) y Realidad Virtual (VR)

Creación de experiencias inmersivas para entretenimiento, educación y más.

Informática de la Salud

Desarrollo de sistemas para gestionar la información sanitaria.

Software Educativo

Desarrollo de plataformas de aprendizaje interactivo y herramientas educativas.

Redes Sociales y Comunicación

Creación de plataformas para la comunicación y el intercambio de contenido.

E-commerce

Desarrollo de mercados en línea y sitios web de venta al por menor.

Computación en la Nube

Construcción de servicios y aplicaciones que se ejecutan en servidores remotos y se acceden a través de internet.

Tecnología de Hogar Inteligente

Programación de dispositivos que automatizan tareas y aumentan la eficiencia de los entornos domésticos.

Drones y Tecnología Aérea

Desarrollo de software para vehículos aéreos no tripulados (UAV) para diversas aplicaciones.

INFO

Si alguna de estas áreas te llama la atención, no dudes en buscar más información al respecto.


¿Qué es Web Dev?

La expresión web dev viene del inglés web developer, que significa desarrollador web.

Un desarrollador web es una persona que crea sitios y aplicaciones mediante tecnologías creadas para navegar en internet.

Ilustración

Se divide principalmente en dos áreas:

  • Frontend: Se encarga de lo que es visible para los usuarios. Como páginas, menús, botones, etc.
  • Backend: Se encarga de la lógica de comunicación entre sistemas. Como bases de datos y otros servicios.

A la combinación de ambas áreas se le denomina Fullstack.


¿Cómo funciona la web?

Internet es una inmensa red de dispositivos que se comunican entre sí.

Dependiendo de su naturaleza pueden ser:

  • Servidores
  • Clientes

A los dispositivos se encargan de guardar y manejar la información que encontramos en sitios y aplicaciones web, en términos técnicos, los llamamos servidores.

Para acceder a dicha información podemos utilizar un navegador web. Este programa nos ayuda a pedir datos y archivos dentro la red, en términos técnicos, lo llamamos cliente.

Cuando visitamos un sitio web, el navegador envía un mensaje para conseguir archivos de un dispositivo específico dentro de esta red.

Una vez que el mensaje llega al destino, el servidor se encarga de mandar los datos y archivos correspondientes a nuestro navegador.

Y el navegador convierte esos archivos para mostrarlos de la manera a la que estamos acostumbrados.

A la parte del desarrollo web que está orientada a manejar lo que sucede en el cliente se le llama frontend.

A la parte que maneja lo que sucede en el servidor se le llama backend.

Cuando combinamos ambas prácticas se le denomina fullstack.


¿Qué es Frontend?

Frontend es el término que usamos para referirnos a la parte del desarrollo web que se encarga de la interfaz con la que interactúa el usuario.

En palabras simples: cómo se ve y cómo se siente una aplicación o sitio web.

Ilustración

Algunos de los recursos con los que trabajamos en esta rama son:

  • HTML: Es un lenguaje que nos ayuda a crear y estructurar el contenido de la web.
  • CSS: Es un lenguaje que nos deja a estilizar y diseñar dicho contenido.
  • JavaScript: Es un lenguaje que nos permite añadir interactividad y comportamiento dinámico.
  • Frameworks y bibliotecas: Son herramientas que facilitan el desarrollo del frontend.
  • Diseño responsivo: Es un enfoque que asegura que la web se vea y funcione bien en diferentes dispositivos y tamaños de pantalla.

¿Qué necesitamos para aprender Frontend?

Aprender frontend es de las ramas de programación más amigables para principiantes por varias razones. Una de ellas es que no se necesitan programas muy pesados.

De hecho también se puede aprender y practicar sin necesidad de instalar nada en tu dispositivo.

Aquí vamos a ver algunas alternativas para aprender frontend:

Alternativa local

Le llamamos local porque vamos necesitar una computadora obligatoriamente, ya que vamos a estar creando y modificando archivos en nuestro dispositivo.

Para ello vamos a utilizar un editor de código: Usualmente VS Code, aunque hay más alternativas.

También vamos a utilizar diferentes herramientas para publicar nuestro trabajo en la web.

Ventajas

  • El flujo de trabajo es más parecido al de un entorno profesional.
  • Aprendemos lo que hace cada una de las herramientas y cómo utilizarlas de manera eficiente.

Desventajas

  • Todo es más manual, por lo que nos va a llevar tiempo crear un entorno de trabajo.
  • Publicar nuestros proyectos puede requerir más tiempo y esfuerzo.

Alternativa remota

Le llamamos remota porque las herramientas que vamos a utilizar forman parte de servicios en plataformas online.

Necesitamos un dispositivo que cuente con navegador de internet. Hoy en día casi cualquier dispositivo inteligente puede acceder a los sitios que vamos a utilizar para crear nuestros proyectos.

AVISO

La experiencia puede variar dependiendo de tu dispositivo, por lo que es importante probar varias opciones antes de decidir cuál utilizar.

Algunas de las plataformas que podemos utilizar son:

Ventajas

  • Podremos trabajar en proyectos que serán almacenados en la nube de manera automática, lo que nos permitirá cambiar alternar entre dispositivos sin problemas.
  • Usualmente los proyectos ya estarán alojados en un enlace que puede ser visitado por todo el mundo. (Crear proyectos privados dependerá de la plataforma).

Desventajas

  • Algunas plataformas empiezan a cobrar a partir de cierto número de proyectos.
  • Algunas funcionalidades avanzadas no están disponibles en editores online.
  • Si usamos un dispositivo móvil, la velocidad con la que podemos escribir código puede verse reducida.
INFO

A lo largo de este contenido usaremos la alternativa local. Si estás usando la alternativa remota y tienes problemas, puedes dejar un comentario en el artículo correspondiente.


Consigamos VS Code

🎬 Video

Ver en YouTube

¿Dónde conseguirlo?

Vamos a dirigirnos al sitio oficial de Visual Studio Code

En la página principal encontraremos un botón para descargarlo.

Botón de descarga en página principal

Usualmente bajará la versión correcta para el sistema operativo que estemos usando (Windows, MacOs o Linux), pero también podemos escoger un instalador particular o versiones anteriores del programa si damos clic en la lista.

Lista de instaladores

Instalación

La instalación es como cualquier otro programa.

Opciones de Windows

En Windows, uno de los últimos pasos del instalador se ve de esta manera:

Opciones de instalación

Opciones para marcar

Podemos marcar las dos casillas que dicen Add “Open with Code” para que nos aparezca este programa en el menú de clic derecho en el Explorador de Archivos.

Menú Abrir con

Paseo por la interfaz

🎬 Video

Ver en YouTube

Al iniciar

Cuando abrimos el programa por primera vez se ve de la siguiente manera:

Primera pantalla de VS Code

Tiene una serie de guías que nos ayudan a aprender a usar y modificar el editor. Si quieres saltar este paso puedes dar clic en las palabras Mark Done (_Marcar como hecho).

Botón marcar como hecho

Lo usual

Cuando abrimos el programa el resto de las veces podemos ver una pantalla como esta:

Pantalla de bienvenida

Si no queremos que se abra la pestaña de bienvenida por defecto, podemos desmarcar la casilla en la parte inferior.

Mostrar pantalla de bienvenida al iniciar

Sobre las diferentes secciones

Barra de menús

En la parte superior tenemos la barra de menús.

Barra de herramientas

Barra lateral

Del lado izquierdo tenemos la barra lateral o sidebar, aquí encontraremos diferentes botones que nos ayudarán a abrir paneles, cada uno con una tarea diferente.

Barra lateral

De arriba hacia abajo, el primero es el explorador de archivos. Similar al que utiliza nuestro sistema operativo, pero podemos abrir, crear y modificar archivos directamente desde aquí.

El segundo es el panel de búsqueda. Nos ayuda a encontrar los diferentes archivos que coincidan con algún patrón de texto

El tercero es el control de código fuente, nos ayuda a gestionar el historial de archivos creado por el control de versiones (usualmente Git).

El siguiente es el panel de ejecución y depuración, nos ayuda a ejecutar algunos archivos y poder encontrar errores y comportamientos no deseados en algunos lenguajes

El último de esta sección es el panel de extensiones, nos ayuda a agregar funcionalidades a nuestro editor.

Barra lateral - Cuentas y Ajustes

En la parte inferior de la misma barra podemos encontrar el menú de cuentas, nos sirve para iniciar sesión y poder guardar y sincronizar nuestros ajustes en otros dispositivos.

Y también el menú de gestión, donde podemos encontrar diferentes opciones para configurar el editor.

Sección principal

El resto de la interfaz es donde podremos ver los diferentes archivos que usemos en nuestros proyectos, se abrirán en forma de pestañas, como en un navegador. Podemos tener múltiples pestañas abiertas e incluso tenerlas lado a lado, o unas encima de otras.

Sección principal

Cambio de idioma

🎬 Video

Ver en YouTube

Para cambiar el idioma debemos dirigirnos a la barra lateral y dar clic en el menú extensiones.

Se abrirá un nuevo panel, dentro de la barra de búsqueda debemos escribir spanish.

Usualmente la primera opción (Spanish Language Pack for VS Code) es la correcta, así que podemos dar clic en install (instalar).

Extensión

Una vez instalado, en la parte inferior derecha nos aparecerá un mensaje para reiniciar el editor. Debemos dar clic en el botón azul.

Mensaje para reiniciar el editor

Al reiniciar el programa, lo encontraremos en el nuevo idioma.

VS Code en Español

Para volver a cambiar el idioma podemos ir al menú Ver (View) > Paleta de comandos (Command Palette)

Menú Ver

Escribir idioma (language) y seleccionar Configurar idioma de pantalla (Configure Display Language)

Cambiar idioma de pantalla

Aparecerá una lista de los lenguajes instalados y los lenguajes disponibles

Lista de lenguajes

Podemos seleccionar uno instalado o uno diferente para instalar la extensión correspondiente.


Sobre Live Server

Ver en YouTube

Live Server es una extensión de VS Code que nos ayuda a ver nuestro sitio web sin tener que recargar el navegador cada que hagamos cambios. De esta manera podemos desarrollar a la par con lo que estamos viendo.

Instalación

Para instalarla, nos dirigimos a la barra lateral > extensiones y buscamos live server.

Panel de extensiones

¿Cómo usar?

Para iniciar el servidor

Hay dos formas de ejecutar la extensión. Una de ellas es estar en un archivo .html y dar clic derecho.

Abrir con Live Server

En el menú deberá aparecer Open with Live Server.

La otra opción es dar clic en la barra inferior, en el botón Go Live.

Barra inferior

Cómo funciona

Una vez que iniciamos el servidor, se abrirá nuestro navegador en la dirección que por defecto nos da la extensión: http://127.0.0.1:5500

Live Server funcionando

Ahora podemos cambiar el código y al guardar el archivo, los cambios se verán reflejados automáticamente en el navegador.

Para que la extensión funcione correctamente debemos tener por lo menos la etiqueta <body> dentro de nuestro archivo. Si no, nos aparecerá una advertencia.

Advertencia de Live Server

Para detener el servidor

Para detener el servidor se hace de manera similar.

Podemos dar clic derecho y seleccionar Stop Live Server.

Detener Live Server

O podemos ir a la barra inferior y utilizar el botón que indica el puerto en el que está corriendo el servidor, usualmente Port: 5500.

Detener desde la barra inferior


Sobre Prettier

Ver en YouTube

Prettier1 es una herramienta que nos ayuda a mantener el formato de nuestro código de manera consistente. Funciona en diferentes editores de código y para diferentes lenguajes.

En HTML nos ayuda a mantener una legibilidad más adecuada por medio de los saltos de línea y la indentación.

En CSS nos ayuda a espaciar correctamente los selectores y las reglas.

En JS nos ayuda a autocompletar el punto y coma, además de mantener los espacios consistentes.

Instalación

Podemos instalarla en VS Code como una extensión. Para ello podemos ir a la barra lateral > extensiones y buscar prettier.

Configuración

Cómo activarla

Vamos a las opciones de nuestro editor (podemos usar el atajo ctrl/cmd + ,), y buscamos formatter (formateador).

En la lista Default formatter vamos a seleccionar Prettier.

Cómo formatear automáticamente al guardar

Para un mejor flujo de trabajo, podemos hacer que este formateador funcione al momento de guardar nuestros archivos.

En la misma búsqueda de ajustes podemos encontrar la opción Format On Save (formatear al guardar), y la activamos.

Ahora cada que guardemos algún archivo de código que esté soportado por esta herramienta, cambiará el formato de manera automática.

Se puede configurar para seguir diferentes reglas de formato, aunque las reglas por defecto son suficiente para los principiantes.

Notas

  1. Prettier - Página oficial


Construyendo casas virtuales

Existe una analogía muy popular para explicar cómo funcionan las tres tecnologías básicas de la web:

Imaginemos que estamos construyendo una casa, sólo que en lugar de ser una casa en el mundo físico, lo haremos en el mundo digital.

Para hacerlo, utilizamos tres herramientas especiales llamadas HTML, CSS y JavaScript.

Cada una tiene un trabajo único que nos ayuda en la construcción de esta casa.

HTML: Los ladrillos

HTML es como los ladrillos de nuestra casa. Lo usamos para construir las partes de nuestra página web, como los párrafos de texto, las imágenes que vemos y los botones en donde hacemos clic.

Analogía

Es como decir, “aquí va una ventana, aquí una puerta”, etc.

CSS: La pintura y decoración

Una vez que tenemos los ladrillos (HTML), usamos CSS para hacer que nuestra casa se vea bonita. CSS es como la pintura y la decoración de nuestra casa en la web. Nos permite elegir colores, hacer que el texto sea más grande o más pequeño, y poner todo en el lugar correcto.

Analogía

Es como decidir de qué color pintar las paredes y dónde poner los muebles y la decoración.

JavaScript: La magia que hace que las cosas se muevan

JavaScript es como la magia que hace que las cosas en nuestra casa funcionen. Si queremos que algo se abra cuando hacemos clic, o que aparezca un mensaje, usamos JavaScript.

Analogía

Es como tener un interruptor que enciende las luces o un una llave que nos da agua cuando la abrimos.


Aprendamos HTML

Introducción

Son las siglas para HyperText Markup Language, o Lenguaje de Marcas de HiperTexto.

Es un lenguaje que nos sirve para crear el contenido y la estructura de una página web.

Anatomía de código HTML

Para poder utilizarlo, debemos aprender algunos conceptos.

Etiquetas y Elementos

Ver en YouTube

El lenguaje está compuesto por segmentos de código a los cuales llamamos etiquetas. Una etiqueta sigue esta estructura:

<nombre>

Es decir: signo <, nombre de la etiqueta, seguido del signo >.

Los nombres ya están predefinidos, y cada uno de ellos nos ayuda con tareas específicas, como mostrar texto, imágenes, videos, tablas, etc.1

Por ejemplo:

<body></body>

… que nos ayuda a crear el cuerpo de la página.

La mayoría de las etiquetas deben venir en pares, donde a la primera la llamamos etiqueta de apertura y la segunda la llamamos etiqueta de cierre.

La etiqueta de cierre necesita una diagonal antes del nombre.

En medio de las dos podemos insertar contenido, por ejemplo; texto, más etiquetas, o una combinación de ambos.

<body>
Contenido
</body>

A esta estructura le llamamos Elemento HTML.

Elementos vacíos

Existen Elementos que sólo necesitan la etiqueta de apertura, es decir, no pueden tener contenido. A este tipo de elementos se les considera elementos vacíos o de autocierre.

<br >

Usualmente se le pone una diagonal después del nombre para hacer explícito que no puede tener contenido, pero deberían funcionar con o sin ella.

<br />

Atributos

Ver en YouTube

En la etiqueta de apertura de algunos elementos podemos encontrar segmentos de código a los que llamamos atributos. Nos ayudan a definir ciertos comportamientos de las etiquetas:2

<div style="color:blue;">Texto</div>

En este caso estamos cambiando el aspecto del texto mostrado.

La estructura de los atributos es nombre="valor". En el ejemplo anterior style es el atributo definido y color:blue; es el valor.

Atributos globales

Existen atributos que pueden ser usados en todas las etiquetas, algunos ejemplos son: style, class y id. A estos los llamamos atributos globales.

Atributos particulares

También existen atributos que sólo se pueden usar en ciertas etiquetas, por ejemplo:

<a href="https://www.google.com/" target="_blank">Ir a Google</a>

Esta etiqueta nos ayuda a agregar links o enlaces. En este caso tenemos una etiqueta con dos atributos: href y target, el primero le indica a dónde redirigirnos cuando le damos clic.

El segundo le indica que dicho enlace debe abrirse en una nueva pestaña.

Algunas etiquetas necesitan de ciertos atributos para funcionar correctamente. En el ejemplo anterior, href es uno de ellos, ya que si no hay enlace, la etiqueta sólo mostrará texto y no podrá redirigirnos a ningún lado.

Otro ejemplo es:

<img src="https://placebear.com/200/300" />

<img> la etiqueta que nos ayuda a mostrar imágenes, donde src es similar a href. Siendo que le indica de dónde conseguir la imagen a mostrar.

Estructura básica de un documento HTML

Ver en YouTube

Al usar un editor de código como VS Code, tenemos acceso a algunos atajos para generar código base para algunos proyectos. Si creamos un archivo HTML y utilizamos el autocompletado ! obtendremos el siguiente código:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body></body>
</html>

<!DOCTYPE html> Indica que el tipo de documento será de tipo html. Con este código está implícito que usaremos la última versión del lenguaje.

Existen otros tipos de documento y versiones de HTML que podemos usar, pero para hacer proyectos web con las características más recientes del lenguaje podemos dejar la línea generada.

El segundo elemento es <html>, debemos incluir el resto de etiquetas para generar una página. Por defecto incluye el atributo lang="es", que le indica que el contenido será Aquí tenemos que insertar dos elementos más.

<head> es donde van las etiquetas con información importante para el navegador.

<body> es donde va el contenido que verá el usuario.

<meta charset="UTF-8" /> indica que usaremos uno de los sistemas de codificación de caracteres más usados en la web. Esto nos ayuda a evitar conflictos de visualización y compatibilidad con usuarios que visitan nuestra página desde otros países o utilizan otro lenguaje en su navegador.

<meta name="viewport" content="width=device-width, initial-scale=1.0" /> nos ayuda a hacer que la pantalla se adapte a diferentes tamaños de dispositivos móviles para que el contenido no aparezca demasiado pequeño ni demasiado grande.

<title> nos ayuda a darle un nombre a la pestaña, lo cual también sirve cuando agregamos la página a marcadores.

Notas

  1. Lista de Elementos HTML.

  2. Lista de Atributos


Etiquetas básicas de contenido

Ver en YouTube

Cuando recién comenzamos a aprender HTML, las etiquetas que más nos van a servir, además de las etiquetas para la estructura básica de un documento1, son las siguientes.

Comentario

Nos ayuda a evitar que algunas líneas de texto sean interpretadas como código, de esta manera podemos dejar mensajes o recordatorios para nosotros mismos u otros desarrolladores.

<!-- Esto es un comentario -->
<!-- Esto no se mostrará al usuario en la página web -->

Títulos o encabezados

Las etiquetas heading, por título o encabezado. Van de <h1> a <h6>. Nos ayudan a dividir los temas y subtemas de nuestra página. Son como títulos y subtítulos en un libro de texto.

<h1>Título 1</h1>
<h2>Título 2</h2>
<h3>Título 3</h3>
<h4>Título 4</h4>
<h5>Título 5</h5>
<h6>Título 6</h6>
Visualización

Párrafo

La etiqueta <p>, por paragraph (párrafo) nos ayuda a agregar bloques de texto.

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
<p>
Maiores perspiciatis accusantium dolorum deleniti ducimus modi eum. Assumenda,
itaque?
</p>
<p>
Dolorem pariatur repellat explicabo consectetur id itaque architecto corrupti
velit fuga recusandae!
</p>
Visualización

Lista desordenada

la etiqueta <ul>, por unordered list o lista desordenada, nos ayuda a mostrar elementos usando viñetas.

<ul>
<li>Elemento A</li>
<li>Elemento B</li>
<li>Elemento C</li>
</ul>
Visualización

Elemento de lista

Para poder usar las listas correctamente se debe usar el elemento <li>, por list item o elemento de lista, por cada artículo que queramos agregar a la lista.

Lista ordenada

la etiqueta <ol>, por ordered list o lista ordenada, nos ayuda a mostrar elementos de forma numerada. También hace uso de los elementos <li>.

<ol>
<li>Elemento A</li>
<li>Elemento B</li>
<li>Elemento C</li>
</ol>
Visualización

Salto de línea

La etiqueta <br>, por line break o salto de línea, nos ayuda a crear un espacio entre bloques de contenido.

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
<br />
<p>
Dolorem pariatur repellat explicabo consectetur id itaque architecto corrupti
velit fuga recusandae!
</p>
Visualización

Regla horizontal

La etiqueta <hr>, por horizontal rule o regla horizontal, nos ayuda a crear una línea de separación en el contenido.

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
<hr />
<p>
Dolorem pariatur repellat explicabo consectetur id itaque architecto corrupti
velit fuga recusandae!
</p>
Visualización

Ancla (enlace)

La etiqueta <a>, por anchor o ancla, nos ayuda a crear enlaces a otras páginas y secciones. Necesita el atributo href donde el valor es el link a donde queremos que nos lleve.

Este es el ejemplo más básico:

<a href="https://iniz.lol">Ir a mis redes sociales</a>
Visualización

Opcionalmente podemos agregar target="_blank" para hacer que el enlace se abra en una nueva pestaña.

<a href="https://iniz.lol" target="_blank">Ir a mis redes sociales</a>
Visualización

Imagen

La etiqueta <img>, por image o imagen, nos ayuda a mostrar imágenes en el documento. Necesita el atributo src donde el valor debe ser la dirección donde se encuentra alojado el archivo. Opcionalmente se puede poner el atributo alt donde el valor debe ser una descripción de la imagen. Nos ayuda cuando la imagen no carga y para los usuarios con lector de pantalla activado.

<img src="https://placebear.com/200/300" alt="Foto de dos osos" />
Visualización

División

La etiqueta <div>, por division o división, nos ayuda a crear separaciones en el contenido, usualmente para agregar estilos a bloques de contenido que están relacionados visualmente.

<div style="color: orange">
<h1>Título</h1>
<p>Contenido</p>
<p>Contenido</p>
</div>
Visualización

Abarcar

La etiqueta <span> o abarcar es similar a div. Sólo que nos ayuda a agrupar frases o palabras en un renglón para hacer separaciones, en lugar de hacerlo por bloques.

<p>Contenido <span style="color: pink">con estilo</span></p>
Visualización

Notas

  1. Estructura básica de un documento HTML


Ejercicio - Hagamos un periódico

La apariencia por defecto del HTML no es muy estética, se parece más a lo que veríamos en un periódico local. Donde la estructura sólo son encabezados, párrafos y algunas imágenes. Usaremos esto a nuestro favor para crear nuestro propio periódico.

Repasemos lo que aprendimos

Recordemos que las etiquetas que vimos hasta ahora son:

  • Comentario <!-- -->
  • Títulos o encabezados <h1> - <h6>
  • Párrafo <p>
  • Lista ordenada <ol>
  • Lista desordenada <ul>
  • Elemento de lista <li>
  • Salto de línea <br>
  • Regla horizontal <hr>
  • Ancla (enlace) <a>
  • Imagen <img>
  • División <div>
  • Abarcar <span>

Estas no son las únicas etiquetas existentes, si sabes usar otras que no estén en esta lista puedes agregarlas a tu proyecto. Más adelante aprenderemos sobre otras etiquetas útiles.

AVISO

Evita poner información sensible si es que piensas publicar tu proyecto en línea.

No olvides que…

Puedes checar el siguiente ejemplo para darte una idea:

Ver en YouTube

Aquí hay una versión más pequeña del mismo ejemplo:


Aprendamos CSS

Ver en YouTube

Cuando creamos código HTML, el navegador se encarga de darle una apariencia por defecto, la cual no es muy llamativa.

Para cambiar esto, el lenguaje CSS nos ayuda a darle estilo a los diferentes elementos que componen nuestro sitio web.

CSS viene del inglés Cascading Style Sheets u Hojas de Estilo en Cascada.

Una de las formas de agregar estilos a nuestros elementos HTML es desde la etiqueta de apertura, utilizando el atributo style. Dentro podemos escribir una o más reglas de CSS.

<p style="color:pink;">Contenido</p>

Anatomía de reglas CSS

Las reglas están compuestas por una propiedad y un valor, entre ellos deben existir el símbolo dos puntos (:), y al final debe ir el símbolo punto y coma (;).

propiedad: valor;

En el ejemplo inicial tenemos un estilo con una sola propiedad:

  • color, que tiene el valor pink.

Aunque en realidad podemos usar varias propiedades dentro style, por ejemplo:

<p style="color:pink;font-size:32px;">Contenido</p>

Esta vez agregamos dos propiedades, cada una con su propio valor.

Sobre los valores

Los valores que podemos usar dependen de cada propiedad1.

Por ejemplo:color, acepta diferentes formatos de color:

  • Colores nombrados (como pink)
  • Colores hexadecimales (como #ffc0cb)
  • Colores RGB (como rgb(255, 192, 203))
  • Entre otros
color: pink;
color: #ffc0cb;
color: rgb(255, 192, 203);

Otro ejemplo sería font-size, que acepta diferentes formatos de tamaños o medidas:

  • Tamaños en pixels (como 32px)
  • Tamaños en medidas relativas (como 2rem)
  • Tamaños en medidas de fuente (como large)
  • Entre otros
font-size: 32px;
font-size: 2rem;
font-size: large;

Existe una gran cantidad de propiedades2. Dependiendo del sitio donde consultes el número puede variar pero son cientos de ellas.

Notas

  1. Lista de valores y unidades (sólo en inglés)

  2. Lista de propiedades CSS


Propiedades básicas CSS

Existe una gran variedad de propiedades que pueden ser usadas para cambiar el aspecto de los elementos de nuestra página. Aquí hay una pequeña lista de las más sencillas de utilizar y que provocan grandes cambios:

color

Cambia el color del texto del elemento:

<p style="color:red;">Texto</p>
Visualización

Acepta valores de tipo <color>1.

background-color

Cambia el color de fondo del elemento:

<p style="background-color:royalblue;">Texto</p>
Visualización

Acepta valores de tipo <color>1.

font-family

Cambia la familia de fuente/tipografía:

<p style="font-family:monospace;">Texto</p>
Visualización

Acepta valores de tipo <string>2, eso quiere decir que podemos usar cualquier texto, aunque los valores siempre deben pertenecer a una familia de fuente.

Podemos probar con algunos valores genéricos:

  • serif
  • sans-serif
  • monospace
  • cursive
INFO

En otro artículo aprenderemos a usar fuentes personalizadas

font-size

Cambia el tamaño de la letra:

<p style="font-size: 32px;">Texto</p>
Visualización

Acepta valores de diferentes tipos, algunos de ellos son <absolute-size>3 y <length>4.

Podemos probar con algunos valores de tipo <absolute-size> como:

  • xx-small (extra extra chico)
  • x-small (extra chico)
  • small (chico)
  • medium (mediano)
  • large (grande)
  • x-large (extra grande)
  • xx-large (extra extra grande)

Y algunos de tipo <length> como:

  • px (pixeles)
  • cm (centímetros)
  • mm (milímetros)
  • in (pulgadas)
  • % (porcentajes)
  • Entre otros

text-align

Cambia la alineación de texto:

<p style="text-align:center;">Texto</p>
Visualización

Los valores más comunes son:

  • left (izquierda) es el valor por defecto
  • right (derecha)
  • center (centrado)
  • justify (justificado)

border

Cambia el borde del elemento:

<p style="border:1px solid black;">Texto</p>
Visualización

Está dividido en tres partes:

  • border-width: indica el ancho del borde
  • border-style: indica el estilo del borde
  • border-color: indica el color del borde

En el ejemplo anterior, el borde tiene un ancho de 1px, un estilo solid (sólido) y un color con valor black (negro).

Para el ancho podemos usar valores de medidas34.

Para el estilo del borde podemos usar:

  • solid (sólido)
  • dashed (discontinuo)
  • dotted (punteado)
  • double (doble)
  • groove (acanalado)
  • ridge (cuadrado)
  • inset (insertado)
  • outset (insertado)

Y para el color podemos usar valores de color1.

INFO

En otro artículo aprenderemos las formas de usar los valores de esta propiedad

margin

Cambia el espacio entre el elemento actual y los elementos consecuentes:

<p style="margin:12px;border:1px solid black;">Texto</p>
<p>Texto</p>
Visualización

En este ejemplo agregamos el borde para hacer más evidente el espacio entre los elementos.

Podemos usar valores de medidas3.

INFO

En otro artículo aprenderemos las formas de usar los valores de esta propiedad

padding

Cambia el espacio entre el contenido del elemento y el borde:

<p style="padding:12px;border:1px solid black;">Texto</p>
<p>Texto</p>
Visualización

Podemos usar valores de medidas34.

INFO

En otro artículo aprenderemos las formas de usar los valores de esta propiedad

width

Cambia el ancho del elemento:

<p style="width:50%;border:1px solid black;">Texto</p>
<p style="border:1px solid black">Texto</p>
Visualización

Podemos usar valores de medidas34.

height

Cambia la altura del elemento:

<p style="height:40px;border:1px solid black;">Texto</p>
<p style="border:1px solid black">Texto</p>
Visualización

Podemos usar valores de medidas34.

Con estas reglas podemos comenzar a crear algunos cambios interesantes en nuestros proyectos.


Notas

  1. Documentación sobre <color> 2 3

  2. Documentación sobre <string> (sólo en inglés)

  3. Documentación sobre <absolute-size> (sólo en inglés) 2 3 4 5 6

  4. Documentación sobre <length> 2 3 4 5


Colores nombrados

Ver en YouTube

En CSS, cuando utilizamos una propiedad como background-color podemos colocar valores del tipo <color>1.

Existen diferentes alternativas, algunas de ellas son:

  • por palabras reservadas o nombres
  • por notación hexadecimal2
  • por notaciones de espacio de color

El concepto colores nombrados hace referencia a los colores que están asociados con palabras en lugar de códigos o funciones. Existen alrededor de 150 palabras que hacen referencia a colores3:

Puedes dar clic en cualquier elemento para copiar el color en tu portapapeles.

AliceBlue
AntiqueWhite
Aqua
Aquamarine
Azure
Beige
Bisque
Black
BlanchedAlmond
Blue
BlueViolet
Brown
BurlyWood
CadetBlue
Chartreuse
Chocolate
Coral
CornflowerBlue
Cornsilk
Crimson
Cyan
DarkBlue
DarkCyan
DarkGoldenRod
DarkGray
DarkGrey
DarkGreen
DarkKhaki
DarkMagenta
DarkOliveGreen
DarkOrange
DarkOrchid
DarkRed
DarkSalmon
DarkSeaGreen
DarkSlateBlue
DarkSlateGray
DarkSlateGrey
DarkTurquoise
DarkViolet
DeepPink
DeepSkyBlue
DimGray
DimGrey
DodgerBlue
FireBrick
FloralWhite
ForestGreen
Fuchsia
Gainsboro
GhostWhite
Gold
GoldenRod
Gray
Grey
Green
GreenYellow
HoneyDew
HotPink
IndianRed
Indigo
Ivory
Khaki
Lavender
LavenderBlush
LawnGreen
LemonChiffon
LightBlue
LightCoral
LightCyan
LightGoldenRodYellow
LightGray
LightGrey
LightGreen
LightPink
LightSalmon
LightSeaGreen
LightSkyBlue
LightSlateGray
LightSlateGrey
LightSteelBlue
LightYellow
Lime
LimeGreen
Linen
Magenta
Maroon
MediumAquaMarine
MediumBlue
MediumOrchid
MediumPurple
MediumSeaGreen
MediumSlateBlue
MediumSpringGreen
MediumTurquoise
MediumVioletRed
MidnightBlue
MintCream
MistyRose
Moccasin
NavajoWhite
Navy
OldLace
Olive
OliveDrab
Orange
OrangeRed
Orchid
PaleGoldenRod
PaleGreen
PaleTurquoise
PaleVioletRed
PapayaWhip
PeachPuff
Peru
Pink
Plum
PowderBlue
Purple
RebeccaPurple
Red
RosyBrown
RoyalBlue
SaddleBrown
Salmon
SandyBrown
SeaGreen
SeaShell
Sienna
Silver
SkyBlue
SlateBlue
SlateGray
SlateGrey
Snow
SpringGreen
SteelBlue
Tan
Teal
Thistle
Tomato
Turquoise
Violet
Wheat
White
WhiteSmoke
Yellow
YellowGreen

Algunas de ellas son sinónimos, es decir, son el mismo color pero escrito de diferente manera:

  • Aqua / Cyan
  • Fuchsia / Magenta
  • DarkGray / DarkGrey
  • DarkSlateGray / DarkSlateGrey
  • DimGray / DimGrey
  • LightGray / LightGrey
  • LightSlateGray / LightSlateGrey
  • Gray / Grey
  • SlateGray / SlateGrey

Además de estas palabras, también podemos encontrar transparent para crear transparencia y currentColor que nos ayuda a heredar el color de elementos superiores en la jerarquía de elementos.

INFO

Los nombres no son sensibles a mayúsculas y minúsculas. Por lo que podemos escribir DarkGray, DARKGRAY o darkgray y funcionará de la misma manera.

Notas

  1. Documentación sobre <color>

  2. Documentación sobre <hex-color>

  3. Documentación sobre <named-color>


Formatos de color más comunes

En CSS existen diferentes formas de especificar un color. Las más comunes son:

  • Colores nombrados
  • Hexadecimal
  • RGB
  • RGBA
  • HSL
  • HSLA

Colores nombrados

Los colores nombrados son valores predefinidos que utilizan nombres de colores en inglés, como red, blue, green, etc.

Usualmente esta es la primera forma en la que aprendemos a utilizar valores de tipo <color> ya que se encuentran en la lista de autocompletado de VS Code. Podemos encontrar la lista completa aquí: Colores nombrados.

Hexadecimal

Es un formato que utiliza valores del sistema hexadecimal para especificar colores.

El sistema hexadecimal utiliza 16 símbolos para contar: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f. Donde el valor mínimo es 0 y el máximo es f.

Los colores que usan 6 valores o tres pares de valores son los más comunes:

#RRGGBB
  • El primer par de valores indica la cantidad de rojo (Red)
  • El segundo par de valores indica la cantidad de verde (Green)
  • El tercer par de valores indica la cantidad de azul (Blue)

Por ejemplo:

#ff0000

Sería un color completamente rojo:

También podemos encontrarlo en formato de 8 valores o 4 pares, donde el último par indica la opacidad del color:

#RRGGBBAA

Donde A es el valor Alpha o la opacidad.

Por ejemplo:

#ff000080

Sería un color completamente rojo con una opacidad hexadecimal de 80 que es equivalente a 50%.

Y también podemos encontrarlo en formato de 3 valores:

#RGB

Que en realidad se vuelve un equivalente a repetir el valor en cada color.

Por ejemplo:

#0f0

Es equivalente a:

#00ff00

Y:

#abc

Es equivalente a:

#aabbcc
INFO

Estos valores no son sensibles a mayúsculas y minúsculas por lo que se usar tanto f00 como F00

RGB y RGBA

RGB y RGBA son formatos que utilizan una función para especificar colores.

En este artículo veremos la versión moderna de rgb() que nos permite poner diferentes tipos de valores para cada color y opacidad.

Con números

La sintaxis es la siguiente:

rgb(R G B)

Donde:

  • R es el valor de rojo (red)
  • G es el valor de verde (green)
  • B es el valor de azul (blue)

Y podemos usar valores del 0 al 255 para cada color.

INFO

La versión más reciente de esta función debe hacer separaciones entre los valores usando espacios en lugar de comas

Por ejemplo:

rgb(0 0 255)

Adicionalmente, podemos usar valores de 0 a 1 para la opacidad añadiendo una diagonal seguida del valor:

rgb(R G B / A)

Por ejemplo:

rgba(0 0 255 / 0.5)
Puedes usar la siguiente herramienta para ver el concepto en acción

Con porcentajes

También podemos usar porcentajes para especificar los valores.

rgb(30% 20% 50%)

Incluyendo la opacidad:

rgb(30% 20% 50% / 50%)

Incluso podemos combinar la notación de porcentajes con la de números:

rgb(0 30% 255 / 80%)
Puedes usar la siguiente herramienta para ver el concepto en acción

Sobre las funciones de legado

Anteriormente las funciones RGB estaban divididas entre rgb() y rgba(), los valores tenían que estar separados por comas y no se podían combinar números con porcentajes.

En la versión actual de rgb() debemos usar espacios para separar los valores y podemos agregar la opacidad dentro de la misma función sin problema así como combinar números con porcentajes.

HSL y HSLA

HSL y HSLA también son formatos que utilizan una función para especificar colores.

Y de igual manera tienen una versión moderna que nos permite agregar opacidad de manera opcional.

La sintaxis es la siguiente:

hsl(H S L / A)

Donde:

  • H es el valor del tono (Hue)
  • S es el valor de la saturación (Saturation)
  • L es el valor de la luminosidad (Lightness)
  • / A es la opacidad (Alpha). Es un valor opcional.

H acepta valores de tipo <number> o <angle>. Es decir, números del 0 al 360, o valores en grados, vueltas, etc.

S acepta valores de tipo <percentage>. Es decir, porcentajes del 0% al 100%. Si olvidamos el % se seguirá interpretando como porcentaje.

L también acepta valores de tipo <percentage>.

A acepta valores de tipo <alpha-value>, que en realidad sólo son valores del 0 al 1 o del 0% al 100%.

Por ejemplo:

hsl(0 100% 50%)
Puedes usar la siguiente herramienta para ver el concepto en acción

Formas de agregar estilos

Ver en YouTube

Estilos en línea

Hasta este punto la única forma que conocemos de utilizar estilos es por medio del atributo style en la etiqueta de apertura de algún elemento.

<p style="color:tomato;">Contenido</p>

A este método se le conoce como estilos en línea.

Pero existen otros dos métodos que nos pueden ayudar a separar mejor los estilos del contenido para mejorar la legibilidad del código y su mantenimiento.

Para poder utilizarlos, debemos aprender un concepto al que llamamos selectores.

Sobre selectores

Nos ayudan a seleccionar los elementos que serán afectados por las reglas CSS que escribimos. Tienen la siguiente forma:

selector {
propiedad: valor:
}

Por ahora veremos los selectores más sencillos…

Etiquetas

Estos selectores por medio del nombre de alguna etiqueta, lo que afectará a todas las etiquetas de ese tipo:

Por ejemplo:

<p>Contenido A</p>
<p>Contenido B</p>
<p>Contenido C</p>
<p>Contenido D</p>
p {
color: tomato;
background-color: silver;
padding: 4px;
border-radius: 4px;
}

ID

Cuando sólo queremos estilizar un elemento específico, podemos utilizar el atributo id con un valor arbitrario.

En este caso, uno de los párrafos tiene el identificador un-identificador, el cual podemos usar para seleccionarlo con CSS.

<p>Contenido A</p>
<p id="un-identificador">Contenido B</p>
<p>Contenido C</p>
<p>Contenido D</p>

Para seleccionar un ID, debemos utilizar el símbolo #, seguido del nombre del identificador.

#un-identificador {
color: forestgreen;
}

Class

Es un atributo que nos permite agregar una lista de identificadores al elemento. Similar a id, pero podemos tener múltiples clases y cada clase puede estar en múltiples elementos.

<p>Contenido A</p>
<p id="un-identificador">Contenido B</p>
<p class="una-clase">Contenido C</p>
<p class="una-clase otra-clase">Contenido D</p>

Para seleccionar por medio de clases, tenemos que utilizar el punto ., seguido del nombre del identificador.

.una-clase {
color: slateblue;
}
.otra-clase {
background-color: gold;
}

Estilos internos

La segunda forma de agregar estilos es por medio de la etiqueta <style>. Esta debe de ir dentro de la cabeza del documento.

Aquí podemos agregar los selectores y reglas que necesitemos.

<html>
<head>
<style>
p {
color: tomato;
background-color: silver;
padding: 4px;
border-radius: 4px;
}
#un-identificador {
color: forestgreen;
}
.una-clase {
color: slateblue;
}
.otra-clase {
background-color: gold;
}
</style>
</head>
<body>
<p>Contenido A</p>
<p id="un-identificador">Contenido B</p>
<p class="una-clase">Contenido C</p>
<p class="una-clase otra-clase">Contenido D</p>
</body>
</html>

De esta forma es más fácil diferenciar el contenido de los estilos.

Estilos externos

Para este método debemos crear un nuevo archivo con la extensión .css.

p {
color: tomato;
background-color: silver;
padding: 4px;
border-radius: 4px;
}
#un-identificador {
color: forestgreen;
}
.una-clase {
color: slateblue;
}
.otra-clase {
background-color: gold;
}

Dentro del documento HTML debemos utilizar una etiqueta link con relación stylesheet y haciendo referencia al nombre del archivo CSS.

<html>
<head>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<p>Contenido A</p>
<p id="un-identificador">Contenido B</p>
<p class="una-clase">Contenido C</p>
<p class="una-clase otra-clase">Contenido D</p>
</body>
</html>

¿Cómo agregar comentarios en CSS?

Cada lenguaje tiene su forma de crear comentarios para que agreguemos mensajes en nuestro código.

De esa manera pueden ser leídos por los desarrolladores e ignorados por el intérprete del lenguaje.

En CSS debemos encerrar el texto entre /* */:

/* Mi comentario */

Incluso podemos utilizar múltiples líneas:

/* Mi comentario
de varias líneas
para mejorar
el ejemplo */

Y también podemos ponerlos casi en cualquier parte de nuestro código:

body /* selecciona el cuerpo del documento */ {
margin: 0; /* quita el margen por defecto*/
color/* cambia el color del texto en toda la página */: #1b1b1b
/* color oscuro en hexadecimal*/;
}

Sólo debemos asegurarnos de no interrumpir el nombre de algún selector, propiedad o valor.


Vamos a replicarlo

Hasta ahora hemos aprendido cómo utilizar algunas de las propiedades básicas de CSS, como lo son:

  • color
  • background-color
  • font-family
  • font-size
  • text-align
  • border
  • margin
  • padding
  • width
  • height

Ejercicio 1

Tratemos de replicar este ejemplo. Se trata de un título con una fuente diferente.

¿Qué reglas de CSS crees que debamos usar?

Visualización
Ver respuesta
html
<h1>Un título con otra font</h1>

css
h1{
font-family: Arial, sans-serif;
}

Ejercicio 2

Este ejercicio solo consta de un elemento con algunas reglas CSS.

¿Qué reglas de CSS crees que debamos usar?

Visualización
Ver respuesta
html
<div></div>

css
div{
width: 100px;
height:100px;
background-color:aquamarine;
}

Ejercicio 3

Este ejercicio consta de dos párrafos y sólo una propiedad de CSS.

¿Qué regla crees que debamos usar?

Visualización
Ver respuesta
html
<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Dolorem repellendus cumque delectus officia mollitia eligendi doloribus expedita dolore maiores in temporibus, molestias est dolores, quidem nam facilis nulla. Excepturi, molestiae!</p>
<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Dolorem repellendus cumque delectus officia mollitia eligendi doloribus expedita dolore maiores in temporibus, molestias est dolores, quidem nam facilis nulla. Excepturi, molestiae!</p>

css
p{
font-size: 12px;
}

Ejercicio 4

Este ejercicio consta de tres párrafos y algunas clases. Editamos la misma propiedad para cada clase pero con diferentes valores.

Visualización
Ver respuesta
html
<p class="izquierda">Alineado a la izquierda</p>
<p class="centro">Alineado al centro</p>
<p class="derecha">Alineado a la derecha</p>

css
.izquierda{
text-align: left;
}
.centro{
text-align: center;
}
.derecha{
text-align: right;
}

Ejercicio 5

Este ejercicio utiliza 3 etiquetas <span> y algunas reglas de CSS. La más importante es margin. Las demás sólo existen para hacer este concepto más evidente.

Visualización
Ver respuesta
html
<span>Uno</span>
<span>Dos</span>
<span>Tres</span>

span {
background-color: black;
color: white;
margin: 20px;
padding: 4px 8px;
}

Ejercicio 6

Este ejercicio modifica un gran número de propiedades. Tratemos de averiguar cuáles son. Usamos 6 reglas en total.

Visualización
Ver respuesta

Este tendrás que hacerlo por tu cuenta. Sube tu solución a alguna plataforma y deja el link en los comentarios.


¿Cómo subir mi página a un enlace real? | GitHub

Ver en YouTube

Una vez que tenemos los archivos de nuestra página, podemos crear una cuenta en GitHub.

¿Qué es GitHub?

Esta es una plataforma de almacenamiento en la nube dedicada a desarrolladores. Ofrece una gran cantidad de servicios, entre ellos, alojar nuestros archivos en un servidor para que puedan ser consumidos como una página web.

¿Cómo creamos un nuevo proyecto

Cuando creamos una cuenta nueva, la página de inicio nos mostrará un botón para crear un nuevo proyecto, aunque el término que utilizamos es repositorio.

Otra alternativa es dirigirnos al botón de nuestro perfil y seleccionar Your repositories (Tus repositorios). Aquí podremos encontrar el botón para crear uno nuevo.

Nos aparecerá un formulario. El primer campo es para seleccionar el nombre de nuestro proyecto.

AVISO

No podemos usar espacios ni caracteres especiales, ya que terminarán siendo parte del enlace generado.

Dentro de las opciones podremos elegir entre un proyecto público o un proyecto privado. Al usar el servicio gratuito sólo podemos crear páginas a partir de proyectos públicos.

AVISO

El código de los proyectos públicos, como su nombre lo indica, está abierto a todo el mundo, así que no deberíamos poner información sensible en ellos.

El resto de los campos no los usaremos por ahora. Y le damos crear.

Dentro del repositorio

Nos enviará a la página de nuestro proyecto, aquí buscaremos el mensaje azul, y la sección que dice Upload existing files o Subir archivos existentes.

En esta pantalla podemos seleccionar o arrastrar los archivos y carpetas que conforman nuestro proyecto. Debajo aparecerá un formulario con dos campos, por ahora los dejaremos vacíos y publicaremos los nuevos archivos.

Una vez que suban los archivos, podremos ir a la barra superior que contiene diferentes menús. Seleccionaremos Settings o Ajustes. En la nueva pantalla iremos a la columna de la izquierda y buscaremos Pages o Páginas. En este panel buscaremos la sección Branch o Rama, y cambiaremos los ajustes de None a Main.

Esperamos unos minutos y recargamos la página. Hasta arriba del panel encontraremos el enlace a nuestra página.

Resolviendo algunos problemas

Me sale el error 404

Ver en YouTube

Cuando usamos servicios de alojamiento debemos asegurarnos de seguir las convenciones o configuración necesaria para que nuestra página se vea correctamente.

En el caso de GitHub Pages, existen dos maneras.

Usando index.html en la raíz

Debemos asegurarnos de que al subir el proyecto, la ruta del archivo que queremos usar como página de inicio está en la raíz del proyecto y se llama index.html.

Cuando subimos una carpeta completa, la plataforma crea una ruta con el nombre de la carpeta. Por ejemplo: mi-proyecto/index.html.

Podemos subir los archivos que están dentro de mi-proyecto en lugar de la carpeta completa para resolver el problema.

Usando docs en los ajustes

Otra forma es subir la carpeta completa, pero renombrándola a docs. Y en los ajustes de Pages, seleccionar docs en lugar de /root.


¿Qué es el Control de Versiones?

El control de versiones es una herramienta que nos ayuda a crear un historial de archivos.

Trabajando sin control de versiones

Cuando trabajamos en proyectos donde cambiamos el contenido constantemente usualmente tenemos dos alternativas:

  • Sobre-escribir archivos, lo cual vuelve irrecuperable versiones anteriores
  • Duplicar el archivo y cambiar el nombre de alguno (el clásico archivo-final2-definitivo.html)

Lo cual puede desencadenar en más problemas. Especialmente en programación.

Ilustración sin control de versiones

Como hacemos cambios constantemente esta herramienta nos ayuda a guardar dichos cambios. Así podemos preservar el nombre original de los archivos y las diferentes versiones.

También podemos volver a estados anteriores de nuestro código por si algo sale mal.

Ilustración con control de versiones

E incluso nos ayuda a trabajar en equipo y de manera remota, manteniendo los cambios que hacen las diferentes personas y dándonos una forma de resolver conflictos por si dos o más personas editan un mismo archivo.

Analogía

Imagina que tienes una caja donde guardas dibujos.

Cada vez que terminas un dibujo, lo pones en la caja. Si luego haces un cambio en ese dibujo, en vez de borrar lo que ya hiciste, haces una copia nueva con los cambios y también la pones en la caja.

Así, tienes todas las versiones de tu dibujo.

Ilustración de analogía

En el control de versiones de computadoras, hacemos algo similar con los archivos donde escribimos código para programas.

Cuando empezamos un proyecto, creamos una “caja” especial (en realidad, una carpeta en la computadora) donde guardamos todos los archivos del proyecto.


Control de Versiones con GitHub Desktop

Una de las maneras más sencillas de aprender sobre el Control de Versiones de manera práctica es usando GitHub Desktop.

Esta es una herramienta que liga el programa Git con una interfaz gráfica para simplificar las tareas del control de versiones.

Instalación y uso

Podemos dirigirnos a la página oficial para descargar el instalador de esta herramienta.

Una vez descargado e instalado, lo abrimos y podemos encontrar una pantalla como esta:

Si no tenemos cuenta de GitHub podemos dar click en Skip this step (Saltar este paso).

Si tenemos cuenta, podemos ligarla.

Una vez que entremos aparecerá este menú:

Aquí tenemos diferentes opciones:

  • Clone (Clonar)
  • Create New Repository (Crear Nuevo Repositorio)
  • Add Existing Repository (Agregar Repositorio Existente)

En este ejemplo vamos a crear un nuevo repositorio.

Nos va a aparecer este menú:

  • Name (Nombre)
  • Description (Descripción)
  • Local path (Ruta local)
  • README (Inicializar con README)
  • Git ignore (Ignorar git)
  • License (Licencia)

El único campo obligatorio es el nombre (Name) y la ruta donde se va a guardar. Podemos dejar la ruta por defecto.

Aparecerá este menú:

Aquí se creó automáticamente un archivo llamado .gitattributes.

Ahora podemos abrir este proyecto utilizando el atajo de teclado Ctrl + Shift + A.

Y agregar un nuevo archivo a nuestra carpeta. En este caso vamos a agregar index.html con el siguiente código:

index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mi página</title>
</head>
<body>
<h1>Mi página</h1>
</body>
</html>

Devuelta en GitHub Desktop aparecerá una nueva selección con el archivo creado.

Este nos indica que se agregó este archivo y que lo podemos guardar en un punto en el historial.

Para hacerlo debemos agregar en la parte inferior una descripción sobre los nuevos archivos.

Dicha descripción servirá para identificar esos cambios en el historial.

Ahora podemos dar clic en el botón Commit to main para agregarlo.

En la parte superior de este panel podemos encontrar otra pestaña llamada History. Aquí podemos encontrar el historial de cambios a lo largo de la vida de nuestro proyecto.

Dando clic en cada uno de los pasos, aparecerá la lista de archivos cambiados.

Podemos ir agregando o quitando código o archivos a nuestro proyecto para crear nuevos puntos de recuperación en el historial.

Por ejemplo, agregamos un párrafo al contenido del html y ligamos un archivo de estilos css.

Le damos una descripción y lo agregamos al historial

También podemos eliminar partes del código e incluso archivos y nos aparecerá en los cambios generados para crear un nuevo punto en el historial.


Sobre fuentes

Cuando queremos cambiar el aspecto de nuestro sitio web, una de las formas más fáciles es modificando la fuente o tipografía.

Por ejemplo, este sitio está usando la fuente por defecto:

Visualización

Mientas que este, está usando la regla:

body {
font-family: "Franklin Gothic Medium", "Arial Narrow", Arial, sans-serif;
}
Visualización

De esta manera, con una sola regla de CSS, podemos mejorar su apariencia considerablemente.

Cómo usar font-family

Cuando usamos la propiedad font-family tenemos que usar múltiples nombres de fuente separados por comas. Esto se debe a que algunos sistemas pueden no tener la tipografía necesaria y deben de tener configurado un respaldo.

Esto se debe a que el navegador tratará de utilizar la primera fuente en la lista. Si no está disponible tratará de usar la siguiente, y así sucesivamente.

Es decir que en font-family: "Franklin Gothic Medium", "Arial Narrow", Arial, sans-serif, la prioridad va en cascada:

  1. Franklin Gothic Medium
  2. Arial Narrow
  3. Arial
  4. sans-serif

Cuando el nombre de la tipografía es más de una palabra, tenemos que usar dobles comillas para encerrarlo.

Si es una sola palabra, o el nombre no tiene espacios, puede ser escrito sin comillas.

Fuentes por defecto

Es recomendable poner una tipografía genérica como último respaldo.

Los nombres que podemos usar son:

  • serif
  • sans-serif
  • monospace
  • cursive
  • fantasy
  • system-ui
  • ui-serif
  • ui-sans-serif
  • ui-monospace
  • ui-rounded
  • math
  • fangsong

Fuentes de internet

Una de las maneras más comunes de usar tipografías distintas a las por defecto es por medio de servicios web. El más popular es Google Fonts.

Para usar una fuente de este sitio, debemos seleccionarla:

Google Fonts - Página de inicio

Dar clic en Obtener fuente (Get font)

Google Fonts - Obtener fuente

Obtener código

Google Fonts - Obtener código

En la pestaña de web, nos dará el código necesario para agregar y usar dicha fuente.

Existen dos métodos

Google Fonts - Usando link

Podemos agregar el código de etiquetas <link> en la cabeza de nuestro documento.

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mi primera página</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
rel="stylesheet"
/>
</head>
<body>
<h1>Mi primera página</h1>
<p>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Adipisci quos
quasi facilis itaque eligendi fugit nesciunt explicabo quas alias
excepturi nulla vero possimus veniam pariatur laborum qui, quaerat
laboriosam tenetur!
</p>
</body>
</html>

Y agregar la regla de CSS en los elementos donde la vayamos a utilizar.

body {
font-family: "Roboto", sans-serif;
}

@import

Podemos dar clic en el método @import y copiar el código generado:

Google Fonts - Usando link

Debemos pegarlo en la cabeza de nuestro documento y agregar la regla de CSS en los elementos donde la vayamos a utilizar.

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mi primera página</title>
<style>
@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap");
body {
font-family: "Roboto", sans-serif;
}
</style>
</head>
<body>
<h1>Mi primera página</h1>
<p>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Adipisci quos
quasi facilis itaque eligendi fugit nesciunt explicabo quas alias
excepturi nulla vero possimus veniam pariatur laborum qui, quaerat
laboriosam tenetur!
</p>
</body>
</html>

Alternativamente, podemos deshacernos de las etiquetas <style> y pegar el @import en nuestro propio archivo .css.

Así se vería nuestro ejemplo usando cualquiera de los dos métodos:

Visualización

Sobre el modelo de caja

El modelo de caja es un concepto de CSS que nos explica parte de la naturaleza de los elementos HTML.

Nos dice que todos los elementos son rectángulos (o cajas) que podemos distribuir de diferentes maneras:

  • Unas encima de otras
  • Unas al lado de otras
  • Unas dentro de otras
Elemento
Elemento
Elemento
Elemento
Elemento
Elemento
Elemento
Elemento
Elemento

Donde cada caja cuenta con las siguientes 4 propiedades:

  • content (contenido)1
  • padding (espaciado)
  • border (borde)
  • margin (margen)
Margin (Margen)
Border (Borde)
Padding (Espaciado)
Content (Contenido)

Content

El contenido es lo que va entre la etiqueta de apertura y la etiqueta de cierre.

La mayoría de las veces se trata de texto…

<p>Aquí hay texto</p>
Visualización

…aunque en otras ocasiones se trata de más etiquetas, o una combinación ambos.

<p>Aquí hay <strong>más</strong> texto</p>
Visualización

Padding

El padding o espaciado, es el espacio que se encuentra entre el contenido y el borde. Para entender mejor esto, primero agreguemos CSS que nos ayude a visualizar el borde…

<p style="border:1px solid black">Aquí hay texto</p>
Visualización

… ahora agreguemos el padding

<p style="padding:20px;border:1px solid black">Aquí hay texto</p>
Visualización

De esta manera es más evidente ver qué tipo de espacio estamos insertando.

Border

Es lo que envuelve al contenido y al espaciado, también lo podemos estilizar de diferentes maneras.

<p style="border:4px dashed black">Aquí hay texto</p>
Visualización

Margin

El margen es el espacio entre un elemento y los elementos que están a su alrededor.

<p style="margin:20px;border:1px solid black">Aquí hay texto</p>
<p style="border:1px solid black">Aquí hay texto</p>
Visualización

Notas

  1. Algunos elementos (los de autocierre) no pueden tener contenido


Etiquetas de bloque y en línea

Las diferentes etiquetas tienen un comportamiento por defecto. Algunas de ellas se distribuyen de manera apilada, es decir, de arriba hacia abajo, como una torre.

<p>Uno</p>
<p>Dos</p>
<p>Tres</p>
Visualización

Mientras que hay algunas que se distribuyen a lo largo del mismo renglón.

<span>Uno</span>
<span>Dos</span>
<span>Tres</span>
Visualización

Este comportamiento se debe a un concepto llamado nivel.

La forma de cambiarlo es mediante la propiedad display. Los valores más comunes son block, lo que hace que se ordenen en pila. E inline lo que hace que se ordenen sobre el mismo renglón.

Algunas etiquetas que están a nivel de bloque son:

  • <h1> - <h6>
  • <p>
  • <div>
  • <hr>
  • <ol>
  • <ul>
  • <li>

Algunas etiquetas que están a nivel en línea son:

  • <a>
  • <br>
  • <button>
  • <em>
  • <img>
  • <span>

A pesar de que los navegadores le dan uno de estos comportamientos a las diferentes etiquetas, podemos cambiarlo con CSS.

<span>Uno</span>
<span>Dos</span>
<span>Tres</span>
<style>
span {
display: block;
}
</style>
Visualización

Tablas en HTML

Existen algunas etiquetas básicas que podemos usar para crear tablas.

<table>: Table o tabla. <tr>: Table Row o fila de tabla <td>: Table Data o dato de tabla

Estructura básica de una tabla

Utilizamos <table> para definir la existencia de una tabla, <tr> para crear filas dentro de ella, y <td> para segmentar dichas filas.

<table>
<tr>
<td>Celda (1,1)</td>
<td>Celda (1,2)</td>
<td>Celda (1,3)</td>
</tr>
<tr>
<td>Celda (2,1)</td>
<td>Celda (2,2)</td>
<td>Celda (2,3)</td>
</tr>
<tr>
<td>Celda (3,1)</td>
<td>Celda (3,2)</td>
<td>Celda (3,3)</td>
</tr>
</table>
Visualización

Agregando encabezados

Si queremos agregar títulos a las columnas podemos crear una fila inicial y segmentarla con etiquetas <th> en lugar de etiquetas <td>.

<table>
<tr>
<th>Encabezado 1</th>
<th>Encabezado 2</th>
<th>Encabezado 3</th>
</tr>
<!-- Datos de la tabla -->
</table>
Visualización

Dándole un título

Si queremos agregar un texto para titular nuestra tabla, podemos usar la etiqueta <caption>.

<table>
<caption>
Título
</caption>
<!-- Encabezado de la tabla -->
<!-- Datos de la tabla -->
</table>
Visualización

Agregando el pie de tabla

Habrá algunas ocasiones donde tengamos que crear una última fila para crear un resumen o un total del contenido de la tabla. Lo podemos hacer con <tfoot>.

<table>
<!-- Resto de la tabla -->
<tfoot>
<tr>
<td>Sección de pie 1</td>
<td>Sección de pie 2</td>
<td>Sección de pie 3</td>
</tr>
</tfoot>
</table>
Visualización

Sobre HTML semántico

Para mejorar la accesibilidad y legibilidad de la tabla, podemos utilizar adicionalmente las etiquetas <thead> y <tbody>.

Colocaremos la fila de encabezados dentro de <thead> y el contenido de la tabla dentro de etiquetas <tbody> (puede haber más de una sección), por último debe estar <tfoot>.

Así tendremos una estructura similar a esta:

<table>
<caption>
<!-- Título -->
</caption>
<thead>
<!-- Fila de encabezados -->
</thead>
<tbody>
<!-- Filas de contenido -->
</tbody>
<tbody>
<!-- Filas de contenido -->
</tbody>
<tfoot>
<!-- Fila de pie -->
</tfoot>
</table>

Usemos todo al mismo tiempo

Un ejemplo real podría verse de la siguiente manera:

<table>
<caption>
Reporte de Ventas
</caption>
<thead>
<tr>
<th>Producto</th>
<th>Cantidad</th>
<th>Costo</th>
</tr>
</thead>
<tbody>
<tr>
<td>Producto A</td>
<td>40</td>
<td>$400</td>
</tr>
<tr>
<td>Producto B</td>
<td>30</td>
<td>$300</td>
</tr>
<tr>
<td>Producto C</td>
<td>10</td>
<td>$500</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Total</td>
<td>80</td>
<td>$1200</td>
</tr>
</tfoot>
</table>
Visualización

Y para mejorar su visualización podríamos agregar un par de estilos

table {
border-collapse: collapse;
}
caption {
margin: 8px 0;
}
td,
th {
border: 1px solid black;
text-align: center;
padding: 2px 4px;
}
Visualización

Enlaces a secciones y páginas internas

Secciones dentro de una página

Existen enlaces que nos pueden desplazar dentro de una misma página.

Lo podemos hacer agregando un atributo id al elemento al que nos queremos desplazar.

Y usar el atributo href de un link (<a>) usando la notación: #id.

<a href="#mi-elemento">Desplazar a elemento</a>
<!-- Más contenido-->
<div id="mi-elemento">Desplázame hasta aquí</div>

Aquí hay un ejemplo funcional:

Enlaces a páginas internas

Un sitio web puede estar compuesto de diferentes rutas. Usualmente la página de inicio se encuentra en la raíz del proyecto, y su ruta se considera: /.

Aunque podemos tener estructuras más elaboradas.

En este ejemplo tenemos la siguiente estructura:

📦mi-sitio
┣ 📂primer-nivel
┃ ┣ 📂segundo-nivel
┃ ┃ ┗ 📜index.html
┃ ┗ 📜index.html
┣ 📜index.html
┗ 📜otra-ruta.html

Aquí está el proyecto práctico:

Debemos notar los diferentes archivos y los valores utilizados en los diferentes href.


Introducción a JavaScript para web

Video

Ver en YouTube

Una vez que aprendemos conceptos básicos de HTML y CSS, podemos comenzar a aprender el lenguaje de programación JavaScript. Esto nos ayudará a crear páginas dinámicas.

Por ahora veamos un ejemplo de lo que puede hacer:

Teniendo este código como base

<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mi sitio web</title>
</head>
<body>
<h1>Mi sitio web</h1>
<p>
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure voluptate
officiis ullam eum labore distinctio veritatis, blanditiis natus molestiae
velit laborum, ut aspernatur explicabo est id excepturi amet aliquid
expedita!
</p>
</body>
</html>
Visualización

La forma más sencilla de usarlo en nuestro sitio es por medio de la etiqueta <script>. Hay varias formas de usarla, por ahora sólo escribiremos el código de JavaScript entre dos etiquetas.

Colócalas después del párrafo y antes del cierre de </body>.

<script>
<!-- JavaScript aquí -->
</script>

Ahora agreguemos nuestra primera línea de código:

console.log("Hola mundo");

La página se debería ver exactamente igual que antes, este código sólo imprime un mensaje a consola.

Para ver su efecto debemos abrir las herramientas de desarrollador de nuestro navegador (el atajo de teclado es F12)

Ahora vamos a la pestaña Console o Consola y deberíamos ver el mensaje “Hola mundo”.

Mensaje de consola

De esta manera nos aseguramos que el script está funcionando.

Demostrando su uso

Trata copiando el siguiente código en tu script para ver algunos cambios en tu página:

const p = document.querySelector("p");
p.textContent = "Hola mundo";
p.style.color = "red";
const el = document.createElement("p");
el.textContent = "Creado con programación";
document.body.appendChild(el);
Visualización

En este caso el párrafo que habíamos creado ya no contiene el texto original, ahora tiene el mensaje “Hola mundo” y está de color rojo.

También agregamos un nuevo párrafo que fue creado con programación.

Estos son usos sencillos, pero podemos hacer cosas más interesantes con este lenguaje.

Algunas de las tareas que podemos realizar con él son:

  • Crear y eliminar elementos en nuestro documento
  • Cambiar el contenido de los elementos
  • Cambiar los estilos de los elementos
  • Interactuar con el usuario mediante eventos (como clics, teclas o movimientos del mouse)
  • Recolectar datos mediante formularios
  • Comunicarse con servidores

Entre otras cosas.

Gran parte de los sitios que visitamos en internet usan este lenguaje para darnos la funcionalidad a la que estamos acostumbrados.


Un poco de historia sobre JavaScript

JavaScript es un lenguaje de programación que usamos principalmente para crear interactividad y dinamismo en nuestros sitios web. Nos permite crear comportamientos complejos como interactuar con el usuario, enviar y recibir datos mediante formularios, actualizar el contenido de la página en tiempo real, etc.

El lenguaje fue creado por Brendan Eich en 1995 cuando trabajaba para Netscape, quienes crearon uno de los navegadores más usados cuando comenzó la web. A Eich le tomó 10 días crear la primera versión del lenguaje a la cual llamaron Mocha, luego LiveScript y finalmente JavaScript para tratar de absorber parte de la popularidad del lenguaje Java que era muy sonado en esos días.

Eventualmente el lenguaje se convirtió en una parte fundamental del desarrollo web y fue estandarizado por la Asociación Europea de Fabricantes de Computadoras (ECMA) en 1997.

A lo largo de los años el lenguaje ha sido actualizado para mejorar su funcionalidad y la versión más actual se le conoce como ES6.

Hoy en día existen herramientas que nos ayudan a usar JavaScript más allá del navegador para realizar distintas tareas como la creación de servidores, modificación de archivos, automatización de tareas, etc.


Formas de agregar scripts

Existen dos formas principales de agregar scripts a nuestro proyecto web: Interno y Externo.

Scripts internos

Este método se refiere a usar la etiqueta <script> y colocar el código dentro de ella:

<script>
console.log("Un mensaje en consola");
</script>

Podemos colocar esta etiqueta en diferentes partes del documento, por ejemplo en la cabeza (<head>) o en alguna parte del cuerpo (<body>).

Cuando usamos este método hay que tener cuidado ya que el lugar donde coloquemos el script puede influir en los resultados.

Sobre el orden de ejecución

El código es interpretado por el navegador de arriba hacia abajo, por lo tanto, tratar de manipular un elemento que todavía no existe provocará que el script no se ejecute correctamente.

El siguiente es un script que debería cambiar el mensaje dentro del párrafo de Mi párrafo a Actualizado mediante código.

<body>
<script>
document.querySelector("p").textContent("Actualizado mediante código");
</script>
<p>Mi párrafo</p>
</body>
Visualización

Como puedes ver no surtió efecto. Esto se debe a que el párrafo es creado hasta después del script y por lo tanto no puede ser encontrado.

Usualmente colocamos el script justo antes del cierre del cuerpo </body>. Así nos aseguramos de que todos los demás elementos ya hayan cargado.

<body>
<p>Mi párrafo</p>
<script>
document.querySelector("p").textContent("Actualizado mediante código");
</script>
</body>
Visualización

Sobre el uso en <head>

También podemos colocar el script en la etiqueta <head>, y a pesar de que puede suceder el mismo problema, podemos deshacernos de él fácilmente.

<head>
<script type="module">
document.querySelector("p").textContent("Actualizado mediante código");
</script>
</head>
<body>
<p>Mi párrafo</p>
</body>
Visualización

Scripts externos

La forma más adecuada para agregar scripts una vez que comenzamos a utilizar más código, es por medio de scripts externos. El proceso es similar a ligar un archivo CSS.

Para ello tenemos que crear un nuevo archivo con las extensión .js. Usualmente lo nombramos script.js, aunque puede ser el nombre que queramos.

script.js
document.querySelector("p").textContent = "Actualizado mediante código";

Para ligar este tipo de archivos con nuestro documento HTML debemos usar la misma etiqueta <script>. Sólo que esta vez debemos agregar el atributo src junto con la ruta del archivo.

index.html
<!-- Resto de etiquetas -->
<head>
<script src="script.js" type="module"></script>
</head>
<body>
<p>Mi párrafo</p>
</body>
<!-- <Resto de etiquetas> -->

También debemos utilizar el atributo type="module" para evitar errores en el orden de ejecución.


Variables y constantes

En los diferentes lenguajes de programación existe el concepto de variables y constantes. Son como contenedores que nos ayudan a guardar datos.

Analogía

A mí me gusta verlo como cajas donde guardamos objetos de valor.

Analogía de caja

En JavaScript existen tres maneras de crear estos contenedores:

  • var
  • let
  • const

var

Podemos utilizar la palabra var seguida del nombre que le queramos dar a ese contenedor:

var miNumero;

A esta acción se le conoce como declaración (de variable).

Analogía

Es como etiquetar la caja para reconocerla mejor

Analogía de caja con etiqueta

Por sí solas son como cajas vacías. Tenemos que darles un valor a guardar. Eso lo podemos hacer con la notación = valor;.

var miNumero = 16;

A esta acción se le conoce como asignación (de valor).

Analogía

Es como guardar el valor dentro de la caja.

Analogía de caja con número

Podemos hacerlo en lineas separadas si es necesario.

var miNumero;
miNumero = 16;
Analogía

Es como ir por pasos, primero creamos la caja y la etiquetamos y después metemos el valor a guardar.

Analogía de cajas - Asignación separada

Debemos notar que al hacer la asignación por separado ya no estamos usando la palabra var.

También podemos cambiar el valor guardado a lo largo de diferentes líneas de código.

var miNumero = 16;
miNumero = 8;
miNumero = 4;
Analogía

Es como ir cambiando lo que guardamos dentro de la caja.

Analogía de cajas con cambio de valor

let

Es similar a var aunque tiene algunas características importantes que por ahora no vamos a mencionar.

Se recomienda utilizar let por encima de var para la mayoría de las tareas.

Podemos usarla exactamente como en los ejemplos de arriba.

Declaración y asignación

let miNumero = 16;

Declaración y asignación separada

let miNumero;
miNumero = 16;

Declaración y reasignación

var miNumero = 16;
miNumero = 8;
miNumero = 4;

const

A const debemos asignarle valor en la misma línea donde la declaramos. Además de que no podemos cambiar su valor una vez guardado.

const MI_NUMERO = 16;
Analogía

Me gusta verlo como cajas con seguro

Analogía de caja - Caja con seguro

Crear variables y constantes nos ayuda a manipular los diferentes datos que vamos usando a lo largo de nuestros programas.

Los nombres que les damos nos ayudan a identificar mejor para qué sirven.

En la mayoría de los casos es recomendable usar const o let. Dependiendo de si queremos modificar el valor o no.

TipoValor modificableAsignación obligatoriaPrioridad de uso
const1
let2
var3

El uso de var está relacionado a usos más particulares que veremos en otros artículos, por ahora podemos ignorar que existe.


Nombres válidos en JavaScript

Dependiendo del lenguaje de programación hay diferentes reglas que nos dicen cómo crear los nombres de nuestras variables (y otras entidades).

Estas son algunas de las que encontramos en JavaScript:

  1. Debemos comenzar el nombre con una letra, un guión bajo (_) o un signo de dinero ($).
  • Ejemplos válidos: variable, _variable, $variable.
  • Ejemplos inválidos: 2variable, -variable.
  1. A partir del segundo carácter podemos usar letras, números, guiones bajos o signos de dinero donde queramos.
  • Ejemplos válidos: nombre1, nombre_usuario, $precioTotal.
  1. Ya que es un lenguaje sensible a mayúsculas y minúsculas, miVariable y mivariable serían dos entidades diferentes.

  2. Encontraremos palabras que no podemos usar para nombrar nuestras variables, a estas las llamamos keywords o palabras reservadas.

Esto se debe a que el lenguaje las interpreta para crear algunas instrucciones específicas.

Aquí hay algunas de ellas:

breakcasecatchclassconstcontinuedebuggerdefaultdeletedoelseenumexportextendsfalsefinallyforfunctionifimplementsimportininstanceofinterfaceletnewpackageprivateprotectedpublicreturnstaticsuperswitchthisthrowtruetrytypeofvarvoidwhilewithyield

Convenciones de nombramiento

Existen diferentes notaciones para nombrar entidades, que nos ayudan a mejorar la legibilidad de nuestro código:

  • snake_case: Todo en minúscula, separando palabras con guion bajo
  • camelCase: Sin separación entre palabras, primera palabra en minúscula, palabras subsecuentes empezando con mayúscula
  • PascalCase: Sin separación entre palabras, cada palabra comienza con mayúscula
  • kebab-case: Todo en minúscula, separando palabras con guion medio
  • CONSTANT_CASE: Todo en mayúscula, separando palabras con guion bajo

En base a estas y otras notaciones, cada lenguaje de programación tiene recomendaciones para nombrar variables, constantes, funciones, clases, etc. A estas se les llama convenciones de nombramiento.

Convenciones de nombramiento en JS

ConceptoConvención
VariablecamelCase
ConstanteCONSTANT_CASE
FuncióncamelCase
Propiedad de objetocamelCase
ClasePascalCase
ConstructorPascalCase

Tipos de dato

Los tipos de dato son los diferentes valores que podemos guardar en las variables y constantes, cada uno tiene diferente naturaleza.

Analogía

Volviendo a la analogía de las cajas, son los tipos de cosas que podemos guardar dentro de ellas.

Si conocemos este tipo de juguetes tal vez nos podamos dar una idea:

Juguete de figuras

Este juguete podemos encontrar que las figuras que entran dentro de la caja son cosas como: estrella, hexágono, triángulo, etc.

En las variables y constantes podemos meter cosas como:

  • number
  • string
  • boolean
  • null
  • undefined
  • array
  • object

… entre otros

A estas “cosas” les llamamos tipos de dato

Tipos de dato

number

Se refiere a los números, tanto enteros como números decimales.

let cantidad = 16;
let precio = 0.99;

string

También llamado cadena de caracteres se refiere a texto, como caracteres individuales o mensajes completos.

let miLetra = "L";
let miFrase = "Hola mundo";

boolean

Hace referencia únicamente dos valores: verdadero (true) o falso (false). Nos ayudarán a crear instrucciones condicionales y lógicas.

let meGustaProgramar = true;
let javaScriptEsDificil = false;

null

Es el valor que indica que no existe un valor guardado.

let miVariable = null;
Analogía

Este es un poco abstracto, pero vamos a verlo con una analogía:

En matemáticas el 0 se usa para indicar la ausencia de algún valor o medida.

En JavaScript, se usa null para indicar que no hay ningún dato donde se suponía que sí debería haber.

undefined

Es el valor por defecto que nos da una variable cuando la declaramos pero no le asignamos un valor.

let miVariable;
console.log(miVariable);

Terminal window
undefined
Analogía

Es similar a null aunque en lugar de indicar la ausencia de un dato, indica que ahí jamás ha habido uno.

También es algo complicado de entender en un inicio pero más adelante veremos sus diferencias.

array

Los arreglos o array son colecciones lineales de datos.

let miArreglo = ["A", "B", "C", "D"];

En este caso estamos guardando múltiples datos en un solo lugar.

Analogía

Los arreglos son como casilleros en donde puedes guardar múltiples datos.

En el ejemplo anterior tenemos 4 espacios para guardar datos. El primero guarda “A”, el segundo “B” y así sucesivamente.

En otros lenguajes de programación también se le conoce como list o lista

object

Los objetos también son colecciones de datos aunque no son lineales, no tienen un orden.

let datos = {
usuario: "lolzini",
password: "1234superseguro",
};

En este caso estamos agrupando entradas dentro de la variable datos.

Tenemos dos entradas, cada una de ellas se compone de dos elementos: A la parte izquierda la conocemos como key (llave) y a la parte derecha la conocemos como value (valor).

La primer entrada tiene una llave usuario y un valor lolzini. El segundo tiene una llave password y un valor 1234superseguro.

Los objetos nos ayudan a agrupar datos dándole un contexto a la información para que sea más fácil de entender al momento de manipularla.

Este es un ejemplo sencillo pero pueden llegar a tener estructuras bastante complejas.

Sobre otros tipos de dato

En realidad existen más tipos de dato como symbol y bigint, además de los que encontramos en los diferentes entornos donde usamos JavaScript, aunque por ahora no hablaremos de ellos.


Sobre los objetos

Ahora que sabemos qué tipos de dato existen, hablemos de los objetos (Object).

Ilustración de objeto vacío

Sabemos que están compuestos de una colección de elementos a los cuales llamamos entradas (entries). Y que cada entrada consta de una llave (key) y un valor (value).

Ilustración de entrada de objeto

Sobre la notación punto

let miObjeto = {
usuario: "lolzini",
tiktok: "lolzini_es",
};

En el ejemplo anterior tenemos dos entradas:

  • Una llamada usuario que contiene el valor lolzini
  • Una llamada tiktok que contiene el valor lolzini_es

Para acceder a ellos, debemos utilizar la notación punto.

Si queremos acceder al usuario, haríamos algo como:

miObjeto.usuario;

Podemos mandarlo a la consola para asegurarnos de que estamos creando una instrucción con dicho valor:

console.log(miObjeto.usuario);

Terminal window
lolzini

Aquí encontramos algo curioso: Técnicamente console.log está utilizando la notación punto.

¿Eso quiere decir que console es un objeto? 👀

Si es así, entonces ¿qué tipo de dato es log? 🤔

O mejor aún, ¿de dónde viene console? 😱

Sobre console

Sí, console es un objeto.

Específicamente un objeto global, lo que quiere decir que lo podemos usar en cualquier lugar de nuestro código.

No tenemos que declararlo nosotros porque el navegador lo crea por defecto, así como algunos otros que conoceremos más adelante.

Sobre log

Un tipo de dato que no hemos visto hasta ahora es function (función), de manera simplificada podríamos decir que son acciones o comportamientos, en lugar de datos.

log es la acción que nos permite mandar mensajes a la consola del navegador.


Sobre las funciones

Hablemos de otro tipo de dato: Las funciones, nos ayudan a realizar acciones o comportamientos.

De manera técnica, son una serie de instrucciones agrupadas bajo un nombre.

Esto nos ayuda a utilizarlas en múltiples lugares sin tener que repetir el mismo código.

// Declaración
function miFuncion() {
// Instrucciones aqui
}

A este paso le llamamos declaración de la función, es decir, sólo estamos creando un instructivo de qué debe de hacer.

Analogía

Una forma de ver a las funciones es como máquinas que realizan un procedimiento.

Primero tenemos que diseñar la máquina y decirle lo que va a realizar.

Analogía de definición

Para que haga efecto todo el código que contiene la función debemos usar:

// Declaración
function miFuncion() {
// Instrucciones aqui
}
// Ejecución
miFuncion();

A lo cual le llamamos ejecución de la función.

Analogía

La ejecución es como tomar el diseño de la máquina, crearla y echarla a andar.

Analogía de ejecución

Una función que ya conocemos

Hasta este punto conocemos console.log. Donde log es una función que proviene del objeto console.

Para usarla debemos usar la notación de los paréntesis, y dentro debemos poner nuestro mensaje.

console.log("Mi mensaje");

A lo que va dentro de los paréntesis lo llamamos argumento.

Hay funciones que no nos piden argumentos, mientras que otras los necesitan para funcionar correctamente.

Tal es el caso de console.log().

Una nueva función predefinida

Hay funciones que no sólo nos piden que les demos un valor, también nos regresan un producto a partir de lo que les demos.

Un ejemplo de ello se encuentra dentro del objeto global document, que contiene información y acciones que puede realizar el documento HTML.

Dentro de document existe una función llamada querySelector() que nos ayuda a conseguir los diferentes elementos HTML dentro de él.

Para usarla podemos hacer lo siguiente:

<p>Mi texto</p>
<script>
const elemento = document.querySelector("p");
console.log(elemento);
</script>

Terminal window
<p>Mi texto</p>

Dentro de los paréntesis podemos poner cualquier selector CSS para conseguir el primer elemento de dicha naturaleza.

Como es una función que nos regresa un producto o resultado, lo podemos guardar en una variable para usarlo en otras líneas de código.

Analogía

Analogía de querySelector()

En este caso nos está devolviendo el elemento <p> que se encuentra en el documento.

En otros artículos veremos qué cambios podemos realizar en los diferentes elementos HTML.


¿Cómo seleccionar elementos?

Uno de los conceptos básicos de JavaScript para web es la manipulación de elementos HTML.

Para comenzar a manipular un elemento primero debemos conseguirlo mediante alguno de los siguientes métodos:

getElementById()

Nos ayuda a conseguir un elemento por medio de su identificador (id).

const element = document.getElementById("mi-id");

getElementByClassName()

Nos ayuda a conseguir el primer elemento encontrado en el documento con dicha clase (class).

const element = document.getElementsByClassName("mi-clase");

getElementsByTagName()

Nos ayuda a conseguir todos los elementos que sean de dicho tipo de etiqueta.

const elements = document.getElementsByTagName("div");

querySelector()

Nos ayuda a conseguir el primer elemento en el documento con dicho selector (como el que usaríamos en CSS).

Para conseguir elemento por class

const element = document.querySelector(".mi-clase");

Para conseguir elemento por id

const element = document.querySelector("#mi-id");

Para conseguir elemento por etiqueta (tagName)

const element = document.querySelector("div");

Y cualquier otro tipo de selector tan simple o tan elaborado como sea

const element = document.querySelector(`[data-theme="dark"]`);

querySelectorAll()

Nos ayuda a conseguir todos los elementos que cumplan con el selector proporcionado

const elements = document.querySelectorAll("div");

¿Cómo modificar elementos?

Ahora que sabemos seleccionar elementos HTML mediante JavaScript, podemos acceder y cambiar algunos de sus valores para darle dinamismo a nuestra página.

<p>Mi texto</p>
<script>
const elemento = document.querySelector("p");
</script>

Al tipo de dato que conseguimos al usar alguna de las funciones para seleccionar se le conoce como HTMLElement.

Tiene diferentes propiedades a las que podemos acceder con la notación punto, como por ejemplo:

  • textContent
  • style
  • innerHTML
  • classList

…entre otras.

textContent

Podemos acceder a textContent de cualquier elemento HTML para modificar su contenido de texto:

<p>Mi texto</p>
<script>
const elemento = document.querySelector("p");
elemento.textContent = "Nuevo texto";
</script>
Visualización

style

Podemos acceder al estilo mediante style y cambiar alguna de sus propiedades, por ejemplo color y backgroundColor:

<p>Mi texto</p>
<script>
const elemento = document.querySelector("p");
elemento.style.color = "white";
elemento.style.backgroundColor = "royalblue";
</script>
Visualización

Las propiedades de estilo que son más de una palabra deben ir en camelCase1 para acceder correctamente a ellas.

innerHTML

Podemos cambiar el contenido HTML mediante innerHTML para agregar etiquetas por medio de strings:

<p>Mi texto</p>
<script>
const elemento = document.querySelector("p");
elemento.innerHTML = "Mi <strong>texto</strong> modificado";
</script>
Visualización

classList

Podemos utilizar classList para acceder a diferentes funciones que nos ayudan a agregar y eliminar clases dentro de nuestro elemento.

add

Nos ayuda a agregar clases a nuestro elemento:

<style>
.estilizado {
color: white;
background-color: royalblue;
}
</style>
<p>Mi texto</p>
<script>
const elemento = document.querySelector("p");
elemento.classList.add("estilizado");
</script>
Visualización

remove

Nos ayuda a eliminar clases de nuestro elemento:

<style>
.estilizado {
color: white;
background-color: royalblue;
}
</style>
<p class="estilizado">Mi texto</p>
<script>
const elemento = document.querySelector("p");
elemento.classList.remove("estilizado");
</script>
Visualización

toggle

Nos ayuda a alternar clases en nuestro elemento.

  • Si está presente, la removerá
  • Si no está presente, la agregará

Inicia con la clase y termina sin ella:

<style>
.estilizado {
color: white;
background-color: royalblue;
}
</style>
<p class="estilizado">Mi texto</p>
<script>
const elemento = document.querySelector("p");
elemento.classList.toggle("estilizado");
</script>
Visualización

Inicia sin la clase y termina con ella:

<style>
.estilizado {
color: white;
background-color: royalblue;
}
</style>
<p>Mi texto</p>
<script>
const elemento = document.querySelector("p");
elemento.classList.toggle("estilizado");
</script>
Visualización

Hay muchas otras propiedades de los HTMLElement a las que podemos acceder para modificar su comportamiento con programación. Estas sólo son las más sencillas hasta el momento.

En otros artículos veremos más de ellas para seguir agregando dinamismo a nuestras páginas.


Notas

  1. Convenciones de nombramiento


¿Cómo crear, anexar y borrar elementos?

En algunas ocasiones debemos agregar o borrar elementos HTML de manera dinámica para cambiar el contenido de nuestra página.

JavaScript nos permite todo esto por medio de algunos métodos.

createElement()

Dentro del objeto global document existe la acción createElement() que nos ayuda a crear nuevos elementos HTML.

Dentro del argumento debemos pasar el nombre de la etiqueta que queremos crear, por ejemplo:

<body>
<script>
let miElemento = document.createElement("div");
console.log(miElemento);
</script>
</body>

Dará como resultado:

Terminal window
<div></div>

Ahora podemos manipularlo para agregar algunas propiedades:

// ...
let miElemento = document.createElement("div");
miElemento.textContent = "TEXTO";
miElemento.style.color = "tomato";
console.log(miElemento);
// ...

Ahora tendremos:

Terminal window
<div style="color: tomato;">TEXTO</div>

Ahora que tenemos un nuevo elemento ¿por qué no aparece en nuestra página?

Eso se debe a que JavaScript sólo está creando el elemento, el cual está flotando en el espacio (de memoria del navegador).

Para hacerlo visible debemos anexarlo al documento.

appendChild()

Todos los elementos HTML disponen de la acción appendChild() para anexar otros elementos dentro de sí mismos.

En este caso queremos agregar miElemento a body para que sea visible.

Para acceder al cuerpo podemos usar document.body, y como es un elemento HTML (<body>) podemos usar dicha acción.

Como argumento debemos pasar el elemento que queremos anexar.

// ...
let miElemento = document.createElement("div");
miElemento.textContent = "TEXTO";
miElemento.style.color = "tomato";
document.body.appendChild(miElemento);
console.log(document.body);
// ...

Y esta vez mandamos el cuerpo del documento a consola:

Terminal window
<body><div style="color: tomato;">TEXTO</div></body>

Y sólo hasta este momento podemos ver el elemento que creamos mediante JavaScript.

Visualización

remove()

Si queremos borrar un elemento dentro del documento podemos utilizar la acción remove(), la cual también está disponible en cualquier elemento HTML.

<body>
<p>Mi texto<span> a remover</span></p>
<script>
let elemento = document.querySelector("span");
elemento.remove();
console.log(document.body);
</script>
</body>

En este caso estamos seleccionando el elemento <span> que se encuentra en el documento y luego llamando su función remove() para eliminarlo.

Antes de que se ejecute el script tenemos esto:

Visualización

Y después de su ejecución tenemos esto:

Visualización

Operadores aritméticos

Crear operaciones matemáticas básicas con JavaScript es muy sencillo. Podemos usar los diferentes operadores aritméticos a los que estamos acostumbrados:

  • Suma o adición
  • Resta o sustracción
  • Multiplicación
  • División

Y algunos otros operadores.

Suma o adición

Podemos usar el símbolo + para realizar sumas.

let miCalculo = 2 + 2;

Terminal window
4

Resta o sustracción

Podemos usar el símbolo - para realizar restas.

let miCalculo = 10 - 5;

Terminal window
5

Multiplicación

Podemos usar el símbolo * para realizar multiplicaciones.

let miCalculo = 3 * 3;

Terminal window
9

División

Podemos usar el símbolo / para realizar divisiones.

let miCalculo = 10 / 3;

Terminal window
3.3333333333333335

Módulo o restante

Podemos usar el símbolo % para realizar divisiones y conseguir el restante.

let miCalculo = 10 / 3;

Terminal window
1

Exponencial

Podemos usar los símbolos ** para realizar exponentes.

let miCalculo = 2 ** 3;

Terminal window
8

Agrupaciones

Cuando empezamos a crear operaciones más complejas tendemos a agrupar utilizando ().

let miCalculo = 2 + 3 * (4 - 2 / 3);

Terminal window
12

Precedencia de operadores

El orden en el que se calculan las operaciones es el mismo que conocemos en las matemáticas.

OperadorOrden de cálculo
()1
**2
*, /, %3
+, -4

Operadores de asignación

Habrá algunas ocasiones donde queramos hacer cálculos utilizando el valor dentro de una variable y sobrescribir el valor en esa misma variable.

Por ejemplo:

let resultado = 10;
resultado = resultado + 6;

Terminal window
10
16
Analogía

Es como sacar el valor de la caja, manipularlo y luego guardarlo de nuevo en la misma caja.

Analogía con cajas

Existen formas que utilizan menos código para realizar la misma acción.

Asignación de suma o adición

let resultado = 10;
resultado += 6;

Terminal window
10
16

Asignación de resta o sustracción

let resultado = 10;
resultado -= 5;

Terminal window
10
5

Asignación de Multiplicación

let resultado = 10;
resultado *= 3;

Terminal window
10
30

Asignación de división

let resultado = 10;
resultado /= 5;

Terminal window
10
2

Asignación de restante o módulo

let resultado = 10;
resultado %= 3;

Terminal window
10
1

Asignación de exponente

let resultado = 10;
resultado **= 2;

Terminal window
10
100

Formas de crear strings

En JavaScript tenemos diferentes maneras de asignar cadenas de caracteres o strings.

  • Con comillas simples
  • Con comillas dobles
  • Con comillas invertidas

Con comillas simples

Una de las formas básicas de crear strings es por medio de las comillas simples '. Debemos encerrar nuestro mensaje entre dos de ellas:

let miMensaje = 'Hola mundo';

Terminal window
Hola mundo

Nos ayuda a crear mensajes que contienen comillas dobles (") dentro.

let miMensaje = 'Entonces dijo: "Hola mundo"';

Terminal window
Entonces dijo: "Hola mundo"

Con comillas dobles

La otra forma básica es por medio de las comillas dobles ":

let miMensaje = "Hola mundo";

Terminal window
Hola mundo

Nos ayuda a crear mensajes que contienen comillas simples.

let miMensaje = "¿'tas bien?";

Terminal window
¿'tas bien?

Con comillas invertidas

Al crearlas con acento invertido ` nos ayuda a crear mensajes que puedan contener comillas dobles y comillas simples.

const miMensaje = `Entonces dijo: "¿'ontas?"`;

Terminal window
Entonces dijo: "¿'ontas?"

También nos ayuda a crear plantillas literales, es decir, podemos agregar secciones del mensaje que pueden ser instrucciones en lugar de sólo texto.

let usuario = "Player1";
let miMensaje = `Bienvenido ${usuario}`;

Terminal window
Bienvenido Player1

En este caso el mensaje agrega el nombre del usuario de manera dinámica.

Esto usualmente lo hacemos cuando parte del mensaje podría provenir de otro lugar del código.

Sobre el escapado

Nos puede dar la impresión de que…

  • No se puede usar comillas simples dentro de mensajes creados con comillas simples
  • No podemos usar comillas dobles dentro de mensajes creados con comillas dobles
  • No se pueden usar acentos invertidos dentro de mensajes creados con acentos invertidos

… ya que usarlos dentro del mismo mensaje hará que sean malinterpretados como un cierre de string, pero sí hay una forma de lograrlo.

Existe un concepto llamado escapado de caracteres que nos ayuda a conseguir estos resultados, para ello podemos poner el carácter de diagonal invertida (\) antes del carácter que queramos usar en nuestro mensaje.

De esta manera podemos hacer algo como:

Comillas simples

let miMensajeEscapado = '¿\'ora qué?';

Terminal window
¿'ora qué?

Comillas dobles

let miMensajeEscapado = "Y me dijo: \"¿Esto para qué sirve?\"";

Terminal window
Y me dijo: "¿Esto para qué sirve?"

Acentos invertidos

let miMensajeEscapado = `Este es un acento invertido: \``;

Terminal window
Este es un acento invertido: `

Sobre ciclos o bucles

Dentro de los diferentes lenguajes de programación tenemos estructuras de código que nos ayudan a repetir un procedimiento múltiples veces. A estos les llamamos ciclos o bucles (o loops en inglés).

Representación visual de ciclos

En JavaScript gran parte de las líneas de código que escribimos en nuestro script se ejecutan de manera secuencial. Es decir, en el orden en el que aparecen en el código.

Representación visual de orden de ejecución

Al llegar a un ciclo podemos repetir un conjunto de instrucciones múltiples veces. Usualmente existe una forma de salir de ese ciclo para que el resto de las instrucciones de nuestro programa puedan ser ejecutadas.

Representación visual de ejecución de un programa con ciclos

for

El ciclo de la ilustración anterior se vería algo así:

for (let i = 0; i < 3; i++) {
// Instrucciones
}

La estructura principal es:

for () {
}

Dentro de los paréntesis: va la lógica que le indica cuántas veces debe repetirse.

Dentro de las llaves: van las instrucciones a ejecutar en cada vuelta.

En lenguaje técnico a estas “vueltas” les llamamos iteraciones.

A su vez, la lógica dentro de los paréntesis se divide en tres segmentos:

  1. Declaramos una variable para realizar un conteo. Usualmente comenzamos en cero:
let i = 0;
  1. Decimos qué condición debe cumplirse para que siga dando vueltas:
i < 3;

En este caso, mientras i sea menor a 3 va a seguir iterando

  1. En cada vuelta sumamos 1 al contador:
i++;

Ejemplo

Un ejemplo con el mínimo de instrucciones sería el siguiente:

for (let i = 0; i < 10; i++) {
console.log(i);
}

Lo que resultará en un mensaje a la consola como este:

Terminal window
0
1
2
3
4
5
6
7
8
9

for...of

Nos sirve para iterar colecciones de datos que vienen en forma de arreglo (Array).

Es decir, si tuviéramos algo como:

const misMensajes = ["Hola", "¿Cómo estás?", "¿Qué tal tu día?"];

Podríamos usar esta estructura para acceder a cada uno de los mensajes y hacer algo con ellos.

for () {
}

Lo único que cambia es lo que va dentro de los paréntesis. Podríamos verlo en dos partes:

  1. La declaración de una constante que guarda el dato actual
const mensaje
  1. La colección de datos que queremos iterar
of misMensajes

Ejemplo

const misMensajes = ["Hola", "¿Cómo estás?", "¿Qué tal tu día?"];
for (const mensaje of misMensajes) {
console.log(mensaje);
}

Terminal window
Hola
¿Cómo estás?
¿Qué tal tu día?

for...in

Nos sirve para iterar colecciones de datos que vienen en forma de objeto (Object).

Si tenemos algo como:

const miObjeto = {
usuario: "lolzini",
actividad: "programador",
};

Podemos acceder a la llave (key) de cada propiedad:

for (const llave in miObjeto) {
console.log(llave);
}

Terminal window
usuario
actividad

Y el hecho de que tengamos la llave significa que también podemos acceder al valor, de manera que podemos crear un mensaje más completo:

for (const llave in miObjeto) {
console.log(llave + ": " + miObjeto[llave]);
}

Terminal window
usuario: lolzini
actividad: programador

while

Otra de las formas de crear ciclos es usando while, la estructura es mucho más simple:

while () {
}

Dentro de los paréntesis: va la condición que debe cumplirse para que se siga repitiendo.

Dentro de las llaves: van las instrucciones a repetir.

Ejemplo

Este ciclo imprime los números del 0 al 4.

let i = 0;
while (i < 5) {
console.log(i);
i++;
}

Terminal window
0
1
2
3
4

Advertencias de uso

Debemos tener cuidado con este tipo de ciclos. Si no colocamos la lógica para que el ciclo se detenga, estaremos creando un programa que repita instrucciones de manera indefinida.

Y posiblemente se detendrá por algún error de memoria.

En otras palabras, detener el ciclo es un poco “más manual”, ya que debemos crear las variables y la lógica que hará que la condición deje de cumplirse. A pesar de eso, nos permite ser un poco más creativos con dicha lógica.

do...while

Es similar a while con la diferencia de que ejecutará las instrucciones por lo menos una vez.

La estructura se ve de la siguiente manera:

do {
} while ();

En este caso podemos ver que las llaves aparecen antes que los paréntesis. Esto nos puede ayudar a recordar que las instrucciones se ejecutan una vez y en los ciclos siguientes verifica la condición para repetir o detener el ciclo.

let i = 0;
do {
console.log(i);
i++;
} while (i < 5);

Terminal window
0
1
2
3
4

Resumiendo

EstructuraUso
forIteración arbitraria
for...ofIteración con arreglos
for...inIteración con objetos
whileIteración arbitraria
do...whileIteración arbitraria con por lo menos una ejecución

Sobre otras formas de crear ciclos

A pesar de que hay otras formas de crear este tipo de comportamientos en nuestros programas o aplicaciones, las que aprendimos en este artículo suelen ser las primeras en aparecer en la mayoría de planes de estudio.

Veremos el resto en otros artículos, por ahora solo vale la pena mencionarlas:

  • Funciones de alto orden
  • Funciones recursivas

Métodos de entrada de datos

En HTML, la manera de conseguir información del usuario es por medio de input tags o etiquetas de entrada de datos.

Existen varias etiquetas con este propósito.

<label>

Usar un método de entrada por sí solo puede ser un poco confuso ya que no tiene un texto que indique de qué se trata el campo.

Visualización

Normalmente lo utilizamos junto con la etiqueta <label>. La cual nos ayuda a crear un texto que describe la información a introducir.

Cuando hacemos esto debemos de agregar el atributo for dentro de <label> y un identificador id dentro de <input>.

Ambas deben tener el mismo valor para relacionarlas correctamente.

<label for="name">Nombre:</label>
<input type="text" id="name" />
Visualización

De manera alternativa, si no queremos ligarlas explícitamente con dichos atributos, podemos meter <input> dentro de <label>.

<label>
Nombre:
<input type="text" />
</label>
Visualización

De esta manera podemos obtener el mismo resultado visual, pero con menos código.

<input>

La etiqueta esencial es <input> que nos ofrece una gran variedad de métodos de entrada de datos.

<input />

Se usa junto con el atributo type o tipo, que nos ayuda a cambiar el tipo de entrada de dato.

Existen muchos diferentes:

<input type="text" />
<input type="email" />
<input type="password" />
<input type="number" />
<input type="radio" />
<input type="checkbox" />
<input type="date" />
<input type="submit" />

text, email y password

El tipo text nos ayuda a mostrar una barra donde el usuario puede insertar texto.

<label>
Texto:
<input type="text" />
</label>
Visualización

El tipo email es similar, sólo que espera datos con el formato de correo electrónico: correo@ejemplo.com.

<label>
Email:
<input type="email" />
</label>
Visualización

El tipo password oculta lo que se escribe en el campo.

<label>
Contraseña:
<input type="password" />
</label>
Visualización

number

Nos ayuda a crear un campo donde sólo se pueden introducir números

<label>
Número:
<input type="number" />
</label>
Visualización

radio

Nos ayuda a crear conjuntos de opciones donde sólo se puede seleccionar un elemento.

Esta entrada es especial porque debemos agregar el mismo atributo name a todas las opciones para que sólo se pueda seleccionar una a la vez.

<label>
Opción 1:
<input type="radio" name="ejemplo" />
</label>
<label>
Opción 2:
<input type="radio" name="ejemplo" />
</label>
<label>
Opción 3:
<input type="radio" name="ejemplo" />
</label>
Visualización

checkbox

Nos ayuda a crear una casilla de verificación para poder seleccionar diferentes opciones.

<label>
Opción 1:
<input type="checkbox" name="ejemplo" />
</label>
<label>
Opción 2:
<input type="checkbox" name="ejemplo" />
</label>
<label>
Opción 3:
<input type="checkbox" name="ejemplo" />
</label>
Visualización

date

Nos ayuda a crear un campo donde podemos seleccionar una fecha.

<label>
Fecha:
<input type="date" />
</label>
Visualización

submit

Nos ayuda a crear un botón para enviar nuestro formulario (<form>).

Por defecto, el mensaje que aparece será “Submit”, que significa “Enviar” en inglés.

<input type="submit" />

Para cambiar eso, podemos usar el atributo value con el mensaje que queramos poner.

Visualización
<input type="submit" value="Da clic para enviar" />
Visualización

<textarea>

Esta etiqueta nos ayuda a crear campos de texto que tengan más de un renglón.

<textarea>Texto por defecto</textarea>
Visualización

<select> y <option>

Nos ayudan a crear menús desplegables con diferentes opciones.

<select>
<option value="opcion-a">Opción A</option>
<option value="opcion-b">Opción B</option>
<option value="opcion-c">Opción C</option>
</select>
Visualización

Argumentos y parámetros

Cuando creamos funciones, podemos agregar código para que puedan usar datos extras al momento de ser ejecutadas.

Debemos agregar cada uno de estos elementos dentro de los paréntesis.

Cuando los agregamos en la definición los llamamos parámetros.

Son como valores en blanco que van a ser manipulados por las instrucciones dentro de la función.

definición
function miFuncion(p1, p2) {
const suma = p1 + p2;
console.log(suma);
}

En este caso p1 y p2.

Analogía

Recordando la analogía de las funciones, se vería algo así:

Ilustración sobre los parámetros

Cuando ejecutamos las funciones, a los valores que pasamos dentro de los paréntesis los llamamos argumentos. Es decir, estos son los valores que ponemos en los espacios en blanco.

ejecución
miFuncion(10, 6);

En este caso 10 y 6.

Analogía

Recordando la analogía de las funciones, se vería algo así:

Ilustración sobre los argumentos

Podemos poner tantos parámetros como queramos, y también deberíamos usar el mismo número de argumentos en cada ejecución.

INFO

Más adelante aprenderemos sobre los valores por defecto, que nos ayudan a no tener que poner algunos argumentos.


Valores por defecto

Al crear funciones podemos agregar parámetros, que son elementos que nos ayudan a manipular datos al momento de ejecutarlas.

function potenciarNumero(p1, p2) {
const resultado = p1 ** p2;
console.log(resultado);
}

Cuando las ejecutamos usualmente debemos poner el mismo número de argumentos.

potenciarNumero(2, 2);

Terminal window
4

Podemos ponerle valores por defecto a los diferentes argumentos para ahorrarnos un poco de código.

function potenciarNumero(p1, p2 = 2) {
const resultado = p1 ** p2;
console.log(resultado);
}

Al agregar un valor predefinido (= 2) ya no tenemos que usar un segundo argumento si es que lo queremos elevar al cuadrado.

potenciarNumero(3);

Terminal window
9

De igual forma podemos seguir usando la función con un segundo argumento.

En este caso si queremos elevar a una potencia diferente de 2 podemos hacer:

potenciarNumero(2, 4);

Terminal window
16

Precauciones

Cuando agregamos valores por defecto, es mejor usarlos en los parámetros que se encuentren al final.

Un mal uso de ellos sería crear una función como la siguiente:

function miFuncion(p1 = "a", p2, p3) {
console.log(p1 + p2 + p3);
}

Aquí definimos un valor por defecto para p1 tendríamos que pasarlo como undefined para obtener el valor por defecto.

miFuncion(undefined, "b", "c");

Terminal window
abc

Por lo que se pierde el propósito de usar valores por defecto, que es ahorrarnos argumentos.

Si lo hacemos con los valores por defecto en los últimos parámetros podemos aprovecharlos como se debe:

function miFuncion(p1, p2, p3 = "c") {
console.log(p1 + p2 + p3);
}

miFuncion("a", "b");

Terminal window
abc

Sobre parámetros y valores de retorno

En un artículo anterior vimos que las funciones nos permiten agrupar un comportamiento bajo un nombre.

Por ejemplo:

declaración
function saludoAConsola() {
console.log("Hola");
}

De esta manera podemos usar dicho código una y otra vez utilizando la notación:

ejecución
saludoAConsola();

resultado
Hola

También vimos que podemos crearlas para darles información extra al momento de ejecutarlas:

declaración
function saludoAPersona(persona) {
console.log("Hola " + persona);
}

De esta manera podemos darles diferentes valores:

saludoAPersona("mundo");
saludoAPersona("lolzini");

resultado
Hola mundo
Hola lolzini

Sobre el valor de retorno

Cuando creamos una función podemos obtener un dato de ellas para usarlo en otras líneas de código. A este dato le llamamos valor de retorno (return value).

Para hacerlo, debemos agregar la instrucción return seguido del valor que queremos devolverle al usuario de la función.

function miSuma(p1, p2) {
const suma = p1 + p2;
return suma;
}

Ahora cuando la ejecutemos, podemos asignar dicho valor a una variable y usar ese resultado en cualquier otro lado de nuestro código.

let resultado = miSuma(10, 6);
console.log(resultado);
resultado = miSuma(resultado, 4);
console.log(resultado);

Terminal window
16
20
Analogía

Ilustración sobre valor de retorno

Esto nos da la ventaja de crear comportamientos predecibles donde podemos variar los datos introducidos para generar resultados al momento en lugar de resultados predefinidos.

Aquí hay una tabla de las diferentes combinaciones entre funciones con/sin parámetros y con/sin valores de retorno.

Sin parámetrosCon parámetros
Sin valor de retornoProcedimientos simples: Realizan una acción sin recibir parámetros ni devolver valores.Procedimientos parametrizados: Realizan una acción específica y aceptan parámetros, pero no devuelven valores.
Con valor de retornoFunciones básicas: Ejecutan una tarea y devuelven un resultado, pero no aceptan parámetros.Programación funcional: Ejecutan una tarea, aceptan parámetros y devuelven un resultado.

¿Cómo conseguir información de formularios?

Habrá casos en los que debemos conseguir información del usuario. Para ello utilizamos los métodos de entrada.

La forma más rápida de conseguir todos los datos dentro de un formulario es la siguiente:

  • Encerramos todos los campos dentro de un <form>
  • Identificamos cada uno de los campos con un atributo name (esto es obligatorio)
  • Colocamos un botón tipo submit.
AVISO

Todos los campos deben tener un name distinto

index.html
<form id="formulario">
<label for="username">
<span>Usuario</span>
<input type="text" name="username" />
</label>
<label for="password">
<span>Contraseña</span>
<input type="password" name="password" />
</label>
<button type="submit">Enviar</button>
</form>

Para el script debemos:

  • Obtener el elemento del formulario
const form = document.body.querySelector("#formulario");
  • Agregar un evento de tipo submit
const form = document.body.querySelector("#formulario");
form.addEventListener("submit", (event) => {
});
  • Tomar el evento de la función y llamar preventDefault()
const form = document.body.querySelector("#formulario");
form.addEventListener("submit", (event) => {
event.preventDefault();
});
  • Creamos una nueva instancia de FormData con el elemento que emitió el evento
const form = document.body.querySelector("#formulario");
form.addEventListener("submit", (event) => {
event.preventDefault();
const formData = new FormData(event.target);
});
  • Y cambiar convertir el resultado en objeto
const form = document.body.querySelector("#formulario");
form.addEventListener("submit", (event) => {
event.preventDefault();
const formData = new FormData(event.target);
const data = Object.fromEntries(formData.entries());
console.log(data);
});

Ahora podemos acceder a la información que el usuario pasó a los campos del formulario.

Si pasamos lolzini a Usuario y 123 a Contraseña vamos a obtener un objeto de la siguiente forma:

{
username: "lolzini",
password: "123"
}

En la siguiente sección está el ejemplo práctico. Podemos cambiar los valores o usar los que están por defecto y darle Enviar.

En la parte inferior está la consola que mostrará los datos en un objeto.


Entidades HTML

Cuando usamos HTML puede que se nos presente un escenario donde tenemos que utilizar caracteres como < o > dentro del contenido.

Si intentamos poner estos (y algunos otros símbolos) puede que provoquen errores en el navegador, ya que son símbolos usados para la creación de etiquetas (<nombre>) y otros comportamientos específicos de HTML.

<p><Nada por aquí></p>
Visualización

En estos casos debemos utilizar una alternativa para colocar este tipo de caracteres a los que llamamos entidades.

Hay dos formas en las cuales podemos usarlas

Entidades por nombre

La sintaxis se ve de la siguiente manera: &nombre;.

Para el caso de < podemos usar &lt; donde lt viene de less than (en inglés) o menor que (en español).

Para el caso de > podemos usar &gt donde gt viene de greater than (en inglés) o mayor que (en español).

<p>&lt;Nada por aquí&gt;</p>
Visualización

Sólo algunos caracteres pueden ser usados mediante su nombre, para el resto debemos usar el segundo método.

Entidades por número

La sintaxis se ve de la siguiente manera: &#número;. Todas las entidades tienen un número correspondiente.

Para el caso de < podemos usar &#60;.

Para el caso de > podemos usar &#62;.

<p>&#60;Nada por aquí&#62;</p>
Visualización

De esta manera el contenido puede ser mostrado correctamente.

Existen listas donde podemos ver los respectivos nombres y números de cada entidad que podemos utilizar, como la que encontramos en FreeFormatter1

Notas

  1. Lista de entidades (sólo inglés)


Diferencia entre input submit y button submit

Existen dos elementos que nos pueden ayudar a enviar un formulario: input y button, ambos con el atributo type="submit".

Por defecto <input type="submit"> muestra el texto “Submit” que significa “Enviar” en inglés.

Visualización

Ya que <input> es un elemento vacío o de auto-cierre, la manera en la podemos cambiar el texto del botón es mediante el atributo value.

<input type="submit" value="Enviar" />
Visualización

La ventaja de <button> es que puede tener contenido.

<button type="submit">Enviar</button>
Visualización

Gracias a esto, podemos crear botones con una apariencia más compleja en lugar de sólo texto.

Por ejemplo, podemos poner un ícono SVG:

<button type="submit">
<span>Enviar</span>
<svg
xmlns="http://www.w3.org/2000/svg"
width="12"
height="12"
viewBox="0 0 24 24"
fill="none"
stroke="black"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="lucide lucide-send-horizontal"
>
<path d="m3 3 3 9-3 9 19-9Z" />
<path d="M6 12h16" />
</svg>
</button>
Visualización

Cómo seccionar una lista de opciones

Cuando utilizamos listas desplegables con <select> podemos usar la etiqueta <optgroup> para seccionar la lista mostrada.

En este ejemplo creamos una lista de diversas mascotas, seccionadas por razas:

<select>
<option>Selecciona una opción</option>
<optgroup label="Perros">
<option value="labrador-retriever">Labrador Retriever</option>
<option value="golden-retriever">Golden Retriever</option>
<option value="chihuahua">Chihuahua</option>
</optgroup>
<optgroup label="Gatos">
<option value="siames">Siamés</option>
<option value="persa">Persa</option>
<option value="british-shorthair">British Shorthair</option>
</optgroup>
<optgroup label="Peces">
<option value="goldfish">Goldfish</option>
<option value="betta">Betta</option>
<option value="guppy">Guppy</option>
</optgroup>
</select>
Visualización
INFO

Recordemos que es importante colocar el atributo value para conseguir un valor real al momento de manipular con JavaScript.


Formas de centrar contenido

🎬 Video

Ver en YouTube

Saber centrar contenido en CSS es de los conocimientos más útiles a la hora de crear nuestros proyectos.

Existen distintos métodos, tanto para centrar horizontalmente como para hacerlo verticalmente.

Centrar texto

Podemos centrar el texto de cualquier etiqueta que use nivel de bloque con la regla text-align: center;.

Centrar contenido

Alineación horizontal

Podemos centrar el contenido de cualquier etiqueta que use nivel de bloque con la regla margin: 0 auto;.

El valor importante es auto como segundo parámetro ya que afecta los costados (izquierda y derecha) con dicho valor.

Además de que el ancho (width) del contenido debe de ser menor al 100% del contenedor.

Alineación vertical

Hoy en día tiene gran soporte1 la alineación vertical en elementos a nivel de bloque usando align-content: center.

Usando flexbox

La manera más actual (en términos de CSS) y más conveniente suele llegar a ser flexbox.

Alineación horizontal

Debemos cambiar la propiedad display para que use el valor flex.

Debemos agregar la propiedad justify-content con el valor center para alinear al centro en el eje horizontal.

Alineación vertical

Debemos cambiar la propiedad display para que use el valor flex.

Debemos agregar la propiedad align-items con el valor center para alinear al centro en el eje vertical.

En este caso agregamos una altura (height) y un borde (border) para que se vea claramente el centrado vertical.

Podemos usar ambos para alinear horizontal y verticalmente.

Usando grid

Debemos cambiar la propiedad display para que use el valor grid.

Debemos agregar la propiedad place-items con el valor center para alinear al centro tanto en el eje horizontal como en el vertical.

Usando position

Alineación horizontal

Debemos cambiar la propiedad position para que use el valor absolute.

Debemos agregar la propiedad left con el valor 50% para llevar el costado izquierdo de nuestro elemento al centro.

Y debemos mover el eje del elemento para centrarlo correctamente. Para hacerlo podemos usar transform con el valor translateX(-50%).

Alineación vertical

Debemos cambiar la propiedad position para que use el valor absolute.

Debemos agregar la propiedad top con el valor 50% para llevar el borde superior de nuestro elemento al centro.

Y debemos mover el eje del elemento para centrarlo correctamente. Para hacerlo podemos usar transform con el valor translateY(-50%).

Podemos usar ambos para alinear horizontal y verticalmente con el valor: transform: translate(-50%, -50%);

Usando tablas

Debemos crear un contenedor para modificar la alineación horizontal.

Debemos cambiar la propiedad display para que use el valor table.

Para centrar el contenido horizontalmente debemos agregar text-align: center;.

A la etiqueta dentro del contenedor debemos agregarle display: table-cell y vertical-align: middle; para alinear verticalmente.

<center>

En versiones anteriores de HTML se podía utilizar la etiqueta <center>:

<center>Contenido</center>
CUIDADO

En HTML5 su uso está desalentado2. Se recomienda usar CSS en su lugar.

align="center"

En algunos elementos podemos usar align="center" para centrar el contenido:

<p align="center">Contenido</p>
CUIDADO

En HTML5 su uso está desalentado. Se recomienda usar CSS en su lugar.

Y hacer esto no funciona:

<div center="true">Contenido</div>

Notas

  1. align-content in block layout - Can I Use?

  2. Documentación sobre <center>


Formas avanzadas de agregar estilos

Existen algunas maneras básicas de agregar estilos1 a nuestros proyectos web.

Conforme creamos proyectos más avanzados debemos usar algunas características extra:

  • Disponer de varias hojas de estilos
  • Importarlas en un orden particular
  • Aplicarlas sólo en ciertos escenarios.

@import

Dentro de cualquier hoja de estilo podemos importar otras hojas utilizando la notación @import "RUTA".

Donde RUTA es la dirección donde se encuentra la otra hoja de estilos que queremos usar.

Por ejemplo, teniendo la siguiente estructura de proyecto:

📦mi-pagina
┣ 📜desktop.css
┣ 📜index.html
┣ 📜main.css
┣ 📜style.css
┗ 📜utils.css

Podríamos hacer algo como lo siguiente:

index.html
<head>
<!-- Más etiquetas -->
<link rel="stylesheet" type="text/css" href="./style.css" />
</head>

style.css
@import "./main.css";
@import "./utils.css";
@import "./desktop.css";

De esta manera podemos controlar el orden de importación.

E inclusive agregar media queries para que sólo se activen en ciertos escenarios:

style.css
@import "./main.css";
@import "./utils.css";
@import "./desktop.css" screen and (min-width: 1024px);

Algo que debemos tener en cuenta es que este tipo de importaciones siempre deben aparecer hasta arriba en nuestra hoja de estilos.

Dentro de la cabeza de nuestro documento (<head>) podemos utilizar múltiples etiquetas <link> en el orden en el que deseemos que sean cargadas.

index.html
<head>
<!-- Más etiquetas -->
<link rel="stylesheet" type="text/css" href="./main.css" />
<link rel="stylesheet" type="text/css" href="./utils.css" />
<link rel="stylesheet" type="text/css" href="./desktop.css" />
</head>

Adicionalmente podemos utilizar el atributo media para agregar media queries y controlar los escenarios en los que será usada dicha hoja.

index.html
<head>
<!-- Más etiquetas -->
<link rel="stylesheet" type="text/css" href="./main.css" />
<link rel="stylesheet" type="text/css" href="./utils.css" />
<link
rel="stylesheet"
type="text/css"
href="./desktop.css"
media="screen and (max-width: 1024px)"
/>
</head>

Notas

  1. Formas de agregar estilos


¿Cómo agregar modo oscuro?

La manera más sencilla de agregar modo oscuro a nuestro sitio web es por medio de un atributo extra en el elemento <html>.

El primer paso es agregarlo con el valor del tema por defecto:

<html data-theme="light">
<!-- ... -->
</html>

Alternativa

Alternativamente podemos usar una clase:

<html class="light">
<!-- ... -->
</html>

Debemos tener en cuenta que los scripts deben cambiar respectivamente para manipular clases en lugar de data-attributes.

Esto nos ayudará a tener un lugar para guardar el tema actual y poder cambiar su valor mediante JavaScript.

Sobre las preferencias del usuario

Hoy en día podemos obtener el tema preferido del usuario mediante una media query llamada prefers-color-scheme:

// Consigue la preferencia del usuario
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)");
// Aplica dicha preferencia
if (prefersDark) {
document.documentElement.dataset.theme = "dark";
}
// Actualiza el tema cuando cambie la preferencia mediante el sistema operativo
prefersDark.addEventListener("change", (e) => {
if (e.matches) {
document.documentElement.dataset.theme = "dark";
} else {
document.documentElement.dataset.theme = "light";
}
});

De esta podemos conseguir el valor inicial y hacer el cambio correspondiente si el usuario cambia el tema mediante su sistema operativo.

Sobre la interfaz de usuario

También debemos agregar una manera de que el usuario pueda elegir dentro de la página. Para ello vamos a agregar un botón y un script:

<button id="theme-button">Cambiar tema</button>

// Obtenemos el botón
const themeButton = document.querySelector("#theme-button");
// Cambiamos el tema cuando se haga clic en el botón
themeButton.addEventListener("click", (e) => {
if (document.documentElement.dataset.theme === "light") {
document.documentElement.dataset.theme = "dark";
} else {
document.documentElement.dataset.theme = "light";
}
});

Visualización

Ahora que tenemos la funcionalidad básica podemos agregar los estilos:

html {
background-color: beige;
color: darkslateblue;
}
[data-theme="dark"] {
background-color: #3e3e3e;
color: #fafafa;
}

Visualización

Y cambiar cualquier otro elemento utilizando los selectores necesarios:

button {
background-color: tomato;
color: white;
}
[data-theme="dark"] button {
background-color: slateblue;
color: white;
}

Visualización

Sobre la extensibilidad

De esta manera podemos crear diferentes temas. Por ejemplo, si queremos agregar un tema llamado dark-blue sólo tenemos que agregar los estilos correspondientes:

/* ... */
[data-theme="dark-blue"] {
background-color: #002244;
color: #fafafa;
}

Y crear la interfaz de usuario necesaria. Si es que tenemos más de dos temas lo mejor sería usar un <select> en lugar de un <button>:

<select id="theme-selector">
<option value="light">Claro</option>
<option value="dark">Oscuro</option>
<option value="dark-blue">Azul oscuro</option>
</select>

// Obtenemos el selector
const themeSelector = document.querySelector("#theme-selector");
// Cambia el atributo de tema cuando cambie la opción
themeSelector.addEventListener("change", (e) => {
document.documentElement.dataset.theme = e.target.value;
});

También tenemos que asegurarnos de que al cargar la página la opción por defecto sea correcta. Podemos hacerlo de la siguiente manera:

// Itera sobre las opciones y le da el atributo selected al que coincida con el tema actual
for (const option of themeSelector.options) {
if (option.value === document.documentElement.dataset.theme) {
option.selected = true;
}
}
Visualización

Sobre la preservación del tema

Todavía nos falta manejar algunos casos:

  • Cuando el usuario tiene un tema en nuestra página distinto al de su navegador/sistema operativo.
  • Cuando hay más de dos temas disponibles y el usuario elige uno diferente al claro u oscuro.

Para ello podemos guardar la preferencia del usuario en localStorage:

themeSelector.addEventListener("change", (e) => {
const selectedTheme = e.target.value;
localStorage.setItem("theme", selectedTheme);
document.documentElement.dataset.theme = selectedTheme;
});

Y cargarla donde sea necesario:

const userTheme = localStorage.getItem("theme");
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)");
if (!userTheme && prefersDark.matches) {
document.documentElement.dataset.theme = "dark";
}
if (userTheme) {
document.documentElement.dataset.theme = userTheme;
}
// ...

Código final

El código final se vería algo así:

HTML
<html data-theme="light">
<!-- ... -->
<body>
<select id="theme-selector">
<option value="light">Claro</option>
<option value="dark">Oscuro</option>
<option value="dark-blue">Azul oscuro</option>
</select>
</body>
</html>

JavaScript
const userTheme = localStorage.getItem("theme");
// Consigue la preferencia del usuario
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)");
// Aplica dicha preferencia
if (!userTheme && prefersDark.matches) {
document.documentElement.dataset.theme = "dark";
}
if (userTheme) {
document.documentElement.dataset.theme = userTheme;
}
// Actualiza el tema cuando cambie la preferencia mediante el sistema operativo
prefersDark.addEventListener("change", (e) => {
if (e.matches) {
document.documentElement.dataset.theme = "dark";
} else {
document.documentElement.dataset.theme = "light";
}
});
const themeSelector = document.querySelector("#theme-selector");
// Se asegura de que la opción por defecto sea correcta
for (const option of themeSelector.options) {
if (option.value === document.documentElement.dataset.theme) {
option.selected = true;
}
}
// Cambia el atributo de tema cuando cambie la opción
themeSelector.addEventListener("change", (e) => {
const selectedTheme = e.target.value;
localStorage.setItem("theme", selectedTheme);
document.documentElement.dataset.theme = selectedTheme;
});

CSS
html {
background-color: beige;
color: darkslateblue;
}
[data-theme="dark"] {
background-color: #3e3e3e;
color: #fafafa;
}
button {
background-color: tomato;
color: white;
}
[data-theme="dark"] button {
background-color: darkblue;
color: antiquewhite;
}
[data-theme="dark-blue"] {
background-color: #002244;
color: #fafafa;
}

¿Qué son los niveles de abstracción?

En programación, el término nivel de abstracción se refiere al parecido que tiene un lenguaje de programación con un lenguaje natural.

Ilustración lenguajes naturales y lenguajes de programación

A mayor nivel de abstracción, el lenguaje será más parecido a un lenguaje natural. Lo cual lo hace más comprensible para los humanos.

A menor nivel de abstracción, el lenguaje será más parecido al lenguaje máquina. Lo cual lo hace más comprensible para las computadoras.

Los más común es querer alcanzar la sintaxis del idioma inglés. Aunque hay lenguajes de programación que son más visuales, como Scratch.

Ilustración de niveles de abstracción

Ventajas y desventajas

Cada tipo de lenguaje tiene sus pros y sus contras:

NivelVentajasDesventajas
Alto
  • Mejoran la velocidad de desarrollo
  • Aumentan la claridad el código
  • Es más fácil de mantener
  • Menor control sobre los recursos, como la memoria
  • Menos eficientes
Bajo
  • Mayor control sobre el hardware
  • Programas más rápidos y eficientes
  • Difíciles de aprender y usar
  • Propenso a errores debido a su complejidad

Ejemplo

Aquí hay dos ejemplos de código para imprimir 10 números en la consola.

Lenguaje de alto nivel (Python):

for i in range(10):
print(i)

Lenguaje de bajo nivel (Ensamblador):

section .data
msg db '%d', 0
section .bss
res resb 1
section .text
global _start
_start:
mov ecx, 0 ; Inicializar contador a 0
print_loop:
mov eax, ecx ; Mover el valor de contador a eax
add eax, '0' ; Convertir a carácter
mov [res], eax ; Almacenar en res
mov eax, 4 ; Llamada al sistema para escribir
mov ebx, 1 ; File descriptor (stdout)
mov edx, 1 ; Número de bytes a escribir
int 0x80 ; Interrupción del sistema
inc ecx ; Incrementar contador
cmp ecx, 10 ; Comparar con 10
jl print_loop ; Si es menor, saltar a print_loop
mov eax, 1 ; Llamada al sistema para salir
xor ebx, ebx ; Estado de salida
int 0x80 ; Interrupción del sistema

Lista de lenguajes

Aquí hay una lista de los lenguajes más conocidos y su nivel:

Lenguaje de ProgramaciónNivel
Assembler (Ensamblador)Bajo Nivel
CBajo Nivel / Medio
C++Alto Nivel
JavaAlto Nivel
PythonAlto Nivel
JavaScriptAlto Nivel
RubyAlto Nivel
PHPAlto Nivel
C#Alto Nivel
SwiftAlto Nivel
GoAlto Nivel
RustAlto Nivel
KotlinAlto Nivel
TypeScriptAlto Nivel
PerlAlto Nivel
HaskellAlto Nivel
ScalaAlto Nivel
DartAlto Nivel

Una pantalla oscura llena de letras

Vemos lo que hacemos

¿Cuál es tu programa favorito dentro de la computadora?

Quizás es el navegador, donde puedes explorar un inmenso mar de información y contenido. O una aplicación para dibujar o hacer videos. O algún juego que tengas instalado.

Sea el que sea, lo más seguro es que estés acostumbrado a ver botones, menús, y otros elementos visuales con los que interactúas para realizar acciones dentro de ese programa.

Ilustración

A esta forma de interactuar con la computadora la conocemos como GUI, por Graphical User Interface o interfaz gráfica de usuario.

Pero no siempre fue así…

Antes del GUI: El mundo del texto

Antes de que las GUIs se popularizaran, interactuar con las computadoras era como resolver un rompecabezas de palabras. Los usuarios tenían que escribir comandos en texto, siguiendo una sintaxis específica.

Esto se hacía en lo que se llama una interfaz de línea de comandos o CLI(Command Line Interface).

Ejemplo del CLI

Imagina tener que recordar y teclear comandos precisos para abrir un archivo, copiarlo o jugar un juego. Era un proceso que requería conocimiento y precisión, algo así como aprender un nuevo idioma solo para hablar con tu computadora.

La revolución del GUI

Todo cambió con la llegada de las GUIs. En lugar de memorizar y escribir comandos, los usuarios podían simplemente hacer clic en íconos y menús.

Esto hizo que las computadoras fueran mucho más accesibles y fáciles de usar para todos, no solo para los expertos en informática.

Las GUIs no solo hicieron la vida más fácil, sino que también abrieron la puerta a un sinfín de posibilidades creativas. Los diseñadores gráficos, editores de video, arquitectos y muchos otros profesionales encontraron en la GUI una herramienta poderosa para su trabajo.

Ilustración

¿Cómo funciona un GUI?

Un GUI funciona mostrándote representaciones gráficas de los comandos que tu computadora puede realizar.

Por ejemplo, en lugar de escribir “abrir archivo”, haces clic en un ícono que parece una carpeta. Detrás de cada elemento visual, hay líneas de código que le dicen a la computadora qué hacer.

Además, los GUIs son interactivos y responden a tus acciones. Puedes arrastrar y soltar elementos, usar barras de desplazamiento para ver más contenido, y recibir respuestas visuales inmediatas de tus acciones, lo que hace que la experiencia de usar una computadora sea más intuitiva y agradable.

Comparación entre navegar con CLI y GUI

Para entrar en los diferentes directorios o carpetas con CLI debemos usar el comando cd [RUTA]. Para listar todo el contenido de dicho directorio, debemos usar dir.

Ejemplo de navegación en CLI

Mientras que en GUI, podemos abrir el Explorador de Archivos y navegar con clics y ver todos los archivos representados mediante íconos.

Ejemplo de navegación en GUI

El futuro de la interacción con computadoras

Hoy en día, las GUIs son solo una parte de cómo interactuamos con nuestras máquinas. Con el avance de la tecnología, se están desarrollando nuevas formas de interacción, como la realidad aumentada, la realidad virtual y la inteligencia artificial.

Quizás en el futuro, miraremos hacia atrás a las GUIs como un paso importante, pero solo uno de muchos en la evolución de la forma de interactuar con la tecnología.

Mientras tanto, la próxima vez que hagas clic en un ícono o arrastres un archivo a una carpeta, recuerda el largo camino que hemos recorrido desde aquellas pantallas llenas de texto hasta el colorido y amigable mundo de las GUIs.


Editores de código

VS Code

Es de los editores más populares, gratuito y extendible. Tiene herramientas para distintas ramas de la programación. Es ligero y el uso de extensiones nos puede ayudar a crear un ambiente productivo dedicado a nuestras tareas.

Ir al sitio - VS Code

Brackets

AVISO

Este editor de código ya no tiene soporte desde Septiembre 2021. Recomiendan usar VS Code.

Brackets es un editor de código fuente moderno y de código abierto que está especialmente diseñado para el desarrollo web. Es ligero, pero potente y viene con herramientas visuales que facilitan el diseño en el navegador. Uno de sus puntos fuertes es la capacidad de previsualizar en tiempo real los cambios realizados en el código.

Ir al sitio - Brackets

Sublime Text

Sublime Text es conocido por su velocidad y eficiencia. Este editor es muy personalizable y tiene una comunidad activa que crea plugins y paquetes para ampliar sus funcionalidades. Su interfaz es simple, lo que lo hace fácil de usar, y puede manejar archivos y proyectos de gran tamaño sin problemas.

Ir al sitio - Sublime Text

Notepad++

Notepad++ es un editor de texto gratuito y de código abierto para Windows. Es ligero y rápido, y soporta la edición de múltiples documentos y el resaltado de sintaxis para muchos lenguajes de programación. Es ideal para tareas rápidas y edición de archivos pequeños.

Ir al sitio - Notepad++

Vim

Vim es un editor de texto altamente configurable que se basa en el editor Vi, incluido en la mayoría de sistemas UNIX. Vim es muy popular entre los programadores debido a su eficiencia y flexibilidad. Tiene una curva de aprendizaje empinada, pero una vez dominado, permite una edición de texto muy rápida.

Ir al sitio - Vim

Neovim

Neovim es una extensión de Vim diseñada para permitir una mayor extensibilidad y embebibilidad en otras aplicaciones. Mantiene la eficiencia y flexibilidad de Vim mientras introduce mejoras en el rendimiento y la modernización de su arquitectura. Neovim es muy popular entre los desarrolladores que buscan un editor de texto altamente personalizable con soporte para plugins escritos en múltiples lenguajes de programación.

Ir al sitio - Neovim

Emacs

Emacs es otro editor de texto muy poderoso y extensible. Se puede personalizar profundamente utilizando el lenguaje de programación Lisp. Emacs es conocido por su capacidad de integración con diversas herramientas y entornos de desarrollo, lo que lo convierte en una herramienta versátil para los programadores.

Ir al sitio - Emacs


Programming VS Coding

En inglés existen estas dos palabras que hacen referencia a crear código:

Programming, es la acción de programar.

Coding, es la acción de escribir código.

Programmer, es la persona que programa.

Coder, es la persona que escribe código.

Ilustración sobre diferentes lenguajes

En muchos contextos se usan de maneras intercambiables. En español la palabra más cercana para coding es codificación, aunque es poco usada dentro del contexto de la programación.

La diferencia está en que la programación hace referencia a utilizar lenguajes que nos permiten manipular un sistema con instrucciones lógico-matemáticas.

Pero no todos los lenguajes nos permite hacer esto, hay lenguajes que no son de programación. Por ejemplo, los lenguajes de marcado, como HTML. Este tipo de lenguajes nos permite crear estructuras de contenido e información.

Otro ejemplo de un lenguaje que no es de programación es el lenguaje CSS, que nos ayuda a cambiar la apariencia de los documentos HTML.

Ilustración sobre diferentes lenguajes

Siendo estrictos con la definición de cada palabra podríamos usar coding para definir la acción de escribir en lenguajes como HTML o CSS, pero no para JavaScript u otros lenguajes de programación.

Y viceversa, usar programming para definir la acción de escribir en algún lenguaje como JavaScript (entre otros), pero no para HTML o CSS.

Comentarios