🏠 Inicio 🌍 Página Principal 🌐 HTML 🎨 CSS 📐 Flexbox ⊞ CSS Grid ⚡ JavaScript

¿Qué es CSS?

CSS (Cascading Style Sheets) es el lenguaje que controla la presentación visual de las páginas web. Define colores, tipografías, espaciados, layout, animaciones y responsividad.

Hay tres formas de aplicar CSS. La mejor práctica es usar un archivo externo:

HTML + CSS
<!-- 1. Externo (RECOMENDADO) -->
<link rel="stylesheet" href="styles.css">

<!-- 2. Interno (en el <head>) -->
<style>
  body { background: #020b18; }
</style>

<!-- 3. Inline (evitar, difícil de mantener) -->
<p style="color: red; font-size: 18px;">Texto rojo</p>

Selectores CSS

Los selectores indican a qué elementos HTML se aplican los estilos.

CSS
/* Selector de etiqueta — aplica a todos los <p> */
p {
  color: #e0f0ff;
  font-size: 16px;
}

/* Selector de clase — aplica a class="tarjeta" */
.tarjeta {
  background: #0a1e3c;
  border-radius: 12px;
  padding: 20px;
}

/* Selector de ID — aplica a id="header" */
#header {
  background: #020b18;
  height: 70px;
}

/* Selector descendente — <a> dentro de .nav */
.nav a {
  color: #00b4ff;
  text-decoration: none;
}

/* Pseudo-clase — estado hover */
.btn:hover {
  background: #0066ff;
  transform: translateY(-2px);
}

/* Pseudo-element — primera línea */
p::first-line {
  font-weight: bold;
}

/* Selector de atributo */
input[type="email"] {
  border: 1px solid #00b4ff;
}

/* Combinando selectores */
h1, h2, h3 {
  font-family: 'Segoe UI', sans-serif;
}

/* Hijo directo */
.lista > li {
  list-style: none;
}

El Box Model

Todo elemento en CSS es una "caja" compuesta por cuatro capas: content → padding → border → margin.

CSS
.caja {
  /* Tamaño del contenido */
  width: 300px;
  height: 150px;

  /* Espaciado INTERNO */
  padding: 20px;          /* todos los lados */
  padding: 10px 20px;     /* arriba/abajo | izq/der */
  padding: 5px 10px 15px 20px; /* top | right | bottom | left */

  /* Marco */
  border: 2px solid #00b4ff;
  border-radius: 12px;

  /* Espaciado EXTERNO */
  margin: 0 auto;         /* centrado horizontal */
  margin-bottom: 24px;

  /* CRITICAL: box-sizing incluye padding y border en el width */
  box-sizing: border-box;

  /* Sombra */
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
}

/* Buena práctica: aplicarlo globalmente */
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

Colores y Tipografías

CSS
/* ── COLORES ──────────────────────────────────── */
.elemento {
  color: red;                   /* nombre */
  color: #ff5733;               /* hexadecimal */
  color: rgb(255, 87, 51);      /* RGB */
  color: rgba(0, 180, 255, 0.8); /* RGB con opacidad */
  color: hsl(200, 100%, 50%);   /* HSL */
}

