Atualização do calendario

This commit is contained in:
2026-03-23 09:40:59 -03:00
parent c49f619569
commit f675979736
2 changed files with 597 additions and 414 deletions

View File

@@ -1,15 +1,15 @@
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
box-sizing: border-box; box-sizing: border-box;
} }
body { body {
font-family: 'Poppins', sans-serif; font-family: 'Poppins', sans-serif;
} }
/* ===== HEADER ===== */ /* ===== HEADER ===== */
#header { #header {
width: 100%; width: 100%;
height: 50px; height: 50px;
position: fixed; position: fixed;
@@ -19,16 +19,16 @@ body {
display: flex; display: flex;
align-items: center; align-items: center;
z-index: 10; z-index: 10;
} }
#title { #title {
color: white; color: white;
padding-left: 20px; padding-left: 20px;
font-size: 28px; font-size: 28px;
} }
/* ===== BARRA ESQUERDA ===== */ /* ===== BARRA ESQUERDA ===== */
#barraesquerda { #barraesquerda {
position: fixed; position: fixed;
top: 50px; top: 50px;
left: 0; left: 0;
@@ -40,53 +40,98 @@ body {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
font-family: 'Inter', sans-serif; font-family: 'Inter', sans-serif;
} }
/* ===== MINI CALENDÁRIO ===== */ /* ===== MINI CALENDÁRIO ===== */
#calendario { #calendario {
margin-top: 10px; margin-top: 10px;
} }
.calendariotop { .calendariotop {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 10px; margin-bottom: 10px;
} }
#mes { #mes {
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
} }
#calendarseta button { #calendarseta {
display: flex;
gap: 15px; /* espaço entre as setas */
}
#calendarseta button {
background: transparent; background: transparent;
border: none; border: none;
color: white; color: white;
font-size: 18px; font-size: 26px; /* tamanho maior */
cursor: pointer; cursor: pointer;
} padding: 5px 10px; /* aumenta área de clique */
transition: transform 0.2s ease;
}
.calendariodia { #calendarseta button:hover {
transform: scale(1.2); /* efeito ao passar o mouse */
}
.setas-grande {
display: flex;
align-items: center;
gap: 15px;
}
.titulo-mes {
font-size: 16px;
font-weight: 500;
}
.dia-semana {
background: #f0f0f0;
text-align: center;
font-weight: 600;
font-size: 12px;
padding: 10px 0;
border: 1px solid #ddd;
}
.antGrande,
.proxGrande {
background: transparent;
border: none;
color: #1f3b57;
font-size: 26px;
cursor: pointer;
padding: 5px 10px;
transition: transform 0.2s ease;
}
.antGrande:hover,
.proxGrande:hover {
transform: scale(1.2);
}
.calendariodia {
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
} }
.calendariodia th { .calendariodia th {
font-size: 11px; font-size: 11px;
opacity: 0.7; opacity: 0.7;
} }
.calendariodia td { .calendariodia td {
text-align: center; text-align: center;
padding: 6px; padding: 6px;
font-size: 12px; font-size: 12px;
border-radius: 50%; border-radius: 50%;
position: relative; position: relative;
} }
/* bolinha */ /* bolinha */
.calendariodia td::after { .calendariodia td::after {
content: ""; content: "";
width: 5px; width: 5px;
height: 5px; height: 5px;
@@ -96,92 +141,92 @@ body {
bottom: -2px; bottom: -2px;
left: 50%; left: 50%;
transform: translateX(-50%); transform: translateX(-50%);
} }
.outromes { .outromes {
opacity: 0.4; opacity: 0.4;
} }
.calendariodia td.today { .calendariodia td.today {
background: #114455; background: #114455;
border-radius: 30%; border-radius: 30%;
height: 0px; height: 0px;
width: 5px; width: 5px;
} }
/* ===== AGENDA ===== */ /* ===== AGENDA ===== */
.agenda-header { .agenda-header {
margin-top: 15px; margin-top: 15px;
border-top: 1px solid rgba(255,255,255,0.3); border-top: 1px solid rgba(255,255,255,0.3);
border-bottom: 1px solid rgba(255,255,255,0.3); border-bottom: 1px solid rgba(255,255,255,0.3);
padding: 8px 0; padding: 8px 0;
font-size: 13px; font-size: 13px;
} }
.evento { .evento {
margin-top: 10px; margin-top: 10px;
padding-left: 10px; padding-left: 10px;
border-left: 3px solid white; border-left: 3px solid white;
} }
.evento.azul { .evento.azul {
border-color: #00c2ff; border-color: #00c2ff;
} }
.evento.rosa { .evento.rosa {
border-color: #ff4fa3; border-color: #ff4fa3;
} }
.hora { .hora {
font-size: 11px; font-size: 11px;
opacity: 0.7; opacity: 0.7;
} }
.titulo { .titulo {
font-size: 13px; font-size: 13px;
} }
.link { .link {
font-size: 11px; font-size: 11px;
color: #ffdede; color: #ffdede;
} }
/* ===== FERIADOS ===== */ /* ===== FERIADOS ===== */
.feriados-header { .feriados-header {
margin-top: 15px; margin-top: 15px;
font-weight: 600; font-weight: 600;
} }
.feriado { .feriado {
display: flex; display: flex;
gap: 8px; gap: 8px;
margin-top: 8px; margin-top: 8px;
font-size: 13px; font-size: 13px;
} }
.dot { .dot {
width: 6px; width: 6px;
height: 6px; height: 6px;
background: #d4ff6a; background: #d4ff6a;
border-radius: 50%; border-radius: 50%;
} }
/* ===== MAIN ===== */ /* ===== MAIN ===== */
.main { .main {
margin-left: 320px; margin-left: 320px;
margin-top: 50px; margin-top: 50px;
min-height: calc(100vh - 50px); min-height: calc(100vh - 50px);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
background: #f5f5f5; background: #f5f5f5;
} }
/* ===== TOPBAR ===== */ /* ===== TOPBAR ===== */
.topbar { .topbar {
height: 70px; height: 70px;
background: #eaeaea; background: #eaeaea;
border-bottom: 3px solid #c0392b; border-bottom: 3px solid #c0392b;
@@ -191,55 +236,55 @@ body {
justify-content: space-between; justify-content: space-between;
padding: 0 25px; padding: 0 25px;
} }
.topbar h1 { .topbar h1 {
font-size: 24px; font-size: 24px;
color: #1f3b57; color: #1f3b57;
} }
/* USER AREA */ /* USER AREA */
.user-area { .user-area {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 20px; gap: 20px;
} }
.icone { .icone {
font-size: 20px; font-size: 20px;
cursor: pointer; cursor: pointer;
} }
.perfil { .perfil {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 10px;
} }
.avatar { .avatar {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 50%; border-radius: 50%;
background: url('https://i.pravatar.cc/100') center/cover; background: url('https://i.pravatar.cc/100') center/cover;
} }
.info { .info {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.nome { .nome {
font-weight: 600; font-weight: 600;
color: #1f3b57; color: #1f3b57;
} }
.cargo { .cargo {
font-size: 12px; font-size: 12px;
color: #666; color: #666;
} }
/* ===== SUBHEADER ===== */ /* ===== SUBHEADER ===== */
.subheader { .subheader {
background: #eaeaea; background: #eaeaea;
border-bottom: 3px solid #c0392b; border-bottom: 3px solid #c0392b;
padding: 10px 20px; padding: 10px 20px;
@@ -247,60 +292,119 @@ body {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.subheader h2 { .subheader h2 {
color: #1f3b57; color: #1f3b57;
} }
/* BOTÕES */ /* BOTÕES */
.view-buttons button { .view-buttons button {
border: none; border: none;
padding: 5px 10px; padding: 5px 10px;
border-radius: 6px; border-radius: 6px;
cursor: pointer; cursor: pointer;
background: transparent; background: transparent;
} }
.view-buttons .active { .view-buttons .active {
background: #c0392b; background: #c0392b;
color: white; color: white;
} }
/* ===== MÊS ===== */ /* ===== MÊS ===== */
.month-title { .month-title {
padding: 10px 20px; padding: 10px 20px;
font-size: 16px; font-size: 16px;
} }
/* ===== CALENDÁRIO GRANDE ===== */
.calendar-area {
flex: 1;
margin: 20px;
background: #ddd;
border-radius: 8px;
/* ===== CALENDÁRIO GRANDE ===== */
.calendar-area {
display: grid; display: grid;
grid-template-columns: repeat(7, 1fr); grid-template-columns: repeat(7, 1fr);
grid-auto-rows: 120px;
/* PRIMEIRA LINHA MENOR */
grid-template-rows: 40px repeat(6, 120px);
} }
.dia-box { /* DIAS DA SEMANA */
background: #fff; .dia-semana {
background: #f0f0f0;
text-align: center;
font-weight: 600;
font-size: 13px;
padding: 10px 0;
border: 1px solid #ddd; border: 1px solid #ddd;
} }
.dia-box:hover { .dia-box {
background: #fff;
border: 1px solid #ddd;
}
.dia-box:hover {
background: #eaeaff; background: #eaeaff;
} }
.icone-img { .icone-img {
width: 20px; width: 20px;
height: 20px; height: 20px;
cursor: pointer; cursor: pointer;
object-fit: contain; object-fit: contain;
transition: transform 0.2s ease; transition: transform 0.2s ease;
}
.icone-img:hover {
transform: scale(1.15);
}
.calendar-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 20px;
background: #eee;
border-bottom: 1px solid #ccc;
} }
.icone-img:hover { /* ESQUERDA (MÊS + SETAS) */
transform: scale(1.15); .mes-nav {
display: flex;
align-items: center;
gap: 10px;
}
.titulo-mes {
font-size: 18px;
font-weight: 600;
color: #1f3b57;
}
.seta {
background: transparent;
border: none;
font-size: 22px;
cursor: pointer;
color: #c0392b;
}
/* DIREITA (DIA / SEMANA / MÊS) */
.view-switch {
display: flex;
gap: 10px;
}
.view-switch button {
border: none;
padding: 6px 14px;
border-radius: 8px;
background: transparent;
cursor: pointer;
font-weight: 500;
color: #1f3b57;
}
/* BOTÃO ATIVO (MÊS) */
.view-switch .active {
background: #c0392b;
color: white;
} }

View File

@@ -81,35 +81,48 @@
<!-- MÊS --> <!-- MÊS -->
<div class="month-title"> <div class="calendar-header">
<span></span>
Janeiro, 2025 <!-- ESQUERDA (SETAS + MÊS) -->
<span></span> <div class="mes-nav">
<button class="seta antGrande"></button>
<span class="titulo-mes">Janeiro, 2025</span>
<button class="seta proxGrande"></button>
</div> </div>
<!-- DIREITA (DIA / SEMANA / MÊS) -->
<div class="view-switch">
<button>Dia</button>
<button>Semana</button>
<button class="active">Mês</button>
</div>
</div>
<!-- CALENDÁRIO GRANDE --> <!-- CALENDÁRIO GRANDE -->
<div class="calendar-area" id="calendarArea"></div> <div class="calendar-area" id="calendarArea"></div>
</div> </div>
<!-- SCRIPT --> <script>
<script> /* ===== VARIÁVEIS ===== */
/* ===== MINI CALENDÁRIO ===== */ let dataMini = new Date();
let dataGrande = new Date();
let dataAtual = new Date(); /* ===== MESES ===== */
const meses = [
function renderCalendario() {
const mesEl = document.getElementById("mes");
const diasEl = document.getElementById("dias");
const meses = [
"Janeiro", "Fevereiro", "Março", "Abril", "Janeiro", "Fevereiro", "Março", "Abril",
"Maio", "Junho", "Julho", "Agosto", "Maio", "Junho", "Julho", "Agosto",
"Setembro", "Outubro", "Novembro", "Dezembro" "Setembro", "Outubro", "Novembro", "Dezembro"
]; ];
let ano = dataAtual.getFullYear(); /* ===== MINI CALENDÁRIO ===== */
let mes = dataAtual.getMonth(); function renderCalendario() {
const mesEl = document.getElementById("mes");
const diasEl = document.getElementById("dias");
let ano = dataMini.getFullYear();
let mes = dataMini.getMonth();
mesEl.textContent = `${meses[mes]} ${ano}`; mesEl.textContent = `${meses[mes]} ${ano}`;
@@ -119,7 +132,7 @@
diasEl.innerHTML = ""; diasEl.innerHTML = "";
let diaAtual = 1; let diaAtualNum = 1;
let diaSeguinte = 1; let diaSeguinte = 1;
let totalCelulas = primeiroDia + ultimoDia; let totalCelulas = primeiroDia + ultimoDia;
@@ -136,18 +149,18 @@
let dia = ultimoDiaMesAnterior - (primeiroDia - pos - 1); let dia = ultimoDiaMesAnterior - (primeiroDia - pos - 1);
linha.innerHTML += `<td class="outromes">${dia}</td>`; linha.innerHTML += `<td class="outromes">${dia}</td>`;
} }
else if (diaAtual <= ultimoDia) { else if (diaAtualNum <= ultimoDia) {
let hoje = new Date(); let hoje = new Date();
let classeHoje = let classeHoje =
diaAtual === hoje.getDate() && diaAtualNum === hoje.getDate() &&
mes === hoje.getMonth() && mes === hoje.getMonth() &&
ano === hoje.getFullYear() ano === hoje.getFullYear()
? "today" ? "today"
: ""; : "";
linha.innerHTML += `<td class="${classeHoje}">${diaAtual}</td>`; linha.innerHTML += `<td class="${classeHoje}">${diaAtualNum}</td>`;
diaAtual++; diaAtualNum++;
} }
else { else {
linha.innerHTML += `<td class="outromes">${diaSeguinte}</td>`; linha.innerHTML += `<td class="outromes">${diaSeguinte}</td>`;
@@ -157,65 +170,124 @@
diasEl.appendChild(linha); diasEl.appendChild(linha);
} }
} }
document.querySelector(".prox").onclick = () => { /* ===== CALENDÁRIO GRANDE ===== */
dataAtual.setMonth(dataAtual.getMonth() + 1); function renderCalendarioGrande() {
renderCalendario();
};
document.querySelector(".ant").onclick = () => {
dataAtual.setMonth(dataAtual.getMonth() - 1);
renderCalendario();
};
/* ===== CALENDÁRIO GRANDE ===== */
function renderCalendarioGrande() {
const area = document.getElementById("calendarArea"); const area = document.getElementById("calendarArea");
const titulo = document.querySelector(".titulo-mes");
let ano = dataGrande.getFullYear();
let mes = dataGrande.getMonth();
/* ATUALIZA TÍTULO */
titulo.textContent = `${meses[mes]}, ${ano}`;
area.innerHTML = ""; area.innerHTML = "";
for (let i = 0; i < 35; i++) { /* DIAS DA SEMANA */
area.innerHTML += `<div class="dia-box"></div>`; const diasSemana = ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"];
diasSemana.forEach(dia => {
area.innerHTML += `<div class="dia-semana">${dia}</div>`;
});
let primeiroDia = new Date(ano, mes, 1).getDay();
let ultimoDia = new Date(ano, mes + 1, 0).getDate();
let ultimoMesAnterior = new Date(ano, mes, 0).getDate();
let total = primeiroDia + ultimoDia;
let linhas = Math.ceil(total / 7);
let diaAtualNum = 1;
let proxMes = 1;
for (let i = 0; i < linhas * 7; i++) {
let classe = "dia-box";
let numero = "";
if (i < primeiroDia) {
numero = ultimoMesAnterior - (primeiroDia - i - 1);
classe += " outro-mes";
} }
else if (diaAtualNum <= ultimoDia) {
numero = diaAtualNum;
let hoje = new Date();
if (
diaAtualNum === hoje.getDate() &&
mes === hoje.getMonth() &&
ano === hoje.getFullYear()
) {
classe += " today";
} }
/* ===== DADOS ===== */ diaAtualNum++;
}
let agendaData = [ else {
{ numero = proxMes++;
hora: "08:15 09:15", classe += " outro-mes";
titulo: "Coçar oq fazer",
link: "https://youtube.com",
cor: "azul"
},
{
hora: "09:00 10:00",
titulo: "COMO QUE DIMINUI A FONTE?",
link: "https://sccor.com",
cor: "azul"
},
{
hora: "11:00 11:45",
titulo: "Pintar boobie-goods",
cor: "rosa"
},
{
hora: "18:20 23:00",
titulo: "Ir pro curso (infelizmente)",
link: "dom 4, BBP",
cor: "azul"
} }
];
let feriadosData = [ area.innerHTML += `<div class="${classe}">${numero}</div>`;
{ texto: "15 Proclamação da República" }, }
{ texto: "20 Dia Nacional da Consciência Negra" } }
];
/* ===== RENDER AGENDA ===== */ /* ===== ATUALIZAÇÕES ===== */
function atualizarMini() {
renderCalendario();
}
function renderAgenda() { function atualizarGrande() {
renderCalendarioGrande();
}
/* ===== SETAS MINI ===== */
document.querySelector(".prox").onclick = () => {
dataMini.setMonth(dataMini.getMonth() + 1);
atualizarMini();
};
document.querySelector(".ant").onclick = () => {
dataMini.setMonth(dataMini.getMonth() - 1);
atualizarMini();
};
/* ===== SETAS GRANDE ===== */
document.querySelector(".antGrande").onclick = () => {
dataGrande.setMonth(dataGrande.getMonth() - 1);
atualizarGrande();
};
document.querySelector(".proxGrande").onclick = () => {
dataGrande.setMonth(dataGrande.getMonth() + 1);
atualizarGrande();
};
/* ===== BOTÕES DIA / SEMANA / MÊS ===== */
const botoesView = document.querySelectorAll(".view-switch button");
botoesView.forEach(btn => {
btn.addEventListener("click", () => {
botoesView.forEach(b => b.classList.remove("active"));
btn.classList.add("active");
const tipo = btn.textContent;
if (tipo === "Dia") {
alert("Modo DIA (você pode implementar depois)");
}
else if (tipo === "Semana") {
alert("Modo SEMANA (você pode implementar depois)");
}
else {
atualizarGrande(); // Mês já funciona
}
});
});
/* ===== AGENDA ===== */
function renderAgenda() {
const container = document.getElementById("agenda"); const container = document.getElementById("agenda");
container.innerHTML = ` container.innerHTML = `
@@ -233,11 +305,10 @@
</div> </div>
`; `;
}); });
} }
/* ===== RENDER FERIADOS ===== */ /* ===== FERIADOS ===== */
function renderFeriados() {
function renderFeriados() {
const container = document.getElementById("feriados"); const container = document.getElementById("feriados");
container.innerHTML = ` container.innerHTML = `
@@ -252,16 +323,24 @@
</div> </div>
`; `;
}); });
} }
/* ===== INICIAR ===== */ /* ===== DADOS ===== */
let agendaData = [
{ hora: "08:15 09:15", titulo: "Evento 1", cor: "azul" },
{ hora: "10:00 11:00", titulo: "Evento 2", cor: "rosa" }
];
renderCalendario(); let feriadosData = [
renderCalendarioGrande(); { texto: "01 Ano Novo" }
renderAgenda(); ];
renderFeriados();
</script>
/* ===== INICIAR ===== */
atualizarMini();
atualizarGrande();
renderAgenda();
renderFeriados();
</script>
</body> </body>
</html> </html>