¿Qué es CSS?
CSS significa Cascading Style Sheets, o hojas de estilo en cascada. Se utiliza para dar apariencia visual a una página web. Mientras HTML define la estructura, CSS define colores, tipografía, espacios, distribución y efectos visuales.
Módulo 2 · Diseño web
Después de aprender HTML, el siguiente paso es dar vida y personalidad a las páginas. CSS permite controlar colores, tipografías, espacios, disposición, animaciones y diseño responsivo.
CSS significa Cascading Style Sheets, o hojas de estilo en cascada. Se utiliza para dar apariencia visual a una página web. Mientras HTML define la estructura, CSS define colores, tipografía, espacios, distribución y efectos visuales.
p {
color: blue;
font-size: 18px;
}
Un selector indica qué elemento se va a modificar y luego se definen las propiedades con sus valores. La palabra "cascada" significa que las reglas se aplican en orden y pueden sobrescribirse entre sí según su especificidad.
La prioridad en CSS se determina por:
importancia (!important),
especificidad (ID > clase > elemento),
y finalmente el orden en el código.
p { color: black; }
.texto { color: green; }
#principal { color: red; }
En este ejemplo, el estilo del ID gana porque tiene mayor especificidad.
h1 { color: darkblue; }
p { line-height: 1.6; }
button { background: #4f46e5; }
.card {
border-radius: 12px;
}
#titulo-principal {
font-weight: bold;
}
input[type='text'] {
border: 1px solid #999;
}
Los combinadores permiten seleccionar elementos relativos a otros.
nav a:hover { color: #fff; }
li > a { text-decoration: none; }
section + section { margin-top: 40px; }
Las pseudo-clases como :hover, :focus, :active y :nth-child() seleccionan estados o posiciones específicas.
body {
font-family: 'Inter', sans-serif;
font-size: 16px;
line-height: 1.6;
}
.caja {
box-sizing: border-box;
margin: 20px;
padding: 16px;
border: 1px solid #ccc;
}
.hero {
background-color: #0f172a;
background-image: linear-gradient(135deg, #2563eb, #14b8a6);
color: white;
}
.contenedor {
display: block;
width: 100%;
max-width: 1200px;
}
img {
max-width: 100%;
height: auto;
}
CSS permite definir colores de muchas maneras y usar unidades relativas o absolutas para medidas.
red, blue, rebeccapurple.#ff0000, #00ff00.rgb(255,0,0), rgba(255,0,0,0.5).hsl(0, 100%, 50%), hsla(0, 100%, 50%, 0.6)..fondo-color {
background: linear-gradient(90deg, #0ea5e9, #7c3aed);
}
.texto-transparente {
color: rgba(255, 255, 255, 0.85);
}
Las unidades pueden ser:
.tarjeta {
width: calc(100% - 40px);
padding: 2rem;
margin: 1rem auto;
}
CSS también puede calcular valores con calc(), min(), max() y clamp(). Esto permite operaciones matemáticas como sumar, restar o combinar unidades.
.banner {
width: calc(100% - 2rem);
font-size: clamp(1rem, 2vw, 1.5rem);
padding: min(3vw, 24px);
}
html). Es útil para escalado consistente en todo el sitio.html {
font-size: 16px;
}
body {
font-size: 1rem; /* 16px */
}
h1 {
font-size: 2rem; /* 32px */
}
.card {
width: 90%;
max-width: 50rem;
padding: 1.5rem;
}
.menu {
gap: 1em;
}
.banner {
height: 50vh;
}
Las custom properties son variables que puedes definir en CSS y reutilizar en cualquier regla.
:root {
--color-principal: #2563eb;
--texto: #f8fafc;
--espacio: 1.5rem;
}
.boton {
background-color: var(--color-principal);
color: var(--texto);
padding: var(--espacio);
}
Las custom properties son muy útiles para mantener un diseño consistente y cambiar temas con facilidad.
.boton {
color: var(--texto, black);
}
Si la variable no existe, puedes proporcionar un valor por defecto después de la coma.
Cada elemento tiene:
.caja {
box-sizing: border-box;
padding: 16px;
border: 1px solid #dee2e6;
margin: 24px;
}
La prioridad en la cascada se aplica así:
style="...").#id)..clase), atributo, pseudo-clase.div, p).p { color: blue; }
.texto { color: red; }
#principal { color: green; }
Algunas propiedades se heredan a los elementos hijos, como color y font-family. Otras no, como margin o padding.
Usar inherit o initial permite controlar la herencia manualmente.
Flexbox es ideal para alinear y distribuir elementos en una sola dimensión: fila o columna.
.fila {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
gap: 16px;
}
justify-content distribuye elementos en el eje principal. align-items alinea en el eje secundario.
.item {
flex: 1 1 200px;
order: 1;
align-self: flex-start;
}
flex combina grow, shrink y basis.
order cambia el orden visual.
align-self ajusta un solo elemento diferente al resto.
Grid maneja filas y columnas, por lo que es perfecto para diseños en dos dimensiones.
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto;
gap: 20px;
}
.item-1 {
grid-column: 1 / span 2;
}
.item-2 {
grid-row: 1 / 3;
}
repeat() repite columnas. 1fr distribuye espacio disponible. gap controla separación entre filas y columnas.
.layout {
grid-template-areas:
'header header'
'sidebar content'
'footer footer';
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }
Las áreas permiten diseñar plantillas con nombres claros.
Las transformaciones modifican la forma de un elemento sin afectar el resto del flujo.
.tarjeta {
transform: translateX(20px) scale(1.05) rotate(2deg);
}
Las transiciones animan los cambios de propiedad cuando cambian de estado.
.boton {
transition: background-color 0.3s ease, transform 0.2s ease;
}
.boton:hover {
background-color: #2563eb;
transform: translateY(-3px);
}
Las animaciones con @keyframes definen etapas y luego se aplican con animation.
@keyframes aparecer {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.card {
animation: aparecer 0.6s ease forwards;
}
Las animaciones pueden repetirse con infinite o tener retrasos con animation-delay.
Diseño responsivo permite que las páginas funcionen bien en pantallas pequeñas y grandes.
@media (max-width: 768px) {
.layout {
grid-template-columns: 1fr;
}
.hero {
padding: 3rem 1.5rem;
}
}
La estrategia móvil primero usa estilos base para móviles y luego aplica reglas para pantallas más grandes.
Combina minmax(), clamp() y porcentajes para que los diseños se adapten de forma natural.