Curso de Frontend Developer

Toma las primeras clases gratis

¿Alguna vez te has preguntado cómo se construyen esas tarjetas de fidelidad interactivas que ves en tus cafeterías favoritas? En este tutorial, mostraré el paso a paso para crear tu propia “Loyalty Card” (tarjeta de fidelidad) con un diseño moderno, utilizando HTML para la estructura y CSS con Flexbox para el estilizado y la responsividad.

1.Esqueleto HTML
Cree una muestra de card de cafetería para canjear puntos junto con un botón de crear card. En el HTML utilicé, principalmente, divs y p.
Los divs se usan como contenedores para agrupar elementos y aplicar estilos en CSS. Dentro de la loyalty-card, el div con el diseño de la tarjeta se desglosa jerárquicamente en más divs, como: card-header, profile-circle, card-info, card-name, card-id, card-level, card-points. Cada div tiene su clase correspondiente.
También, cree un button con div (<button class=“create-card-button”>crear card</button>), Ambos tanto la card como el button están dentro de una misma section. Cada cual con su div correspondiente. Los p se usan para párrafos de texto, como el mensaje inicial y los datos de la tarjeta.

2.Estilos CSS
En el CSS, use flexbox para centrar la tarjeta y para su diseño interno. Como he mencionado en lineas anteriores, recalco nuevamente que dividí la tarjeta en diferentes divs que usaron display: flex para lograr el layout deseado.
El display: flex se aplica a los contenedores (.loyalty-card-section, .card-container, .loyalty-card, .card-header) para organizar a sus hijos directos. Los hijos indirectos son los elementos de texto o las imágenes individuales (como los párrafos, las imágenes de los regalos o el span de los puntos), adquieren un estilo de sus propias propiedades de texto, tamaño y color, y su posición es controlado por el contenedor flex del hijo directo.

3.Modelo de Caja Global (box-sizing: border-box;)
Por último, quiero mencionar que existen beneficios al aplicar un modelo de caja global con box-sizing: border-box; desde el principio:
Diseño más intuitivos y predecibles
Facilita el diseño responsivo
Evita el desbordamiento
Consistencia entre diferentes navegadores

/*codigo HTML*/
<section class="loyalty-card-section">
        <div class="card-container">
            <div class="loyalty-card">
                <div class="card-header">
                    <div class="profile-circle"></div>
                    <div class="card-info">
                        <p class="card-name">Italian Coffee Loyalty</p>
                        <p class="card-id">ID: 1234 5678 9012</p>
                        <p class="card-level">Miembro Premium</p>
                </div>
            </div>
            <div class="card-points">
                <p>Puntos Acumulados: <span>125</span></p>
            </div>
            </div>
        <button class="create-card-button">crear card</button>
        </div>
        </section>

/*codigo css*/
.loyalty-card-section {
    display: flex; /* para convertirla en un contenedor flex*/
    justify-content: center; /*para centrar horizontal y verticalmente todo el contenido de la sección, tarjeta y boton*/
    align-items: center;  /*para centrar horizontal y verticalmente todo el contenido de la sección, tarjeta y boton*/
    padding: 50px 20px; /* Espaciado interno */
    background-color: #f5f5f5; /* Fondo suave para esta sección */
}


.card-container {
    display: flex; /* para convertirla en un contenedor flex*/
    flex-direction: column; /* Apila la tarjeta y el botón verticalmente, uno sobre el otro */
    align-items: center; /* Centra horizontalmente */
    gap: 20px; /*Espacio entre la tarjeta y el botón*/
}


.loyalty-card {
    width: 350px; /*ancho tipico de tarjeta*/
    height: auto; /*alto de tarjeta de credito simulada*/
    background: linear-gradient(135deg,#4A2B1A 0%, #8B4513 100%); /* Degradado de colores café */
    border-radius: 15px; /* Bordes redondeados */
    box-shadow: 0 10px 20px rgba (0,0,0,0.2);  /* Sombra para dar profundidad */
    padding: 25px; /* Espaciado interno para el contenido de la tarjeta */
    color: white; /* Color de texto blanco para contrastar con el fondo */
    display: flex; /* Flexbox para el contenido interno de la tarjeta */
    flex-direction: column; /*aplica el header y los puntos en vertical*/
    justify-content: space-between; /* Espacio entre header y puntos */
    /* Modelo de Caja:
    Padding interno para el contenido de la tarjeta */
}


.card-header {
    display: flex; /*flexbox para el circulo y la info*/
    align-items: center; /* Centra los elementos verticalmente */
    gap: 20px; /*espacio entre el circulo y el txt*/
    margin-bottom: 20px;
}


.profile-circle {
    width: 70px; /* Ancho del círculo */
    height: 70px; /* Alto y ancho del círculo */
    border-radius: 50%; /* Hace que el div sea un círculo */
    border: 3px solid #fff; /* Borde blanco para el círculo */
    background-color: rgba(255, 255, 255, 0.2); /* Fondo semi-transparente */
    /* Modelo de Caja: Border y width/height */
    background-image: url('AuroraDawn.jpg');
    background-size: cover; /* Escala la imagen para que cubra todo el círculo */
    background-position: center; /* Centra la imagen dentro del círculo */
    background-repeat: no-repeat; /* Evita que la imagen se repita */
}


.card-info p {
    margin: 0; /*elimina margenes por defecto de los parrafos*/
}


.card-name {
    font-size: 1.4em;m/* Tamaño de fuente para el nombre de la tarjeta */
    font-weight: bold; /* Negrita */
    margin-bottom: 5px; /* Pequeño margen inferior */
}


.card-id {
    font-family: 'Courier New', monospace; /* Fuente monoespaciada para el ID */
    font-size: 1.1em; /* Pequeño margen inferior */
    opacity: 0.9; /* Ligeramente transparente */
}


.card-level {
    font-size: 0.9em; /* Tamaño de fuente más pequeño para el nivel */
    font-style: italic;/* Cursiva */
    opacity: 0.8; /* Más transparente */
}


.card-points {
    text-align: right; /* Alinea los puntos a la derecha */
    font-size: 1.3em; /* Tamaño de fuente para los puntos */
    font-weight: bold;  /* Negrita */
}


.card-points span {
    color: #FFD700; /* Color oro para los puntos */
}


.create-card-button {
    background-color: #8B4513; /* color del fondo del boton Marrón del botón */
    color: white; /*color de texto de  boton*/
    padding: 15px 30px; /*espacio interno del boton*/
    border: none; /*sin borde*/
    border-radius: 8px; /*bordes redondeados*/
    font-size: 1.2em; /*tamaño de la letra del boton*/
    cursor: pointer; /* Cambia al pasar por encima */
    transition: background-color 0.3s ease, transform 0.2s ease; /* Transiciones suaves */


}


.create-card-button:hover {
    background-color: #6A340F; /* Color de fondo más oscuro al pasar el ratón */
    transform: translateY(-2px); /* Efecto al pasar el ratón */
}


/* Modelo de Caja Global */
/* Esto asegura que el padding y el border se incluyan dentro del width/height del elemento. Facilita mucho el cálculo de tamaños y el diseño responsivo.*/
*, *::before, *::after {
    box-sizing: border-box; /* Incluye padding y border en el tamaño total del elemento */
}


Curso de Frontend Developer

Toma las primeras clases gratis

0 Comentarios

para escribir tu comentario

Artículos relacionados