/* Degradados */
.fondo {
  background: linear-gradient(135deg, #020b18, #0a1e3c);
  background: radial-gradient(circle, #0066ff, #020b18);
}

/* Variables CSS (custom properties) */
:root {
  --color-primario: #00b4ff;
  --color-fondo: #020b18;
}

.boton {
  background: var(--color-primario);
  border: 1px solid var(--color-primario);
}

/* ── TIPOGRAFÍAS ──────────────────────────────── */
body {
  font-family: 'Segoe UI', system-ui, sans-serif;
  font-size: 16px;
  line-height: 1.6;
}

h1 {
  font-size: clamp(1.8rem, 5vw, 3rem); /* responsive */
  font-weight: 800;
  letter-spacing: -0.02em;
}

code {
  font-family: 'Consolas', 'Courier New', monospace;
  font-size: 0.9em;
}

Posicionamiento

CSS
/* static (default) — flujo normal del documento */
.estatico { position: static; }

/* relative — desplazamiento desde su posición normal */
.relativo {
  position: relative;
  top: 10px;    /* se mueve 10px hacia abajo */
  left: 20px;   /* se mueve 20px a la derecha */
}

/* absolute — se posiciona respecto al padre relative */
.padre { position: relative; }
.absoluto {
  position: absolute;
  top: 0;
  right: 0;     /* esquina superior derecha del padre */
}

/* fixed — fijo en la pantalla (navbar, botón flotante) */
.navbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1000;  /* por encima de otros elementos */
}

/* sticky — se "pega" al hacer scroll */
.sidebar {
  position: sticky;
  top: 70px;    /* se pega a 70px del tope */
}

Transiciones y Animaciones

CSS
/* ── TRANSICIONES ─────────────────────────────── */
.boton {
  background: #0066ff;
  color: white;
  padding: 12px 24px;
  border-radius: 8px;
  /* propiedad | duración | función | delay */
  transition: background 0.3s ease, transform 0.2s ease;
}

.boton:hover {
  background: #00b4ff;
  transform: translateY(-3px);  /* sube 3px */
  box-shadow: 0 8px 20px rgba(0, 180, 255, 0.3);
}

/* ── ANIMACIONES con @keyframes ───────────────── */
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

.card {
  animation: fadeIn 0.5s ease forwards;
}

/* Animación de pulso */
@keyframes pulso {
  0%, 100% { transform: scale(1); }
  50%       { transform: scale(1.05); }
}

.alerta {
  animation: pulso 2s infinite;
}

/* Animación de rotación */
@keyframes rotar {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

.loader {
  animation: rotar 1s linear infinite;
}

Ejercicios Resueltos

EJERCICIO 1 Tarjeta de perfil animada

Creá una tarjeta de perfil con foto, nombre, rol y botón, con efecto hover animado.

  • 1Estructuramos la tarjeta con clases semánticas.
  • 2Usamos box-shadow y transition para el efecto hover.
  • 3La foto usa border-radius: 50% para hacerla circular.
CSS — Solución
.perfil-card {
  background: #0a1e3c;
  border: 1px solid rgba(0, 180, 255, 0.2);
  border-radius: 16px;
  padding: 32px;
  text-align: center;
  max-width: 280px;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.perfil-card:hover {
  transform: translateY(-8px);
  box-shadow: 0 20px 40px rgba(0, 180, 255, 0.2);
}

.perfil-foto {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  object-fit: cover;
  border: 3px solid #00b4ff;
  margin-bottom: 16px;
}

.perfil-nombre {
  font-size: 1.2rem;
  font-weight: 700;
  color: #e0f0ff;
  margin-bottom: 4px;
}

.perfil-rol {
  font-size: 0.85rem;
  color: #00b4ff;
  margin-bottom: 20px;
}

.perfil-btn {
  background: #0066ff;
  color: white;
  border: none;
  padding: 10px 24px;
  border-radius: 8px;
  cursor: pointer;
  transition: background 0.3s;
}

.perfil-btn:hover { background: #00b4ff; }

Ejercicios Propuestos

PROPUESTO 1 Navbar sticky con hover

Creá una barra de navegación que se quede fija al hacer scroll.

  • Logo a la izquierda, links a la derecha.
  • Fondo semitransparente con blur.
  • Links con efecto hover (underline animado o color).
  • Responsive: ocultar links en mobile.
PROPUESTO 2 Botón con animación de partículas

Diseñá un botón "premium" con múltiples efectos CSS.

  • Gradiente en el fondo.
  • Efecto glow al hacer hover.
  • Animación de "ola" con ::before y ::after.
  • Transform scale al hacer click con :active.