Aplicación de Estilos
En este ejercicio transformaremos el documento que desarrollamos en el aprendizaje de las etiquetas HTML en un sitio moderno y responsivo, aplicándo estilos con CSS.
Podés visitar el sitio que desarrollaremos aquí. ↩

● Preparación
Paso 1
- ❖ Creamos una carpeta nueva desde el explorador de archivos.
- ❖ Descargamos desde este sitio web y pegamos dentro de esa carpeta las imágenes y el archivo index.html o usamos el del ejercicio de HTML puro.
- ❖ Creamos un archivo style.css
- ❖ Relacionamos el style.css con el index.html colocando la siguiente etiqueta en el head.
<link rel="stylesheet" href="style.css">
● Estilos generales
Paso 2
Siempre se quitan estilos que vienen por defecto y aplica una configuración inicial:
*{
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
margin:0;
padding: 0;
box-sizing: border-box;
text-decoration: none;
list-style:none;
color: currentColor;
}

Con solo aplicar esta configuración podemos ver muchos cambios.

● Estilos al Header
Paso 3
Dividimos la pantalla de visual studio code.

Cerrando el index.html de la primer ventana nos queda así:

Identificamos la etiqueta a la que aplicaremos los estilos.
Comenzamos con el header, en el style.css:
Iremos aplicando las propiedades de manera tal que se vea lo que estamos haciendo

header{
padding: clamp(12px,3vw, 24px) 7%;
}

header{
padding: clamp(12px,3vw, 24px) 7%;
text-align:center;
}

header{
padding: clamp(12px,3vw, 24px) 7%;
text-align:center;
position: sticky;
top:0;
background: white;
border-bottom: 1px solid lightgray;
}

● Hijos del Header
Paso 4
header h1{
}
header > p{
}
header nav{
}

En el header > p, aplicamos el signo mayor, para que los estilos se apliquen únicamente a la etiqueta párrafo hijo directo del header y a ninguna otra.
header h1{
font-size: 3rem;
font-weight: 800;
letter-spacing: -2px;
}
header > p{
margin: 1.5rem auto 0;
max-width: 40rem;
color: gray;
}
header nav{
margin-top:1.5rem;
}

Paso 5 - Los hijos y nietos del Nav
header nav ul{
display: flex;
justify-content: center;
gap:1rem;
flex-wrap: wrap;
}
header nav ul li {
padding: 1rem 2rem;
border: 1px solid lightgray;
border-radius: 2rem;
box-shadow: 1px 1px 2px lightgray;
}
header nav ul li a{
color:#666;
transition: 0.2s linear;
}
header nav ul li:hover a{
font-weight: 500;
}




● Estilos en el Main
Paso 6
Tenemos el elemento padre main y 9 hijos con algunos estilos compartidos.

main{
/* Esto se aplica a este elemento */
width: min(1150px, 90%);
margin:auto;
padding: 4rem 0 7rem;
/* Esto se aplica para ordenar los hijos */
display: grid;
gap:3.5rem;
}

A los hijos aplicamos el display grid, que se usa para dividir la pantalla en filas y columnas.
Por defecto, al no poner nada es una sola columna.
A su vez los hijos estarán separados entre sí por 3.5rem que equivale a 3.5*16px = 56px
Paso 7 -Las Section
Aplicamos los siguientes estilos:
main section{
background-color: white;
border: 1px solid lightgray;
border-radius: 2rem;
padding: 3rem;
box-shadow: 0 10px 40px rgba(0,0,0,0.06);
transition: 0.2s linear;
}
main section:hover{
transform: translateY(-6px);
}

