Teamleden overzicht - Steven

V000-09

Geef een overzichtje aan teamleden weer.

Hoe te gebruiken?

Laad onderstaande code in de website. Let op het gaat hierbij om 3 stukken. HTML, CSS en JS. Zorg dat de HTML in de view gezet wordt. De CSS in de style.css en de JS in de script.js va de website.

Voorvertoning



HTML
<div class="container"> <div class="row"> <div class="col-12 col-sm-9 col-md-6"> <nc-text name="team"></nc-text> </div> </div> <div class="py-3"></div> <nc-preset-list name="teams" attributes="class=team-members" columns="3"> <div data-name="{%name%}" class="team-member-panel"> <div class="title"> <nc-element type="span" name="{%name%}-name" page="{%page%}" default="Uw naam"></nc-element> <nc-element type="strong" name="{%name%}-position" page="{%page%}" default="Uw functie"></nc-element> </div> <div class="team-member-content"> <div class="team-member-image"> <nc-image name="{%name%}-image" page="{%page%}" alt-attributes="class=img-fluid" width="640" height="640"></nc-image> </div> <div class="team-member-description"> <nc-text name="{%name%}-description" page="{%page%}" default="Uw quote"></nc-text> </div> </div> <button type="button" class="team-member-button"> <?= NCCMS::getView('cms/icon', 'fa-bars') ?> </button> <div class="team-member-footer"> <ul> <li data-editor-field="tel"> <a href="tel:"> <?= NCCMS::getView('cms/icon', 'phone') ?> </a> </li> <li data-editor-field="mailto"> <a href="mailto:"> <?= NCCMS::getView('cms/icon', 'envelope') ?> </a> </li> <li data-editor-field="linkedin"> <a href="" target="_blank"> <?= NCCMS::getView('cms/icon', 'fa-brands fa-linkedin-in') ?> </a> </li> </ul> <div class="editor-mode-content-only"> <nc-element type="span" name="{%name%}-tel" attributes="class={%name%}-tel" page="{%page%}" default="Uw telefoonnummer"></nc-element> <nc-element type="span" name="{%name%}-mailto" attributes="class={%name%}-mailto" page="{%page%}" default="Uw e-mailadres"></nc-element> <nc-element type="span" name="{%name%}-linkedin" attributes="class={%name%}-linkedin" page="{%page%}" default="Uw LinkedIn link"></nc-element> </div> </div> </div> </nc-preset-list> </div>
CSS
.team-member-button i[class^="fa-"].active { animation-name: team-member-spin-animation; animation-duration: 200ms; animation-timing-function: linear; animation-iteration-count: infinite; } @keyframes team-member-spin-animation { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } .team-member-panel { position: relative; height: 0; padding-bottom: calc(100% - 16px); margin-bottom: 6.6em; } body[data-editor-mode="layout"] .team-member-panel { margin-bottom: 9.6em; } body[data-editor-mode="content"] .team-member-panel { margin-bottom: 15.6em; } .team-member-panel .title { position: absolute; top: calc(100% - 16px); left: 0; width: 100%; padding: 10px 16px; color: black; font-size: 1.4em; font-weight: 600; line-height: 1.6em; text-transform: none; margin: 0; z-index: 10; -webkit-transition: all 300ms; -moz-transition: all 300ms; -ms-transition: all 300ms; -o-transition: all 300ms; transition: all 300ms; } .team-member-panel .title span { display: block; } .team-member-panel .title strong { font-weight: 400; display: block; font-size: 0.6em; line-height: 1.6em; text-transform: none; } .team-member-panel.active .title strong, body[data-editor-mode="content"] .team-member-panel .title strong { font-size: 0.5em; } .team-member-panel .title:before, .team-member-panel .title:after { content: " "; position: absolute; left: 0; top: -16px; width: 0; border: 8px solid; -webkit-transition: all 300ms; -moz-transition: all 300ms; -ms-transition: all 300ms; -o-transition: all 300ms; transition: all 300ms; } .team-member-panel .title:after { top: auto; bottom: 0; } @media screen and (max-width: 767px) { .team-member-panel.active, body[data-editor-mode="content"] .team-member-panel { padding-bottom: 0; height: auto; } } .team-member-panel.active .title, body[data-editor-mode="content"] .team-member-panel .title { top: 0; padding: 10px 16px 10px 90px; } .team-member-panel.active .title:before, body[data-editor-mode="content"] .team-member-panel .title:before { top: 0; } .team-member-panel.active .title:after, body[data-editor-mode="content"] .team-member-panel .title:after { bottom: -16px; } .team-member-panel .team-member-content { position: absolute; right: 0; top: 0; bottom: 16px; left: 16px; transition: all 300ms; } .team-member-panel .team-member-button { position: absolute; right: 16px; top: 15px; -webkit-border-radius: 50%; -moz-border-radius: 50%; border-radius: 50%; border: 5px solid; width: 54px; height: 54px; line-height: 44px; text-align: center; color: white; cursor: pointer; z-index: 20; -webkit-transition: all 300ms; -moz-transition: all 300ms; -ms-transition: all 300ms; -o-transition: all 300ms; transition: all 300ms; } .team-member-panel .team-member-button>i { margin: 0; color: black; } .team-member-panel .team-member-button:hover>i { color: white; } .team-member-panel.active .team-member-button, body[data-editor-mode="content"] .team-member-panel .team-member-button { top: 62px; } .team-member-panel .team-member-description { position: absolute; top: 100%; right: 30px; left: 30px; bottom: 54px; overflow: hidden; opacity: 0; color: black; filter: alpha(opacity=0); -webkit-transition: all 1200ms; -moz-transition: all 1200ms; -ms-transition: all 1200ms; -o-transition: all 1200ms; transition: all 1200ms; } .team-member-panel .team-member-footer { height: 0; overflow: hidden; -webkit-transition: all 300ms; -moz-transition: all 300ms; -ms-transition: all 300ms; -o-transition: all 300ms; transition: all 300ms; } .team-member-panel .team-member-footer a.team-member-button { display: block; float: left; position: relative; width: 52px; height: 52px; margin-left: 5px; margin-bottom: 15px; font-size: 28px; color: black; line-height: 52px; text-decoration: none; top: 200px; } .team-member-panel .team-member-footer a:nth-child(1) { -webkit-transition: all 500ms; -moz-transition: all 500ms; -ms-transition: all 500ms; -o-transition: all 500ms; transition: all 500ms; } .team-member-panel .team-member-footer a:nth-child(2) { -webkit-transition: all 600ms; -moz-transition: all 600ms; -ms-transition: all 600ms; -o-transition: all 600ms; transition: all 600ms; } .team-member-panel .team-member-footer a:nth-child(3) { -webkit-transition: all 700ms; -moz-transition: all 700ms; -ms-transition: all 700ms; -o-transition: all 700ms; transition: all 700ms; } .team-member-panel .team-member-footer a:nth-child(4) { -webkit-transition: all 800ms; -moz-transition: all 800ms; -ms-transition: all 800ms; -o-transition: all 800ms; transition: all 800ms; } .team-member-panel .team-member-footer a:nth-child(5) { -webkit-transition: all 900ms; -moz-transition: all 900ms; -ms-transition: all 900ms; -o-transition: all 900ms; transition: all 900ms; } .team-member-panel .team-member-image { overflow: hidden; position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 3; transition: all 300ms; } .team-member-panel.active .team-member-image, body[data-editor-mode="content"] .team-member-panel .team-member-image { border-radius: 50%; left: 0; top: 12px; width: 60px; height: 60px; z-index: 20; } .team-member-panel.active .team-member-content, body[data-editor-mode="content"] .team-member-panel .team-member-content { padding-top: 5.6em; } @media screen and (max-width: 767px) { .team-member-panel.active .team-member-content, body[data-editor-mode="content"] .team-member-panel .team-member-content { position: relative; margin-right: 16px; } } .team-member-panel.active .team-member-description, body[data-editor-mode="content"] .team-member-panel .team-member-description { top: 50px; padding-top: 5em; opacity: 1; filter: alpha(opacity=100); font-size: 0.95rem; overflow-y: scroll; } @media screen and (max-width: 767px) { .team-member-panel.active .team-member-description, body[data-editor-mode="content"] .team-member-panel .team-member-description { position: relative; top: auto; right: auto; left: auto; padding: 50px 30px 70px 30px; bottom: 0; } } .team-member-panel.active .team-member-footer, body[data-editor-mode="content"] .team-member-panel .team-member-footer { overflow: visible; position: absolute; top: calc(100% - 16px); left: 16px; right: 0; height: 82px; padding-top: 15px; padding-left: 25px; } .team-member-panel.active .team-member-footer>ul, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul { list-style: none; padding-left: 0; margin: 0; } .team-member-panel.active .team-member-footer>ul li, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul li { display: inline; margin: 0 15px 0 0; } .team-member-panel.active .team-member-footer>ul:last-child, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul:last-child { margin: 0; } .team-member-panel.active .team-member-footer>ul li a, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul li a { background-color: var(--tertiary); color: var(--white); } .team-member-panel.active .team-member-footer>ul li a i, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul li a i { font-size: 20px; line-height: 20px; margin: 0; } .team-member-panel.active .team-member-footer>ul li a, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul li a { display: inline-block; font-size: 25px; color: white; padding: 5px; text-align: center; min-width: 42px; box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.25); } .team-member-panel.active .team-member-footer>ul li a:hover, .team-member-panel.active .team-member-footer>ul li a:focus, .team-member-panel.active .team-member-footer>ul li a:active, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul li a:hover, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul li a:focus, body[data-editor-mode="content"] .team-member-panel .team-member-footer>ul li a:active { color: var(--secondary); } .team-member-panel.active .team-member-footer a.team-member-button, body[data-editor-mode="content"] .team-member-panel .team-member-footer a.team-member-button { top: 0; } .team-member-panel .title:after { border-top-color: var(--secondary); border-right-color: var(--secondary); border-bottom-color: transparent; border-left-color: transparent; } .team-member-panel .title:before { border-top-color: transparent; border-right-color: var(--tertiary); border-bottom-color: var(--tertiary); border-left-color: transparent; } .team-member-panel.active .title:before { border-top-color: transparent; border-right-color: var(--secondary); border-bottom-color: var(--secondary); border-left-color: transparent; } .team-member-panel.active .title:after { border-top-color: var(--tertiary); border-right-color: var(--tertiary); border-bottom-color: transparent; border-left-color: transparent; } .team-member-panel .team-member-button { background-color: var(--primary); } .team-member-panel .title, .team-member-panel.active .team-member-footer { background-color: var(--secondary); } .team-member-panel .team-member-button:hover, .team-member-panel .team-member-footer a.team-member-button { background-color: var(--tertiary); } .team-member-panel.active .team-member-content, .team-member-panel.active .team-member-button { border-color: white; }
JS
onComplete(() => { const setupField = function(element, name, field) { const target = element.querySelector('.' + name + '-' + field); if (target && target.textContent.trim()) { const anchorElement = element.querySelector('[data-editor-field=' + field + '] a'); anchorElement.setAttribute('href', anchorElement.getAttribute('href') + target.textContent.trim()); } else { const fieldElement = element.querySelector('[data-editor-field=' + field + ']'); if (fieldElement) fieldElement.style.display = 'none'; } } const setupElement = function(element) { element.querySelector('.team-member-button') .addEventListener('click', () => { const panel = element.closest('.team-member-panel'); const icon = element.querySelector('i'); const isActive = panel.classList.toggle('active'); icon.classList.add('active'); setTimeout(() => { if (isActive) { icon.classList.remove('fa-bars'); icon.classList.add('fa-arrow-left'); } else { icon.classList.remove('fa-arrow-left'); icon.classList.add('fa-bars'); } setTimeout(() => { icon.classList.remove('active'); }, 400); }, 400); }); const name = element.getAttribute('data-name'); const fields = ['tel', 'mailto', 'linkedin']; for (const field of fields) { setupField(element, name, field); } } const elements = document.querySelectorAll('.team-members .team-member-panel'); for (const element of elements) { setupElement(element); } });