HTML&CSS
HTML&CSS
🗂
Lista de contenido
Web Developer Fundamentals
Bienvenida
Perfiles de un web developer
Frontend
Estándares que maneja un front
Frameworks CSS
Frameworks y librerías JS
Preprocesadores CSS
Compilador/Empaquetador
Backend
Lenguajes de programación
Frameworks
Infraestructura
Bases de datos
FullStack
Páginas estáticas vs dinámicas
HTML
Anatomía de una página web
Index y su estructura básica: Head
Index y su estructura básica: body
Anatomía de una etiqueta HTML
Etiquetas multimedia
Tipos de imágenes
Optimización de imágenes
Etiqueta img, figure y figcaption
Etiqueta video
Formularios
Etiqueta form e input
Calendar, auto complete y requiere
Select
Input type submit vs Button Tag
CSS
¿Que es?
Anatomía de una regla CSS
¿Cómo usamos CSS? por selector, clase y/o IDs.
Pseudo clases y pseudo elementos
Modelo de caja
Herencia
Especificidad en selectores
Demo de especificidad y orden de selectores
Combinadores: Adjacent Siblings (combinators)
Interacciones
Animaciones
Estilos
Navegación
CSS
JavaScript
Boostrap
Tailwind CSS
Foundation
Frameworks y librerías JS
Son productos que nos permiten escalar nuestro proyecto a producción de una forma más
rápida y con una mayor interacción. Algunos son:
React
Angular
Vue
Preprocesadores CSS
Es una forma diferente de hacer CSS. Algunos lo denominan que es usar "css con
superpoderes".
Less
Stylus
Sass
Compilador/Empaquetador
Estos programas nos permiten usar las últimas versiones de JavaScript (Siempre debemos
usar las últimas versiones de JS, es muy buena práctica) mediante un proceso de compilado
para que el navegador lo entienda.
Babel
Webpack
Backend
El desarrollador backend es aquel que trabaja del lado del servidor. Maneja toda la lógica
sobre cómo encontrar a los usuarios y demás funciones. Un back no suele necesitar
estándares, este puede manejar diferentes tecnologías y lenguajes de programación.
Lenguajes de programación
Python
Node.js
PHP
Ruby
Java
.Net
Frameworks
Django para Python
Infraestructura
La infraestructura o nube es usada para temas de deploy. Esto puede que no haga parte del
backend, sin embargo es necesario tener conocimientos en ellas. De aquí puede salir un
perfil llamado DevOps.
Google Cloud
Digital Ocean
AWS
Heroku
Bases de datos
MongoDB
MySQL
PostgresQL
FullStack
Es un desarrollador que fusiona varias herramientas/conocimientos del frontend y el
backend. Las librerías, los frameworks y lenguajes de programación. Un full stack no lo sabe
todo 100%.
Un full stack, mejor dicho, es un desarrollador que entiende todo el proceso del desarrollo,
desde el diseño y la idea, hasta el código y el despliegue. Es entenderlo todo, no saberlo
todo.
Escuela de desarrollo web → Full Stack. Pero con especialización Front o Back.
Por el contrario, los websites dinámicos son aquellos que dejan de ser páginas y se
convierten más en aplicaciones por todas las cosas que se pueden ver y hacer.
Tiene interacción
Siempre, dependiendo de los requerimientos del cliente, debemos decidir que tipo de página
usar.
Estático: Blogs, landing.
HTML
Hypertext Markup Language
Header
Logo
Main content
Side Bar
Footer
Frameworks
Librerías
Estilos
Fuentes
APIs
<!DOCTYPE html>
<!--Le decimos al navegador que este archivo es del tipo html:5-->
<html lang="es">
<!--Es la etiqueta "padre" donde vivirá nuestro proyecto. El atributo lang establece el idiom
Debemos usarlo para que el navegador pueda traducir nuestra página-->
<head>
<title>Mi página</title>
<!--Título de nuestra página, no confundir con los H1-H6. Este titulo es el que ves en la pe
<link rel="stylesheet"href="./css/style.css">
<!--Linkea/Enlaza archivos de estilos u otros archivos que necesitemos en nuestro proyec
<a href="platzi.com">Contenido</a>
<img src="imagen.png" />
<body>
</header>
<section>
<!--Nuestro website puede estar divido por secciones, por ejemplo platzi tiene 3:
El navegador de cursos y rutas, el feed y nuestras rutas de aprendizaje-->
<article>
<!--Contenido independiente de la página. Es reutilizable-->
</article>
</section>
</ul>
</footer>
<h1>Soy un titulo</h1>
<!--Títulos, muestran el texto más grande y con negrilla. Existen desde el h1 al h6-->
</body>
Etiquetas multimedia
Son el tipo de etiquetas que usaremos para insertar imágenes y vídeos.
Tipos de imágenes
Lossy: Este tipo de imágenes se refiere a imágenes pequeñas y que pierden calidad
(comparadas con las lossless). Nos ayudan a mejorar el tiempo de carga de nuestro
website pero perdemos calidad. Algunos de estos formatos son:
SVG (Vector) → Scalable Vector Graphics → Se usan para pantallas de retina. Nunca
pierden calidad. Nunca.
Optimización de imágenes
No es óptimo cargar imágenes en nuestro sitio web que pesen mucho porque tardan
bastante tiempo en renderizarse y le dan una mala experiencia al usuario.
El tamaño promedio de una imagen debe ser de 70 a 100 kilobytes.
Podemos optimizar nuestras imágenes con los siguientes recursos:
Elimina los metadatos de la imagen. Se usa para imágenes que vienen de una cámara.
src → Donde está la imagen, su ruta. Puede ser desde nuestras carpetas o desde un enlace
de la web.
alt → Texto alternativo por si no se renderiza la imagen y para mejorar la accesibilidad de
nuestro sitio.
figure → Genera un contenedor para la imagen.
figcaption → Agrega una descripción a la imagen. Será visible en la parte inferior de esta
misma. Va dentro de la etiqueta figura.
Por buenas prácticas siempre deberíamos usar la etiqueta figure para insertar un archivo
multimedia.
Etiqueta video
Nos permite subir un video mediante la misma forma que una imagen, mediante el atributo
src.
<section>
<video controls preoload="auto">
<source src="./video.m4v#t=10,60" />
<source src="./video.mp4#t=10,60" />
<source src="./video.gif" />
Formularios
Etiqueta form e input
Los formularios son la forma en la cual podemos empezar a generar interacción con los
usuarios. Debemos generar buenos formularios para los usuario, deben ser cortos, fáciles de
usar y directos.
<div>
<input type="text" />
<input type="text" />
<input type="text" />
<input type="text" />
</div>
<form action="">
<label for="nombre">
<span>¿Cual es tu nombre?</span>
<input type="text" id="nombre" placeholder="John Cárdenas" />
</label>
<label for="inicio-platzi">
form: nos permite decirle al navegador que lo que usaremos es un formulario y que el
usuarios va a interactuar con el. Es una etiqueta contenedora.
action: Es la URL o base de datos a donde se va a enviar la información.
label: Es una etiqueta contenedora de input. Recibe un atributo importante llamado for y el
cual debe ser el mismo que el id del input.
placeholder: Agrega información dentro del input. Sirve para indicarle al usuario un ejemplo
sobre lo que debe hacer.
Tipos de inputs:
<form action="">
<label for="nombre">
<span>¿Cuál es tu nombre?</span>
<input
type="text"
name="nombre"
id="nombre"
autocomplete="name"
required
/>
</label>
<label for="correo">
<span>¿Cuál es tu correo?</span>
<input
type="email"
autocomplete: Completa el input con los datos que tenga guardado el navegador del usuario.
Recibe valores dependiendo de que busquemos autocompletar: name, email, address.
Select
Select permite crear una lista para seleccionar varias opciones. Sirve de contenedor para la
etiqueta option, la cual muestra los valores de la lista que crea select. Sin embargo, se debe
usar más la opción datalist que select, ya que datalist junto a input con el atributo list le
permite al usuario buscar en caso de que la lista sea muy larga.
<!-- Con buenas prácticas -> Le das la opción al usuario de encontrar lo que está buscan
<body>
<input type="submit" value="Nombre" />
<button>Enviar</button>
</body>
CSS
¿Que es?
Las hojas de estilo en cascada es el archivo que le aplica los estilos a un sitio web en forma
de cascada, leyendo el código de arriba hacia abajo.
1. Link externo
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="./estilos.css" />
</head>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="./estilos.css" />
<title>Pseudo Clase y Pseudo Elementos</title>
<style>
body {
background-color: black;
}
</style>
</head>
Para agregar estilos a una etiqueta de HTML usamos clases y IDs. Siendo las clases las más
importantes para elementos generales y los IDs para elementos específicos (Son más
recomendados para JavaScript) Ejemplo de usos de estilos con clases:
<nav>
<ul id="main-nav" class="nav">
.nav {
margin-top: 10px;
list-style: none;
padding-left: 0;
}
.nav li {
display: inline-block;
}
.nav a {
color: white;
background-color: #13a4a4;
padding: 5px;
border-radius: 2px;
text-decoration: none;
}
.nav .blog {
background-color: red;
}
Para este curso usaremos la metodología BEM la cual nos ayuda a generar clases a
elementos de HTML de una manera más ordenada y específica. BEM usa esta sintaxis:
.main
.main-nav
.main-nav__item
.main-nav__item a
Con las clases e IDs de CSS siempre debemos ser lo más específicos que podamos.
/* Ejemplo */
p:first-child {
/* Ejemplo */
p::first-letter {
color: red;
font-size: 20px;
}
/* Toma solo la primera letra de un elemento, no todo su contenido. Solo la primera letra.*/
Lista de pseudo-elementos:
https://developer.mozilla.org/es/docs/Web/CSS/Pseudoelementos
:active → Pseudo clase que se activa cuando un elemento recibe el evento click.
::after → Pseudo elemento que agrega algo (texto, número, figuras) delante del elemento
HTML especificado.
*En los proyectos casi siempre se trabaja una hoja de estilos por página. Por lo general el
nombre del archivo de estilos es el mismo nombre de la página.
*propiedad content → Agrega contenido (texto) a un elemento especificado.
Modelo de caja
* → Es el selector universal de HTML. Se usa para resetear los estilos predeterminados por el
navegador.
*Para hace que un elemento tome el ancho que le asignemos más un margen o padding sin
que se rompa o no funcione el estilo, podemos usar calc. Hará que el ancho se calcule
tomando en cuenta el margen y ancho especificado. Esto es muy útil a la hora de hacer
desarrollo responsive.
container {
width: (calc 50% - 20px)
}
Herencia
Es el código css que le pasará al hijo de una etiqueta contenedora o padre. El valor inherit es
el que nos permite heredar estilos de las etiquetas padres. Por ejemplo, si hay un texto
contenido en una etiqueta div, se le puede asignar un margin: inherit y arrojará el mismo
margin que tenga ese div.
Especificidad en selectores
La especificidad es muy importante ya que es el orden por el cual el navegador decide qué
estilos aplicarle a un elemento. El orden en cual se decide esto es el siguiente:
2. Especificidad
1. !important
2. inline styles
3. #ids
4. .class
5. tag
Si se mandan a llamar unos estilos arriba y otros abajo (los dos con la misma clase) los
últimos llamados sobrescribirán a los primeros, porque tal como su nombre lo indica, los
estilos CSS se leen en cascada y guarda los últimos cambios/valores que lee. (Este es un
caso muy extremo)
https://www.codecaptain.io/tools/css-specificity-calculator
CSS Diner
You're about to learn CSS Selectors! Selectors are how you pick which
element to apply styles to. Exhibit 1 - A CSS Rule p { margin-bottom: 12px; }
Here, the "p" is the selector (selects all elements) and applies the margin-
https://flukeout.github.io/
*Los IDs son más importantes para los estilos que las clases.
*VStudio nos muestra el nivel de especificidad de cada regla de CSS.
/* 1. Hermano cercano: Aplica el estilo a todas las etiquetas p que tenga cerca un h2 */
h2 + p {
color: red;
}
/* 2. Hermano general: Aplica el estilo siempre y cuando coincida una p con un h2 en el mis
h2 ~ p {
color: red;
}
/* 3. Hijo: Agregale estilos a una etiqueta p que sea hijo directo de div */
div > p {
color: blue;
}
Medidas
Las medidas en CSS es lo que nos permitirá establecer tamaños a fuentes, contenedores,
iconos, imágenes, etcétera... Existen 2 tipos de medidas:
1. Absolutas: Es una medida que no cambia en ningún momento, se usan los pixeles.
Medidas EM
Em es un acrónimo de elemento y lo que hace es que toma el tamaño de fuente de su padre
directo. Si un parrafo está encerrado en un div que tiene un tamaño fuente de 16px,
entonces:
1em → 16px
2em → 32px
Medidas REM
*La etiqueta HTML tiene 16px de fuente por defecto
REM hace referencia a la etiqueta root de nuestro archivo HTML, la cual es la etiqueta
<html>. Por lo tanto 1rem siempre será igual a 16px a no ser que cambiemos el tamaño de
font-size del html. REM puede ser confuso de calcular y para esto existe un truco, el cual
consiste en establecer el tamaño de fuente del html en 62.5% de esta forma:
1rem → 10px
1.6rem → 16px
2rem → 20px
Max/min Width
min-width: El elemento no se puede hacer menos ancho desde un tamaño especificado.
section {
width: 80%;
min-width: 320px;
max-width: 500px;
min-height: 500px;
margin: 0 auto;
background-color: red;
}
*Cuando usemos el min y max width debemos tener un width base y casi siempre será en
porcentajes.
*En el caso de height no es necesario tener un height base. Se pueden establecer
directamente los min y max.
*Un problema de overflow quiere decir que se tiene más contenido qué espacio en el
contenedor padre.
Position
Es la forma en la cual podemos posicionar contenedores de CSS o las etiquetas de HTML.
Algunas de las posiciones más usadas son:
2. Absolute: Esta posición le indica al elemento que se debe borrar del flujo normal de la
página. Esto causará que el elemento quede por encima de los demás y deje de ocupar
su espacio.
3. Relative: Esta posición es considerada una "normal" porque se ubica en con respecto a
su posición original. Esto causará que el elemento siga ocupando su espacio a pesar de
que no esté ubicado allí.
1. Fixed: Al igual que sticky, sirven para que el contenido se quede en su posición sin
importar si se hace o no scroll. Fixed mantiene el efecto desde que se abre la página.
2. Sticky: Por su parte, sticky empieza a "seguirte" cuando llegues a él mediante el scroll.
Display block
block: Usa el 100% del ancho que tenga sin importar si el contenido tiene o no ese
espacio. Ocupa siempre el 100% del width. Lo que los apila uno encima del otro.
inline: Ocupa solo el espacio de su contenido. Lo que permite agruparse unos al lado del
otro. No se le puede dar margen ni padding vertical pero sí horizontal. Tampoco se le
puede agregar un alto o ancho.
inline-block: Utiliza el espacio que ocupa el elemento. Solo el que ocupa el elemento, no
el 100%.
*flex-wrap: wrap; → Acomoda los elementos dependiendo del viewport width del usuario, y
si no hay más espacio baja los elementos ya que no caben el ancho.
*justify-content nos permite alinear los elementos de forma horizontal. align-items hace lo
mismo pero verticalmente.
*box-sizing: border-box; → Suma el padding y el borde con el width del elemento. Si
aumenta el padding o el borde, el width disminuye para no generar un scroll horizontal. Lo
mismo al contrario en caso de que aumente width. Esto se hace para que el elemento ocupe
lo que le indicamos y no más.
Flexbox Layouts
.container {
border: 0.3rem solid black;
display: flex;
flex-wrap: wrap;
}
.box {
height: 10rem;
flex-basis: 10rem;
flex-grow: 1;
}
flex-grow → Toma el espacio que sobra para que no haya espacios en blanco. Al darle el
valor 1 toma el espacio sobrante que deja otro elemento.
*Todos los contenedores que no tengan orden se pasan para la izquierda. Y los que sí lo
tengan empiezan desde donde terminan los que no tienen.
Variables
Las variables nos permiten guardar un valor para evitar generar mucho código repetido.
:root {
--primery-color: #003476;
--secundary-color: #b4d2f7;
--header-size: 4rem;
--font: 1.8rem;
}
:root → Hace referencia a la etiqueta html. Aquí es donde declararemos todas nuestras
variables. Para declarar una variable asignamos su nombre con dos guiones y luego su valor.
Para usarla:
header {
width: 100vw;
height: 15vh;
background-color: var(--primery-color);
}
main {
width: 100vw;
height: 70vh;
font-size: var(--font);
}
h1 {
font-size: var(--header-size);
color: var(--primery-color);
Web Fonts
Las fuentes genéricas son las que vienen por defecto en nuestro sistema operativo y con las
cuales se abrirán en un principio todos los sitios web. Algunas de estas son:
Light 300
Medium 500
Regular 400
Bold 900
@import url('https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100&display=sw
El cual no es tan buena práctica porque afecta el performance del sitio web. Casi siempre la
mejor práctica es la segunda opción.
<link
href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;900&displa
rel="stylesheet"
/>
*display=swap hace que el proyecto se cargue con la fuente por defecto, y una vez cargue
todo el mismo, se cargará la fuente
No es bueno cargar más de una fuente externa. Debido a que cada link genera una petición y
si agregamos muchos puede afectar el performance.
Para usar estas fuentes en los estilos basta con poner el nombre que nos indica Google Fonts
como valor de la propiedad font-family
Responsive Design
Media queries
Los media queries nos permiten hacer que nuestros proyectos sean multiplataforma
mediante breakpoints. Los breakpoints son puntos donde hacemos cambios, como
renderizar elementos o contenedores. Los media querie se agregan así:
.letra {
font-size: 12px;
}
}
<link
rel="stylesheet"
href="./estilos.css"
/>
<link
rel="stylesheet"
href="./tablet.css"
media="screen and (min-width: 600px)"
/>
<link
rel="stylesheet"
href="./desktop.css"
El primer link siempre será el mobile y no hay necesidad de especificar el atributo media.
Este tipo de estrategia se inicia con columnas y a medida que se crecen las pantallas, las
columnas van siendo acomodadas. El archivo de estilos principal (styles.css) es el archivo
que usaremos para trabajar nuestra primera versión responsive, es decir, la mobile. Luego
iremos desarrollando las otras como desktop.css o tablet.css
*Los media queries por buenas prácticas siempre deben ir al final de los estilos (en caso de
que los tengamos en un solo archivo todos)
Column Drop
Siempre preparar los archivos CSS por brearpoink y no todos en una sola hojas de
estilos.
mobile.css/style.css
tablet.css
desktop.css
Trabajar con máximo 6 breakpoints. Debido a que se generará más código lo cual
impactará en performance y no es buena práctica.
Imágenes responsive
<picture> y <source> nos ayudan para trabajar imágenes responsive.
la etiqueta <source> recibe como parámetros media y el srcset. media recibe los valores en
los cuales se van a mostrar diferente imágenes dependiendo del tamaño de la pantalla. Y
srcset recibe la ruta de la imagen y el navegador decide cuál cargar dependiendo del peso.
srcset se comunica con el navegador y le da opciones para escoger la mejor imagen para
ese dispositivo. Recibe una imagen como parámetro.
Accesibilidad
Garantizar la accesibilidad de nuestro sitio es hacerlo inclusivo. Permitir que personas con
discapacidades puedan acceder y disfrutar el contenido de una forma fácil para ellos.
Semántica
Debemos usar HTML semántico y no solo etiquetas div. Esto le permite a los software de
lectura de pantalla saber donde están ubicados para poder guiar a su usuario. Las etiquetas
semánticas son las mostradas en la clase index y su estructura básica: body
Textos
Se recomienda siempre usar medidas relativas, como rem, para los textos. Esto con el fin de
que personas con discapacidades visuales puedan aumentar el tamaño de la fuente desde su
navegador. Si el texto estuviese en pixeles no se podría cambiar.
El atributo alt nos ayuda a leer la descripción de las imagenes para personas con
discapacidades visuales. También sirve para agregar un texto alternativo en caso que la
imagen no se carge.
El atributo title puede ser usado en varias etiquetas HTML como img o a y su función es
agregar una descripción para cuando el usuario haga hover sobre algún elemento.
Y aquí terminamos 😄.
Recuerda que si quieres hacer un aporte o corregir algo puedes comentar (Debes tener
cuenta en Notion)