● Los hijos de cada Section
Paso 8
Para que haya uniformidades, aplicamos el mismo estilo a todos los títulos y párrafos de sección.
main section h2 {
font-size: 2rem;
margin-bottom: 1.8rem;
letter-spacing: -1px;
}
main section h3 {
margin: 2rem 0 1rem;
font-size: 1.3rem;
}
main section article {
display: grid;
gap: 1rem;
}
main section p {
color: #444;
line-height: 1.8;
}
main section strong {
color: #111;
}
● Corrección Header
Paso 9
Muchas veces a medida que desarrollamos el documento web, advertimos cambios involutarios de comportamiento del documento.
Por ejemplo en este caso, al aplicarle estilos a las secciones, cuando hago scroll, éstas pasan por encima del header, en vez de por debajo.
Es por eso que vuelvo al selector header en style.css y agrego:
header{
padding: clamp(12px,3vw, 24px) 7%;
text-align: center;
position: sticky;
top:0;
background: white;
border-bottom: 1px solid lightgray;
z-index: 3;
}
Es normal, tener que ir de manera salteada de una etiqueta a la otra y volver en el proceso de diseño.
● Las listas del Main
Para aplicarle estilo a las listas ul, ol y sus hijos li:
Paso 10
main section ul,
main section ol {
margin-left: 1.8rem;
}
main section li {
margin: 0.8rem 0;
}
main section ul li {
list-style-type: square;
}
main section ol li {
list-style: decimal;
}

● Aside y Blockquote
Vamos a realizar dos diseños, a modo de ejercicio. Lo normal sería un documento con estilo coherente.
Paso 11
main section aside {
margin-top: 1.5rem;
background: #f8f8f8;
border-left: 4px solid black;
padding: 1.25rem;
border-radius: 0.75rem;
}
main section blockquote {
margin: 1.25rem 0;
padding: 1.5rem;
background: #fafafa;
border-left: 5px solid black;
font-style: italic;
}

● La tabla y sus partes
Paso 12
Como tenemos una sola tabla no es necesario que indiquemos toda su ubicación, con usar el nombre de la etiqueta es suficiente. Afectaría a todas las tablas del documento. En general para la uniformidad, ese es precisamente el objetivo.
Pasar de este diseño (por defecto de html):

a éste (diseñado con css):

table {
width: 100%;
border-collapse: collapse;
overflow: hidden;
border-radius: 1rem;
}
caption {
font-size: 1.3rem;
margin-bottom: 1.25rem;
font-weight: 700;
}
thead {
background: black;
color: white;
}
th,
td {
padding: 1.3rem;
border: 1px solid #e5e7eb;
text-align: left;
}
tbody tr:nth-child(even) {
background: #fafafa;
}
tbody tr:hover {
background: #f2f2f2;
}


● Imágenes
En la sección llamada Conclusión, tenemos una imagen. Debemos aplicarle estilos
Paso 13
main section#conclusion img {
width: 100%;
max-width: 700px;
object-fit: cover;
display: block;
margin: 3rem auto;
border-radius: 1rem;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.06);
}
- ❖ width:100%; suena a redundancia, pero es muy importante para que la foto sea FLEXIBLE y adopte el ancho de la etiqueta que lo contiene. Sin esa propiedad, queda en el ancho con el que viene la imagen y no se adapta a las diferentes pantallas.
- ❖ max-width:700px; es para evitar una foto gigante en pantallas grandes difusa.
- ❖ object-fit:cover; acomoda la imagen en todo el ancho sin deformarla.
- ❖ display:block; para que se muestre como elemento en bloque. La siguiente etiqueta renderiza abajo.
- ❖ margin:3rem auto; ya sabemos que la primer medida es arriba y abajo y la segunda a la derecha e izquierda. Como dice auto, entonces la centra.
- ❖ border-radius: 1rem; redondea los bordes.
- ❖ box-shadow genera una sombra en la imagen que se percibe como cierta profundidad.

● Botones
Para que exista uniformidad en el documento web, aplicamos un estilo general para todos los botones.
Lo identificaremos con la clase btn y prodrá usarse en la etiqueta que nos resulte conveniente.
...
<button commandfor="miModal" command="show-modal" class="btn">¿Qué representa esta imagen?</button>
...
<button class="btn">Cerrar</button>
...
<button type="button" onclick="alert('¡Correcto! Tanto las necesidades personales como la escasez del bien o servicio y las preferencias individuales influyen en el valor.')" class="btn">Enviar respuesta</button>
...
<a href="#introduccion" ><button class="btn">↑ Inicio</button></a>
...
Paso 14
.btn{
cursor: pointer;
width: fit-content;
margin: 0 auto;
border: none;
padding: 1rem 2rem;
border-radius: 0.7rem;
background: black;
color: white;
font-size: 1rem;
transition: 0.2s linear;
}
button:hover {
transform: translateY(-3px);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
}
● Modal - Dialog
En HTML la etiqueta que realiza esta función de dialog. Le damos estilo
Paso 15
dialog {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: min(600px, 90vw);
max-height: 85vh;
overflow: auto;
margin: 0;
padding: 35px;
border: none;
border-radius: 20px;
background: #fff;
box-shadow: 0 25px 60px rgba(0, 0, 0, 0.3);
}
dialog::backdrop {
background: rgba(0, 0, 0, 0.45);
backdrop-filter: blur(4px);
}

