Calendário

O componente é utilizado como uma agenda de eventos, a exemplo do calendário de monitorias da plataforma Stoodi.

Anatomia

Estados de interação

Normal
11:00
Matéria
11:00
Matéria

Pequeno texto de descrição do evento.

Hover
11:00
Matéria
11:00
Matéria

Pequeno texto de descrição do evento.

Focus
11:00
Matéria
11:00
Matéria

Pequeno texto de descrição do evento.

Disabled
11:00
Matéria
11:00
Matéria

Pequeno texto de descrição do evento.

Mobile

No contexto mobile a listagem de evento é sempre exibida em lista. A barra no topo da página, sempre fixa durante o scroll, indica a data referente ao bloco exibido em tela.

Código

HTML
Copiar código
Copiar Código
Exibir código
<div class="calendar-example testing"> <div class="tab-bar tab-calendar"> <button class="tab-link active" data-id="26"> <b>26</b><br/>Ter </button> <button class="tab-link" data-id="27"> <b>27</b><br/>Qua </button> <button class="tab-link" data-id="28"> <b>28</b><br/>Qui </button> <button class="tab-link" data-id="29"> <b>29</b><br/>Sex </button> <button class="tab-link" data-id="30"> <b>30</b><br/>Sab </button> </div> <div id="26" class="calendar-grid active"> <div class="calendar-title"> <span class="day">26</span> <span class="date">Jun<br/>Ter</span> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> </div> <div id="27" class="calendar-grid"> <div class="calendar-title"> <span class="day">27</span> <span class="date">Jun<br/>Qua</span> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> </div> <div id="28" class="calendar-grid"> <div class="calendar-title"> <span class="day">28</span> <span class="date">Jun<br/>Qui</span> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> </div> <div id="29" class="calendar-grid"> <div class="calendar-title"> <span class="day">29</span> <span class="date">Jun<br/>Sext</span> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> </div> <div id="30" class="calendar-grid"> <div class="calendar-title"> <span class="day">30</span> <span class="date">Jun<br/>Sab</span> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> <div class="calendar-box"> <span class="hour">11:00</span> <div class="info"> <span class="title">Matéria</span> <p class="desc">Pequeno texto de descrição do evento.</p> </div> </div> </div> </div>
SASS
Copiar código
Copiar Código
Exibir código
.calendar-grid{ float: left; box-sizing: border-box; padding-right: 20px; @media(max-width: $MQMobile){ &:not(.active){ display: none; } } &.active{ .calendar-title{ &:before{ content: ""; position: absolute; bottom: initial; top: -1px; left: 0; width: 100%; height: 3px; border-radius: 0; background-color: #3153f5; } } } } .tab-calendar{ @media(min-width: $MQMobile){ display: none; } display: -webkit-box; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; @media (max-width: $MQMobile){ position: relative; clear: both; margin: 0; padding-top: 15px; width: 300px; height: 105px; white-space: nowrap; overflow-x: auto; overflow-y: hidden; display: block; } .tab-link{ position: relative; -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto; box-sizing: border-box; background-color: transparent; border: none; outline: none; cursor: pointer; text-align: center; border-top: 1px solid #ebebeb; border-bottom: none; font-family: Lato; font-size: 0.75em; font-weight: normal; font-style: normal; font-stretch: normal; line-height: 1.5; letter-spacing: normal; color: #9b9b9b!important; padding-right: 10px; padding-left: 10px; &.active{ &:before{ content: ""; position: absolute; bottom: initial; top: -3px; left: 0; width: 100%; height: 3px; border-radius: 0; background-color: #3153f5; } } b{ font-family: Lato; font-size: 1.5em; font-weight: bold; font-style: normal; font-stretch: normal; line-height: 1.3; letter-spacing: normal; color: #1e2a54!important; } } } .calendar-title{ @media (max-width: $MQMobile){ display: none; } text-align: center; position: relative; background-color: #fff; border-radius: 4px; padding: 12px 10px; width: 230px; @media(max-width: $MQMobile){ width: 100%; } max-width: 100%; box-sizing: border-box; min-height: 48px; color: #fff; margin-bottom: 20px; border-top: 1px solid #ebebeb; .day{ font-family: Lato; font-size: 2.5em; font-weight: bold; font-style: normal; font-stretch: normal; line-height: 1.3; letter-spacing: normal; color: #1e2a54; } .date{ font-family: Lato; color: #1f2b54; font-size: 0.875em; font-weight: bold; font-style: normal; font-stretch: normal; letter-spacing: normal; display: inline-block; line-height: 22px; padding-left: 7px; } } .calendar-box{ position: relative; background-color: #3153f5; border-radius: 4px; padding: 12px 10px; width: 230px; max-width: 100%; box-sizing: border-box; min-height: 48px; color: #fff; margin-bottom: 20px; transition: .4s; @media(max-width: $MQMobile){ width: 100%; } .info{ padding-left: 50px; span.title{ color: #fff; display: block; font-family: Lato; font-size: 1em; font-weight: 500!important; font-style: normal; font-stretch: normal; line-height: 1.5; letter-spacing: normal; margin: 0; padding: 0; } .desc{ margin: 6px 0 0 0; padding: 0; display: block; font-family: Lato; font-size: 0.875em; font-weight: bold; font-style: normal; font-stretch: normal; line-height: 1.14; letter-spacing: normal; } } span.hour{ position: absolute; left: 10px; margin-top: 2px; } &.disabled{ pointer-events: none; background-color: #f1f1f1; color: #9b9b9b; span.title{ color: #9b9b9b; } } &:hover, &.hovered{ background-color: #1b68ff; } &:focus, &:active, &.focused{ background-color: #0a51fb; } }
JS
Copiar código
Copiar Código
Exibir código
$('body').on('click', '.tab-calendar button', function(e){ var id = $(this).data('id'); $('.calendar-grid, .tab-calendar button').removeClass('active'); $(this).addClass('active'); $('.calendar-grid#'+id).addClass('active'); });