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í.

◆ Descargar Imágenes del Proyecto (.zip).
💻 Ver explicación en video de youtube.

sitio web

Preparación

Paso 1

  1. ❖ Creamos una carpeta nueva desde el explorador de archivos.
  2. ❖ 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.
  3. ❖ Creamos un archivo style.css
  4. ❖ 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;
}

css

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

css

Estilos al Header

Paso 3

Dividimos la pantalla de visual studio code.

css

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

css

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

css

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

}

css

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

}

css

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

    position: sticky;
    top:0;
    background: white;
    border-bottom: 1px solid lightgray;

}

css

Hijos del Header

Paso 4


header h1{

}

header > p{

}

header nav{

}

css

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;
}

css

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;
}

css

css

css

css

Estilos en el Main

Paso 6

Tenemos el elemento padre main y 9 hijos con algunos estilos compartidos. css

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;
}

css

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);
}

css

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;
    }

css css

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;
}

css

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): css

a éste (diseñado con css): 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;
}

css

css

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);
}
  1. ❖ 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.
  2. ❖ max-width:700px; es para evitar una foto gigante en pantallas grandes difusa.
  3. ❖ object-fit:cover; acomoda la imagen en todo el ancho sin deformarla.
  4. ❖ display:block; para que se muestre como elemento en bloque. La siguiente etiqueta renderiza abajo.
  5. ❖ 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.
  6. ❖ border-radius: 1rem; redondea los bordes.
  7. ❖ box-shadow genera una sombra en la imagen que se percibe como cierta profundidad.

css

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);
    }

css

Ubicación del modal

Estas propiedades centran el modal en la pantalla

  1. ❖ position: fixed;

  2. ❖ top: 50%;

  3. ❖ left: 50%;

  4. ❖ transform: translate(-50%, -50%);

css

Propiedades propias del modal

  1. ❖ width: min(600px, 90vw);
  2. ❖ max-height: 85vh;
  3. ❖ overflow: auto;
  4. ❖ margin: 0;
  5. ❖ padding: 35px;
  6. ❖ border: none;
  7. ❖ border-radius: 20px;
  8. ❖ background: #fff;
  9. ❖ box-shadow: 0 25px 60px rgba(0, 0, 0, 0.3);

css

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);
}

css

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

css

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%;
    }
    }



Descargar Código del Proyecto (.zip).