Demo
El proyecto esta disponible en https://arturomauriciodev.github.io/socialMedia/.
Tabla de Contenidos
Descripción
Este proyecto realizará la maquetación del siguiente reto en HTML, CSS y JavaScript considerando los siguientes requerimientos:
Para mobile


Para desktop

El reto
El reto consiste en construir esta página inicial y que se parezca lo más posible al diseño.
Los usuarios deberían poder:
- Ver el diseño óptimo para el sitio según el tamaño de pantalla de su dispositivo (Mobile First es requerido)
- Ver el efecto hover para todos los elementos interactivos de la página
- Cambiar el tema de color de su preferencia
También se utilizó el archivo de style-guide.md, que contiene la información necesaria, de la paleta de colores y fuentes.
Créditos por el diseño y reto
Este reto pertenece a la lista de retos de Frontend Mentor. Para más información puede visitar este enlace.
Construcción del proyecto
Se construyó utilizando la metodología mobile first para dispositivos de 375px, 1024px y 1440px. Asimismo, para los estilos se hace el uso de la metodología BEM. También se utiliza JavaScript Vanilla para la manipulación del DOM haciendo funcional el theme switcher para cambiar el color del tema de acuerdo con su preferencia.
A continuación se mostrará algunos detalles y buenas prácticas:
Estructura HTML
Carga independiente de las hojas de estilos.
<link rel="stylesheet" href="./styles/styles.css">
<link rel="stylesheet" href="./styles/desktop1024.css" media="screen and (min-width: 1024px)">
<link rel="stylesheet" href="./styles/desktop1440.css" media="screen and (min-width: 1440px)">
Utilización adecuada de etiquetas para mejorar la accesibilidad.
<article>
<h2 class="header__h2 light">
Social Media Dashboard
</h2>
<article class="header__article">
<small class="header__small light">
Total Followers: 23,004
</small>
<div class="header__div light">
<p>
Dark Mode
</p>
<label class="switch">
<input id="switch" type="checkbox">
<span class="slider light round"></span>
</label>
</div>
</article>
</article>
Estilos en CSS
Uso de variables
:root {
font-family: 'Inter', sans-serif;
--scroll-gap: 1.5rem;
/* Primary */
--LimeGreen: hsl(163, 72%, 41%);
--BrightRed: hsl(356, 69%, 56%);
--Facebook: hsl(208, 92%, 53%);
--Twitter: hsl(203, 89%, 53%);
--Instagram: linear-gradient(to right, hsl(37, 97%, 70%), hsl(329, 70%, 58%));
--YouTube: hsl(348, 97%, 39%);
/* #### Light Theme */
--White-BG: hsl(0, 0%, 100%);
--VeryPaleBlue-TopBGPattern: hsl(225, 100%, 98%);
--LightGrayishBlue-CardBG: hsl(227, 47%, 96%);
--DarkGrayishBlue-Text: hsl(228, 12%, 44%);
--VeryDarkBlue-Text: hsl(230, 17%, 14%);
/* #### Light Theme */
--Toggle: hsl(230, 22%, 74%);
/* #### Dark Theme */
--VeryDarkBlue-BG: hsl(230, 17%, 14%);
--VeryDarkBlue-Top-BG-Pattern: hsl(232, 19%, 15%);
--DarkDesaturatedBlue-CardBG: hsl(228, 28%, 20%);
--DesaturatedBlue-Text: hsl(228, 34%, 66%);
--White-Text: hsl(0, 0%, 100%);
/* #### Dark Theme */
--Toggle-dark: linear-gradient(to right, hsl(210, 78%, 56%), hsl(146, 68%, 55%));
}
Construcción del slider
/* The switch - the box around the slider */
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 28px;
}
/* Hide default HTML checkbox */
.switch input {
opacity: 0;
width: 0;
height: 0;
}
/* The slider */
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: var(--Toggle);
-webkit-transition: .4s;
transition: .4s;
}
.slider.round.dark {
background-image: var(--Toggle-dark);
}
.slider:before {
position: absolute;
content: "";
height: 23px;
width: 29px;
left: 2px;
bottom: 2px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
.slider.dark:before {
background-color: var(--VeryDarkBlue-BG);
}
input:checked+.slider {
background-color: #2196F3;
}
input:focus+.slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked+.slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
.parent {
padding: var(--scroll-gap);
/* height: 40vh; */
overflow: auto;
scroll-snap-type: mandatory;
}
.child {
/* height: calc(50vh - 3 * var(--scroll-gap)); */
/* scroll-snap-align: center; */
padding-top: 0.3rem;
display: grid;
border-radius: 7px;
}
.child:not(:last-child) {
margin-bottom: var(--scroll-gap);
}
.child .container {
background-color: var(--LightGrayishBlue-CardBG);
padding: 0;
width: 100%;
border-bottom-left-radius: 7px;
border-bottom-right-radius: 7px;
}
Uso de flexbox
.container__footer {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 1rem;
}
Manipulando el DOM con JavaScript
Uso de toggle para el menú
let switchButton = document.getElementById('switch')
let light = document.getElementsByClassName('light')
function toggle() {
for (let i = 0; i < light.length; i++) {
light[i].classList.toggle('dark')
}
}
switchButton.addEventListener('click', toggle)
Licencia
Este proyecto esta bajo la licencia de MIT.
Autor
Made with 💜 by ArturoMauricioDev