Ubicación del modal
Estas propiedades centran el modal en la pantalla
-
❖ position: fixed;
-
❖ top: 50%;
-
❖ left: 50%;
-
❖ transform: translate(-50%, -50%);

Propiedades propias del modal
- ❖ width: min(600px, 90vw);
- ❖ max-height: 85vh;
- ❖ overflow: auto;
- ❖ margin: 0;
- ❖ padding: 35px;
- ❖ border: none;
- ❖ border-radius: 20px;
- ❖ background: #fff;
- ❖ box-shadow: 0 25px 60px rgba(0, 0, 0, 0.3);

● Formulario
Le damos estilo al formulario que se encuentra en la penúltima sección
Paso 15
fieldset {
border: 1px solid #e5e7eb;;
border-radius: 1rem;
padding: 2rem;
}
legend {
font-weight: 700;
padding: 0 0.7rem;
}
select {
margin-top: 0.8rem;
padding: 1rem;
border-radius: 0.5rem;
border: 1px solid #e5e7eb;
width: 20rem;
max-width: 100%;
}
input[type='checkbox'] {
transform: scale(1.2);
}

● Video - Audio
Paso 16
details {
border: 1px solid #e5e7eb;
border-radius: 1rem;
padding: 1.2rem;
}
summary {
cursor: pointer;
font-weight: 700;
font-size: 1.05rem;
}
audio,
video {
width: 100%;
margin-top: 1.2rem;
border-radius: 0.5rem;
}
● Pie de página
Paso 17
footer {
margin-top: 80px;
padding: 60px 7%;
background: #fafafa;
border-top: 1px solid #e5e7eb;
display: grid;
gap: 18px;
color: #666;
}
footer small {
color: #999;
}
● Adaptaciones a otras pantallas

Las media querys
/* ===========================================
RESPONSIVE
=========================================== */
/* Tablets grandes */
@media (max-width: 1024px) {
main {
width: 94%;
padding: 50px 0 80px;
}
header {
padding: 18px 4%;
}
section {
padding: 35px;
}
header h1 {
font-size: 2.5rem;
}
}
/* Tablets */
@media (max-width: 768px) {
html {
font-size: 15px;
}
header {
position: relative;
padding: 20px;
}
header h1 {
font-size: 2rem;
text-align: center;
}
header > p {
text-align: center;
margin: auto;
margin-top: 15px;
}
nav {
margin-top: 25px;
}
nav ul {
display: flex;
align-items: stretch;
gap: 5px;
}
nav li {
width: fit-content;
margin:0;
}
nav a {
display: block;
padding: 6px 10px;
width: 100%;
text-align: center;
}
main {
width: 95%;
gap: 35px;
padding: 35px 0 70px;
}
section {
padding: 30px 24px;
}
section h2 {
font-size: 1.7rem;
}
section h3 {
font-size: 1.2rem;
}
table {
display: block;
overflow-x: auto;
white-space: nowrap;
}
img {
width: 100%;
height: auto;
}
audio,
video {
width: 100%;
height: auto;
}
dialog {
width: 92%;
max-width: none;
}
}
/* Celulares */
@media (max-width: 480px) {
html {
font-size: 14px;
}
body {
line-height: 1.7;
}
header {
padding: 18px;
}
header h1 {
font-size: 1.6rem;
letter-spacing: -1px;
}
section {
padding: 22px 18px;
border-radius: 14px;
}
section h2 {
font-size: 1.45rem;
}
section h3 {
font-size: 1.1rem;
}
p,
li {
font-size: 0.95rem;
}
button {
width: 100%;
padding: 16px;
}
select {
width: 100%;
}
fieldset {
padding: 20px;
}
aside,
blockquote {
padding: 16px;
}
th,
td {
padding: 12px;
}
}
/* Pantallas muy grandes */
@media (min-width: 1600px) {
main {
width: 1250px;
}
header {
padding-left: 8%;
padding-right: 8%;
}
}