<div class="app" data-js="app">
<nav class="menu">
<ul>
<li>
<a href="#inicio">Início</a>
</li>
<li>
<a href="#explorar">Explorar</a>
</li>
<li><a href="#notificacoes">Notificações</a></li>
<li><a href="#mensagens">Mensagens</a></li>
<li><a href="#salvos">Itens Salvos</a></li>
<li><a href="#listas">Listas</a></li>
<li><a href="#perfil">Perfil</a></li>
<li><button type="button" class="post-button">Publicar</button></li>
</ul>
</nav>
<header class="header">
<h1 class="header__title">Mural</h1>
<button type="button" class="header__menu" data-js="menu-button">Menu</button>
<button type="button" class="header__toggle" data-js="toggle-computation-button" data-js-state="off">Ligar computação pesada</button>
</header>
<main class="main">
<section class="timeline">
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Aristides Fátima</span>
</div>
<p class="post__content">
Webcam boa e barata, recomendações?
</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Cristiano Ester</span>
</div>
<p class="post__content">
Clubhouse has already peaked
</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Isaías Antelmo</span>
</div>
<p class="post__content">Hoje tem gravação do #devhealthy do @devnaestrada ! Prevejo coisas boas! 😁</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Otávia Gaspar</span>
</div>
<p class="post__content">
Kowalski, Lara, Doc & Einstein e Jareth curtindo meu kit onboarding! Agora quem sabe não rola um conteúdo de insteimentos tb pra ajudar a galera conforme eu vou aprendendo tb 🥰
</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Marina Aníbal</span>
</div>
<p class="post__content">
GitHub actions is failing because I changed the case of folder name. I've done what I need to have Git see the a, but it seems like GH Actions is using a cached version or doesn't know how to handle case sensitivity. Any thoughts? Hard to google.
</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Raymundo Geraldo</span>
</div>
<p class="post__content">
I'm one of these people now. Kids all have a laptop from school, nobody used the "kids iMac" anymore, so I guess it's mine!
</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Frederica Gabriela</span>
</div>
<p class="post__content">
Hoje aproveitei pra dar uma olhada no novo curso do @Willian_justen e acabou saindo esse site aqui, customizei os marcadores pra passar a ideia de que cada lugar tem uma comida típica, projetinho massa =) pra quem quiser ver mais detalhes: n0xt-cool-recipes.vercel.app
</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Lygia Andréia</span>
</div>
<p class="post__content">
Computação é fundamentalmente a ciência da abstração e da composição. Ferramentas melhores são aquelas que permitem abstrair e compor de forma mais expressiva.
</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Judite Noémia</span>
</div>
<p class="post__content">
Well thi sis neat: 26 people are reading something on my blog right now, but the most popular page only has 3 readers! I have ~80 posts, and ~10 of them are being read right now 😮
</p>
</article>
<article class="post">
<div class="post__author">
<div class="post__author__avatar"></div>
<span class="post__author__name">Sonia Arsénio</span>
</div>
<p class="post__content">
Tenho que falar, me sinto super emocionada de ver o tanto de gente me marcando em posts sobre admiração do meu trabalho. Mesmo que seja somente hoje, saber que estou me tornando referência na vida de algumas pessoas é algo gigante para mim. Dá uma motivação danada! Thanks 🙏 ✨
</p>
</article>
</section>
</main>
</div>
body {
background: lightgray;
}
.app {
position: relative;
background: white;
width: 600px;
height: calc(100vh - 40px);
margin: 20px auto 0;
overflow: hidden;
overflow-y: scroll;
}
.app:before {
position: absolute;
content: "";
display: block;
z-index: 1;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0);
transition: background 0.2s;
pointer-events: none;
}
.app[data-js-open="true"]:before {
background: rgba(0,0,0,0.2);
}
.app[data-js-open="true"] .menu {
left: 0px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
}
.menu {
position: absolute;
width: 200px;
height: 100%;
top: 0;
left: -200px;
z-index: 2;
transition: left 0.3s;
background: white;
}
.menu ul {
list-style-type: none;
margin: 0;
margin-top: 15px;
padding: 0;
display: flex;
flex-direction: column;
width: 100%;
}
.menu ul li a {
display: inline-block;
font-size: 1.2rem;
padding: 15px 15px;
margin: 5px 15px;
text-decoration: none;
color: rgb(15, 20, 25);
border-radius: 30px;
transition: background 0.3s, color 0.3s;
}
.menu ul li a:hover {
background: rgb(232, 245, 254);
color: rgb(29, 161, 242);
}
.post-button {
font-size: 1.2rem;
margin: 10px 15px 0;
background: rgb(29, 161, 242);
border: 0;
padding: 10px 15px;
color: white;
border-radius: 30px;
width: calc(100% - 30px);
box-sizing: border-box;
cursor: pointer;
transition: box-shadow 0.3s;
}
.post-button:hover {
box-shadow: rgb(0 0 0 / 8%) 0px 8px 28px;
}
.header {
padding: 20px;
display: flex;
gap: 20px;
align-items: center;
}
.header__toggle[data-js-state="on"] {
animation: pulse 1s infinite alternate;
}
.header__title {
margin: 0;
}
.timeline {
display: grid;
gap: 10px;
padding: 20px;
}
.post {
display: flex;
flex-direction: column;
gap: 10px;
border: 1px solid #ddd;
border-radius: 10px;
padding: 15px;
transition: all 0.3s;
cursor: pointer;
}
.post:hover {
padding: 20px;
background: rgb(29, 161, 242, 0.4);
box-shadow: rgb(0 0 0 / 8%) 0px 8px 28px;
}
.post__author {
display: flex;
gap: 5px;
align-items: center;
}
.post__author__avatar {
display: inline-block;
width: 25px;
height: 25px;
background: rgb(29, 161, 242);
border-radius: 50%;
}
.post__author__name {
font-weight: bold;
}
.post__content {
margin: 0;
}
@keyframes pulse {
0% {
opacity: 0.2;
}
100% {
opacity: 1;
}
}
let menuButton$ = document.querySelector("[data-js='menu-button']");
let app$ = document.querySelector("[data-js='app']");
let toggleComputationButton$ = document.querySelector(
"[data-js='toggle-computation-button']"
);
let computationInterval;
menuButton$.addEventListener("click", handleMenuButtonClick);
toggleComputationButton$.addEventListener(
"click",
handleToggleComputationClick
);
function handleMenuButtonClick(event) {
event.stopPropagation();
app$.setAttribute("data-js-open", "true");
app$.addEventListener("click", handleAppOpenMenuClick);
}
function handleAppOpenMenuClick() {
app$.setAttribute("data-js-open", "false");
app$.removeEventListener("click", handleAppOpenMenuClick);
}
function handleToggleComputationClick() {
let isOn = toggleComputationButton$.getAttribute("data-js-state") === "on";
if (isOn) {
toggleComputationButton$.innerHTML = "Ligar computação pesada";
toggleComputationButton$.setAttribute("data-js-state", "off");
clearInterval(computationInterval);
} else {
toggleComputationButton$.innerHTML = "Desligar computação pesada";
toggleComputationButton$.setAttribute("data-js-state", "on");
computationInterval = setInterval(function () {
let iterations = 100;
let multiplier = 1000000;
console.log("calculatePrimes", calculatePrimes(iterations, multiplier));
}, 12);
}
}
/* From MDN https://developer.mozilla.org/en-US/docs/Tools/Performance/Scenarios/Intensive_JavaScript */
function calculatePrimes(iterations, multiplier) {
var primes = [];
for (var i = 0; i < iterations; i++) {
var candidate = i * (multiplier * Math.random());
var isPrime = true;
for (var c = 2; c <= Math.sqrt(candidate); ++c) {
if (candidate % c === 0) {
// not prime
isPrime = false;
break;
}
}
if (isPrime) {
primes.push(candidate);
}
}
return primes;
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.