Inspired by the preview of the Microsoft Fluent Design System calendar. I thought it looked really pretty so I made it for the web.
https://www.engadget.com/2017/05/11/microsofts-design-rules-push-windows-beyond-mere-rectangles/
| <main class="calendar-contain"> | |
| <section class="title-bar"> | |
| <button class="title-bar__burger"> | |
| <span class="burger__lines">Toggle Menu</span> | |
| </button> | |
| <span class="title-bar__year"> | |
| Calendar > May 2017 | |
| </span> | |
| <span class="title-bar__month"> | |
| Month | |
| </span> | |
| <div class="title-bar__controls"> | |
| <div class="title-bar__minimize"></div> | |
| <div class="title-bar__maximize"></div> | |
| <div class="title-bar__close"></div> | |
| </div> | |
| </section> | |
| <aside class="calendar__sidebar"> | |
| <div class="sidebar__nav"> | |
| <!-- Icons by Icons8 --> | |
| <span class="sidebar__nav-item"><img class="icon icons8-Plus-Math" width="22px" height="22px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAWUlEQVRYR+2WMQoAIAgA9f+PrsWmEMQSEa7Z8rzEUmle2pxfABhvYFkPpQtJb7TEAGAAAxgoM3AO/v1YXoPPm4TtANHKy64AAAxgAANjDERB3bjXXzEA8w1s3k4WIU0YaEoAAAAASUVORK5CYII="></span> | |
| <span class="sidebar__nav-item"><img class="icon icons8-Share" width="22px" height="22px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAB+klEQVRYR+2W0VEdMQxFDxUQKoBUkFABUAFQAaGDUEFCBQkVABUAFRAqgFRAUgFQQTJnxprx2/V67f3h5+nnzfNK8vXVteQN3tk23nl/1gCWMrAD/AD2UwlvgTPgtbekSwB8AJ4Bf3Nz84+9IJYAuAJOgAfgKGNgD7gGvvSwsATAH2Ab2MpOKxsvgN9kodl6AHha6279tRyAa5ZFE4R6UBez1gogaM8T/gKO08JNJsjw+ZmAVEG0AMg3Pwf8/wRsDjK/AZ+TBr6lbxfA1xqCOQDS7um0A8BTa1L+fSBC/0u/lsfJ0mQ55gCE4KyplPaYJ1czVWHWAHidLoG/mfB6AIQgvTGnqXSj+BoAaTusBTegCRbusnKthNUABP157Rv2XHGxVd/XylAD8C+lmtNJDVQ0KH2KeaaSDxuL104hhsrnmIhh5bWMxmWHHMWXABjwODFsdhtAdMWXANSGzaSYMkpCvE3DqgQgar902DiW7ZKl+JEWSgBKCUITttvhO2Coh1r8qKeUAASFpWHTMu+jhKX4UQmnRFgaNp7Ufu9Aqpk+MYxyP9mTyZVnW+0a2vu9RrZSBeWLJ9qr31wTqKaf3+18ce0iRtr1s7WP3ow9TcauJr0CqpkbullMzqpzD4BIZHLBeOpPafF3OqWbCrLZlgBoTt7iuAawZuA/xAh3Ifk/Dm0AAAAASUVORK5CYII="></span> | |
| <span class="sidebar__nav-item"><img class="icon icons8-Up" width="22px" height="22px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAxklEQVRYR+3VwQ2DMAyF4Z8NOkI36AodpZ2sjMAoHaWdoJWlIEXI4RHnwMWROAH2ZxuSiZPXdHJ+EjDagUcZ4Rwd5QjAkr9K4icQQkQBdfK1+BAiAvCShxG9gG3b6xGExtED8Gb+K6VbnNA3cRTQCl4DzNKNOALYC7oFdCMUQFXkAboQCvAGbkDrF2sBasQXuAIfb7NSgAtwB5bGTrcHWBFWhF3uUgC1wyqAen/4NExAdiA7kB3IDmQH5GGjHhg9DVV8eT8Bf2HqNiEP+isaAAAAAElFTkSuQmCC"></span> | |
| <span class="sidebar__nav-item"><img class="icon icons8-Down" width="22px" height="22px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA4UlEQVRYR+2WgQnCMBBFXzdwBSdwBUfRyXQER3EUN1AOEgnxLrkkhYCkUFpI7/+Xf1fajcnHNtmfBTCawDu0sFunuzAYL4CVwEpgJbAS+P8EDsAZeBj/DbUELsAznKpE7WMkxSfgCtwVhRKAmN+AF3AM1x+JGkAUkUINwgKo1X1BagDyYElMA3Cbi7gHoASRAzSZtwBYEClAs3krgAYhQxbnI73XBrbrLdCK0p3m69bbYv79e2cgF9Agms17WpCCdPU830lvAlFHIORw93xvALO33oXRBLw+uw/hsHEUmJ7ABzErNiGyzfJcAAAAAElFTkSuQmCC"></span> | |
| </div> | |
| <h2 class="sidebar__heading">Wednesday<br>April 6</h2> | |
| <ul class="sidebar__list"> | |
| <li class="sidebar__list-item sidebar__list-item--complete"><span class="list-item__time">8.30</span> Team Meeting</li> | |
| <li class="sidebar__list-item sidebar__list-item--complete"><span class="list-item__time">10.00</span> Lunch with Sasha</li> | |
| <li class="sidebar__list-item"><span class="list-item__time">2.30</span> Design Review</li> | |
| <li class="sidebar__list-item"><span class="list-item__time">4.00</span> Get Groceries</li> | |
| </ul> | |
| </aside> | |
| <section class="calendar__days"> | |
| <section class="calendar__top-bar"> | |
| <span class="top-bar__days">Mon</span> | |
| <span class="top-bar__days">Tue</span> | |
| <span class="top-bar__days">Wed</span> | |
| <span class="top-bar__days">Thu</span> | |
| <span class="top-bar__days">Fri</span> | |
| <span class="top-bar__days">Sat</span> | |
| <span class="top-bar__days">Sun</span> | |
| </section> | |
| <section class="calendar__week"> | |
| <div class="calendar__day inactive"> | |
| <span class="calendar__date">30</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day inactive"> | |
| <span class="calendar__date">31</span> | |
| <span class="calendar__task">4</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">1</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">2</span> | |
| <span class="calendar__task">3</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">3</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">4</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">5</span> | |
| <span class="calendar__task">4</span> | |
| </div> | |
| </section> | |
| <section class="calendar__week"> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">6</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">7</span> | |
| <span class="calendar__task">3</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">8</span> | |
| <span class="calendar__task">3</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">9</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">10</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">11</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">12</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| </section> | |
| <section class="calendar__week"> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">13</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">14</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day today"> | |
| <span class="calendar__date">15</span> | |
| <span class="calendar__task calendar__task--today">4 items</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">16</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">17</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">18</span> | |
| <span class="calendar__task">4</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">19</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| </section> | |
| <section class="calendar__week"> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">20</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">21</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">22</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">23</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">24</span> | |
| <span class="calendar__task">5</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">25</span> | |
| <span class="calendar__task">3</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">26</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| </section> | |
| <section class="calendar__week"> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">27</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day"> | |
| <span class="calendar__date">28</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| <div class="calendar__day inactive"> | |
| <span class="calendar__date">1</span> | |
| <span class="calendar__task">2</span> | |
| </div> | |
| <div class="calendar__day inactive"> | |
| <span class="calendar__date">2</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| <div class="calendar__day inactive"> | |
| <span class="calendar__date">3</span> | |
| <span class="calendar__task">5</span> | |
| </div> | |
| <div class="calendar__day inactive"> | |
| <span class="calendar__date">4</span> | |
| <span class="calendar__task">3</span> | |
| </div> | |
| <div class="calendar__day inactive"> | |
| <span class="calendar__date">5</span> | |
| <span class="calendar__task">1</span> | |
| </div> | |
| </section> | |
| </section> | |
| </main> |
| // Variables | |
| // ----------------------------- // | |
| $black: #040605; | |
| $white: #f5f7f6; | |
| $blue-white: #e1e7e8; | |
| $pink: #fd588a; | |
| $tangerine: #f86a6c; | |
| // Global | |
| // ----------------------------- // | |
| * { | |
| outline: none; | |
| box-sizing: border-box; | |
| } | |
| html { | |
| font-size: 100%; | |
| } | |
| body { | |
| height: 100%; | |
| padding: 1rem; | |
| background-color: #f6f5f1; | |
| -webkit-font-smoothing: antialiased; | |
| text-rendering: optimizeLegibility; | |
| font-family: -apple-system, BlinkMacSystemFont, system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, "Helvetica Neue", sans-serif; | |
| background-image: linear-gradient(45deg, $tangerine 0%, $pink 100%); | |
| @media screen and (min-width:55em) { | |
| height: 100vh; | |
| margin: 0; | |
| } | |
| } | |
| h1, h2, h3, h4, h5, h6 { | |
| -webkit-font-smoothing: antialiased; | |
| } | |
| p, span, ul, li { | |
| color: lighten($black, 20%); | |
| font-weight: 100; | |
| -webkit-font-smoothing: subpixel-antialiased; | |
| font-size: 1rem; | |
| } | |
| // Calendar Container | |
| // ----------------------------- // | |
| .calendar-contain { | |
| position: relative; | |
| left: 0; | |
| right: 0; | |
| border-radius: 0; | |
| width: 100%; | |
| overflow: hidden; | |
| max-width: 1020px; | |
| min-width: 450px; | |
| margin: 1rem auto; | |
| background-color: $white; | |
| box-shadow: 5px 5px 72px rgba(30, 46, 50, 0.5); | |
| color: $black; | |
| @media screen and (min-width:55em) { | |
| margin: auto; | |
| top: 5%; | |
| } | |
| } | |
| // Title bar | |
| // ----------------------------- // | |
| .title-bar { | |
| position: relative; | |
| width: 100%; | |
| display: table; | |
| text-align: right; | |
| background:$white; | |
| padding: 0.5rem; | |
| margin-bottom: 0; | |
| &:after { | |
| display: table; | |
| clear: both; | |
| } | |
| } | |
| .title-bar__burger { | |
| display: block; | |
| position: relative; | |
| float: left; | |
| overflow: hidden; | |
| margin: 0; | |
| padding: 0; | |
| width: 38px; | |
| height: 30px; | |
| font-size: 0; | |
| text-indent: -9999px; | |
| appearance: none; | |
| box-shadow: none; | |
| border-radius: none; | |
| border: none; | |
| cursor: pointer; | |
| background:none; | |
| &:focus { | |
| outline: none; | |
| } | |
| } | |
| .burger__lines { | |
| display: block; | |
| position: absolute; | |
| width: 18px; | |
| top: 15px; | |
| left: 0; | |
| right: 0; | |
| margin: auto; | |
| height: 1px; | |
| background: $black; | |
| &:before, | |
| &:after { | |
| position: absolute; | |
| display: block; | |
| left: 0; | |
| width: 100%; | |
| height: 1px; | |
| background-color: $black; | |
| content: ""; | |
| } | |
| &:before { | |
| top: -5px; | |
| } | |
| &:after { | |
| bottom: -5px; | |
| } | |
| } | |
| .title-bar__year { | |
| display: block; | |
| position: relative; | |
| float: left; | |
| font-size: 1rem; | |
| line-height: 30px; | |
| width: 43%; | |
| padding: 0 0.5rem; | |
| text-align: left; | |
| @media screen and (min-width:55em) { | |
| width: 27%; | |
| } | |
| } | |
| .title-bar__month { | |
| position: relative; | |
| float: left; | |
| font-size: 1rem; | |
| line-height: 30px; | |
| width: 22%; | |
| padding: 0 0.5rem; | |
| text-align: left; | |
| @media screen and (min-width:55em) { | |
| width: 12%; | |
| } | |
| &:after { | |
| content: ""; | |
| display: inline; | |
| position: absolute; | |
| width: 10px; | |
| height: 10px; | |
| right: 0; | |
| top: 5px; | |
| margin: auto; | |
| border-top: 1px solid rgb(0, 0, 0); | |
| border-right: 1px solid rgb(0, 0, 0); | |
| transform: rotate(135deg); | |
| } | |
| } | |
| .title-bar__minimize, | |
| .title-bar__maximize, | |
| .title-bar__close | |
| { | |
| position: relative; | |
| float: left; | |
| width: 34px; | |
| height: 34px; | |
| &:before, | |
| &:after { | |
| top: 30%; | |
| right: 30%; | |
| bottom: 30%; | |
| left: 30%; | |
| content: " "; | |
| position: absolute; | |
| border-color: #8e8e8e; | |
| border-style: solid; | |
| border-width: 0 0 2px 0; | |
| } | |
| } | |
| .title-bar .title-bar__controls { | |
| display: inline-block; | |
| vertical-align: top; | |
| position: relative; | |
| float: right; | |
| width: auto; | |
| &:before, | |
| &:after { | |
| content: none; | |
| } | |
| } | |
| .title-bar .title-bar__minimize { | |
| &:before { | |
| border-bottom-width: 2px; | |
| } | |
| } | |
| .title-bar .title-bar__maximize { | |
| &:before { | |
| border-width: 1px 1px 2px 1px; | |
| } | |
| } | |
| .title-bar .title-bar__close:before, | |
| .title-bar .title-bar__close:after { | |
| bottom: 50%; | |
| top: 49.9%; | |
| } | |
| .title-bar .title-bar__close:before { | |
| transform: rotate(45deg); | |
| } | |
| .title-bar .title-bar__close:after { | |
| transform: rotate(-45deg); | |
| } | |
| .title-bar .title-bar__close:hover { | |
| // background-color: #E04343; | |
| } | |
| .title-bar div:hover:after, | |
| .title-bar div:hover:before { | |
| // border-color: #333333; | |
| } | |
| .title-bar .title-bar__close:hover:after, | |
| .title-bar .title-bar__close:hover:before { | |
| // border-color: #FFFFFF; | |
| } | |
| // Side bar | |
| // ----------------------------- // | |
| .calendar__sidebar { | |
| width: 100%; | |
| margin: 0 auto; | |
| float: none; | |
| background:linear-gradient(120deg, lighten($blue-white, 5%), $blue-white); | |
| padding-bottom: 0.7rem; | |
| @media screen and (min-width:55em) { | |
| position: absolute; | |
| height: 100%; | |
| width: 30%; | |
| float: left; | |
| margin-bottom: 0; | |
| } | |
| } | |
| .calendar__sidebar .content{ | |
| padding: 2rem 1.5rem 2rem 4rem; | |
| color: $black; | |
| } | |
| .sidebar__nav { | |
| display: flex; | |
| align-items: center; | |
| justify-content: flex-start; | |
| margin-bottom: 0.9rem; | |
| padding: 0.7rem 1rem; | |
| background-color: $white; | |
| } | |
| .sidebar__nav-item { | |
| display: inline-block; | |
| width: 22px; | |
| margin-right: 23px; | |
| padding: 0; | |
| opacity: 0.8; | |
| } | |
| .sidebar__list{ | |
| list-style: none; | |
| margin: 0; | |
| padding-left: 1rem; | |
| padding-right: 1rem; | |
| } | |
| .sidebar__list-item { | |
| margin: 1.2rem 0; | |
| color: lighten($black, 20%); | |
| font-weight: 100; | |
| font-size: 1rem; | |
| } | |
| .list-item__time { | |
| display: inline-block; | |
| width: 60px; | |
| @media screen and (min-width:55em) { | |
| margin-right: 2rem; | |
| } | |
| } | |
| .sidebar__list-item--complete { | |
| color: transparentize($black, 0.7); | |
| .list-item__time { | |
| color: transparentize($black, 0.7); | |
| } | |
| } | |
| .sidebar__heading { | |
| font-size: 2.2rem; | |
| font-weight: bold; | |
| padding-left: 1rem; | |
| padding-right: 1rem; | |
| margin-bottom: 3rem; | |
| margin-top: 1rem; | |
| span { | |
| float: right; | |
| font-weight: 300; | |
| } | |
| } | |
| .calendar__heading-highlight { | |
| color: #2d444a; | |
| font-weight: 900; | |
| } | |
| // Calendar Days | |
| // ----------------------------- // | |
| .calendar__days { | |
| display: flex; | |
| flex-flow: column wrap; | |
| align-items: stretch; | |
| width: 100%; | |
| float: none; | |
| min-height: 580px; | |
| height: 100%; | |
| font-size: 12px; | |
| padding: 0.8rem 0 1rem 1rem; | |
| background:$white; | |
| @media screen and (min-width:55em) { | |
| width: 70%; | |
| float: right; | |
| } | |
| } | |
| // Top Bar | |
| .calendar__top-bar { | |
| display: flex; | |
| flex: 32px 0 0; | |
| } | |
| .top-bar__days { | |
| width: 100%; | |
| padding: 0 5px; | |
| color: lighten($black, 20%); | |
| font-weight: 100; | |
| -webkit-font-smoothing: subpixel-antialiased; | |
| font-size: 1rem; | |
| } | |
| // Weeks & Days | |
| .calendar__week { | |
| display: flex; | |
| flex: 1 1 0; | |
| } | |
| .calendar__day { | |
| display: flex; | |
| flex-flow: column wrap; | |
| justify-content: space-between; | |
| width: 100%; | |
| padding: 1.9rem 0.2rem 0.2rem; | |
| } | |
| .calendar__date { | |
| color: $black; | |
| font-size: 1.7rem; | |
| font-weight: 600; | |
| line-height: 0.7; | |
| @media screen and (min-width:55em) { | |
| font-size: 2.3rem; | |
| } | |
| } | |
| .calendar__week { | |
| .inactive { | |
| .calendar__date, | |
| .task-count { | |
| color: #c6c6c6; | |
| } | |
| } | |
| .today { | |
| .calendar__date { | |
| color: $pink; | |
| } | |
| } | |
| } | |
| .calendar__task { | |
| color: $black; | |
| display: flex; | |
| font-size: 0.8rem; | |
| @media screen and (min-width:55em) { | |
| font-size: 1rem; | |
| } | |
| &.calendar__task--today { | |
| color: $pink; | |
| } | |
| } |
Inspired by the preview of the Microsoft Fluent Design System calendar. I thought it looked really pretty so I made it for the web.
https://www.engadget.com/2017/05/11/microsofts-design-rules-push-windows-beyond-mere-rectangles/