No notes defined.

<div class="ds2Banner{{ bannerLayout }} ds2Hero ds2BannerColour{{ themeColour }} {% if imageType == 'transition' %}ds2HeroTransition{% endif %}">
  
  {% for heroImage in heroImages %}
    {% if imageType == 'transition' %}
      <div class="ds2HeroSingle" style='background-image: linear-gradient(rgba(0, 0, 0,{{ opacity }}), rgba(0, 0, 0, {{ opacity }})), url("{{ heroImage.img.src }}");'></div>
    {% else %}
      {% if bannerLayout == 'ImageThenContent' or bannerLayout == 'ContentThenImage' %}
        <div class="ds2HeroSingle" style='background-image: url("{{ heroImage.img.src }}");'></div>
      {% else %}
        <div class="ds2HeroSingle" style='background-image: linear-gradient(rgba(0, 0, 0,{{ opacity }}), rgba(0, 0, 0, {{ opacity }})), url("{{ heroImage.img.src }}"); width: {{100 / heroImages.length}}%'></div>
      {% endif %}
    {% endif %}
  {% endfor %}
  <div class="ds2HeroContent">
    {% render '@ds2-content-block', bannerContent %}
  </div>
  {% if imageType == 'transition' %}
    <div class="ds2HeroNavContainer">
      <span class="ds2HeroNavButton ds2HeroNavPrevious" >&#10094;</span>
      <span class="ds2HeroNavButton ds2HeroNavNext" >&#10095;</span>
    </div>
  {% endif %} 
</div>
<div class="ds2BannerOverlay ds2Hero ds2BannerColour ">

    <div class="ds2HeroSingle" style='background-image: linear-gradient(rgba(0, 0, 0,0.5), rgba(0, 0, 0, 0.5)), url("/placeholders/ds2/heroFullWidth/Web-DSC03468.jpg"); width: 100%'></div>

    <div class="ds2HeroContent">
        <div class="ds2ContentBlock">

            <h2>Compulsory title</h2>

        </div>

    </div>

</div>
  • Content:
    export const heroBanners = () => {
    
      const heroBanners = document.querySelectorAll('.ds2HeroTransition')
    
      heroBanners.forEach((heroBanner) => {
        let nextBanner = heroBanner.querySelectorAll(".ds2HeroNavNext")[0];
        let previousBanner = heroBanner.querySelectorAll(".ds2HeroNavPrevious")[0];
        
        nextBanner.addEventListener("click", () => {plusDivs(1)})
        previousBanner.addEventListener("click", () => {plusDivs(-1)})
    
        var slideIndex = 1;
        showDivs(slideIndex);
    
        function plusDivs(n) {
          showDivs(slideIndex += n);
        }
    
        function showDivs(n) {
          console.log("showDivs " + n);
          var i;
          var x = heroBanner.getElementsByClassName("ds2HeroSingle");
          if (n > x.length) {slideIndex = 1}
          if (n < 1) {slideIndex = x.length}
          for (i = 0; i < x.length; i++) {
            x[i].style.display = "none";  
          }
          x[slideIndex-1].style.display = "block";  
        }
      
      })
    }
  • URL: /components/raw/ds2-hero-banner/ds2-hero-banner.module.js
  • Filesystem Path: src/library/02-2026-components/ds2-hero-banner/ds2-hero-banner.module.js
  • Size: 926 Bytes
  • Content:
    .ds2Hero {
      --ds2HeroSpacing: 48px;
      --ds2HeroMinHeight: 500px;
      --ds2ContentMaxWidth: 1500px;
    
      background-position: center;
      background-repeat: no-repeat;
      background-size: cover;
      position: relative;
      display: flex;
      width: 100%;
      color: white;
      display: flex;
      justify-content: center;
      position: relative;
      width: 100%;
      min-height: var(--ds2HeroMinHeight);
    
      .ds2HeroSingle {
        display: flex;
        width: 100%;
        align-items: center;
        background-position: 50%;
        background-repeat: no-repeat;
        background-size: cover;
        position: relative;
      }
    
      .ds2HeroContent {
        width: calc(100% - 2 * var(--ds2HeroSpacing));
        max-width: calc(var(--ds2ContentMaxWidth) - 2 * var(--ds2HeroSpacing));
        margin: 0 var(--ds2HeroSpacing);
        margin: 0;
        position: absolute;
        place-self: center; 
        height: 100%; 
        display: flex;
        flex-direction: column;
        justify-content: center;
    
        .ds2ContentBlockUolLogo svg {
          fill: white;
        }
      }
    
      .ds2HeroNavContainer {
        position: absolute;
        bottom: var(--ds2HeroSpacing);
        right: var(--ds2HeroSpacing);
    
        .ds2HeroNavButton {
          font-size: 20px;
          width: 40px;
          height: 40px;
          margin-left: 10px;
          background: #ffffff99;
          display: inline-flex;
          justify-content: center;
          align-items: center;
          cursor: pointer;
        }
      }
    }
    
    // variant with image to left and content to left
    .ds2BannerImageThenContent {
      --ds2ImageContentImageMaxSize: 465px;
      
      .ds2HeroSingle {
        width: var(--ds2ImageContentImageMaxSize);
        height: 100%;
        position: absolute;
        left: 0;
      }
    
      .ds2HeroContent {
        position: relative;
        width: calc(100% - var(--ds2ImageContentImageMaxSize) - 2 * var(--ds2HeroSpacing));
    
        * {
          max-width: calc(1440px / 2 - 2 * var(--ds2HeroSpacing));
        }
    
        padding: var(--ds2HeroSpacing);
        padding-left: calc(var(--ds2ImageContentImageMaxSize) + var(--ds2HeroSpacing));
        
      }
    
      .ds2HeroNavContainer {
        left: calc(var(--ds2ImageContentImageMaxSize) - 100px - var(--ds2HeroSpacing));
      }
    }
    
    // variant with image to right and content to left
    .ds2BannerContentThenImage {
      --ds2ImageContentImageMaxSize: 50%;
      
      .ds2HeroSingle {
        width: var(--ds2ImageContentImageMaxSize);
        height: 100%;
        position: absolute;
        right: 0;
      }
    
      .ds2HeroContent {
        // background: grey;
        position: absolute;
        width: calc(var(--ds2ImageContentImageMaxSize) - 2 * var(--ds2HeroSpacing));
        max-width: calc(1440px / 2 - 2 * var(--ds2HeroSpacing));
        // padding: var(--ds2HeroSpacing);
        right: calc(50% + var(--ds2HeroSpacing));
        
      }
    
      .ds2HeroNavContainer {
        left: calc(var(--ds2ImageContentImageMaxSize) - 100px - var(--ds2HeroSpacing));
      }
    }
    
    // Colours
    .ds2BannerOverlay {
      .ds2BrandButton {
        background: $brand-white;
        color: $brand-black;
        border: 1px solid $brand-white;
      }
      .ds2BrandButton:first-of-type {
        border: 1px solid $brand-dark-blue;
        background: $brand-dark-blue;
        color: $brand-white;
      }
    }
    
    .ds2BannerColourLilac {
      background: $brand-lilac;
      color: $brand-black;
      svg {
        fill: $brand-black;
      }
      .ds2BrandButton {
        background: $brand-lilac;
        color: $brand-black;
        border: 1px solid $brand-black;
      }
      .ds2BrandButton:first-of-type {
        border: 1px solid $brand-dark-blue;
        background: $brand-dark-blue;
        color: $brand-white;
      }
    }
    
    .ds2BannerColourTeal {
      background: $brand-teal;
      color: $brand-black;
      svg {
        fill: $brand-black;
      }
      .ds2BrandButton {
        background: $brand-teal;
        color: $brand-black;
        border: 1px solid $brand-black;
      }
      .ds2BrandButton:first-of-type {
        border: 1px solid $brand-dark-blue;
        background: $brand-dark-blue;
        color: $brand-white;
      }
    }
    
    .ds2BannerColourBlue {
      background: $brand-vivid-blue;
      color: $brand-white;
      svg {
        fill: $brand-white;
      }
      .ds2BrandButton {
        background: $brand-vivid-blue;
        color: $brand-white;
        border: 1px solid $brand-white;
      }
      .ds2BrandButton:first-of-type {
        background: $brand-white;
        color: $brand-black;
        border: 1px solid $brand-white;
      }
    }
    
    .ds2BannerColourDarkBlue {
      background: $brand-dark-blue;
      color: $brand-white;
      svg {
        fill: $brand-white;
      }
      .ds2BrandButton {
        background: $brand-dark-blue;
        color: $brand-white;
        border: 1px solid $brand-white;
      }
      .ds2BrandButton:first-of-type {
        border: 1px solid $brand-white;
        background: $brand-white;
        color: $brand-black;
      }
    }
    
    .ds2BannerColourWhite {
      background: $brand-white;
      color: $brand-black;
      svg {
        fill: $brand-white;
      }
      .ds2BrandButton {
        background: $brand-white;
        color: $brand-black;
        border: 1px solid $brand-black;
      }
      .ds2BrandButton:first-of-type {
        border: 1px solid $brand-dark-blue;
        background: $brand-dark-blue;
        color: $brand-white;
      }
    }
    
    .ds2BannerColourVividGreen {
      background: $brand-vivid-green;
      color: $brand-black;
      svg {
        fill: $brand-black;
      }
      .ds2BrandButton {
        background: $brand-vivid-green;
        color: $brand-black;
        border: 1px solid $brand-black;
      }
      .ds2BrandButton:first-of-type {
        border: 1px solid $brand-black;
        background: $brand-black;
        color: $brand-white;
      }
    }
    
    .ds2MainContent {
      .ds2BannerImageThenContent, .ds2BannerContentThenImage {
        --ds2ImageContentImageMaxSize: 50%;
      }
    }
    
    
    
    
    
    
    
    
    
  • URL: /components/raw/ds2-hero-banner/ds2-hero-banner.scss
  • Filesystem Path: src/library/02-2026-components/ds2-hero-banner/ds2-hero-banner.scss
  • Size: 5.4 KB
{
  "opacity": 0.5,
  "theme": "Standard",
  "bannerStyle": "overlay",
  "imageType": "showAll",
  "bannerLayout": "Overlay",
  "heroImages": [
    {
      "img": {
        "src": "/placeholders/ds2/heroFullWidth/Web-DSC03468.jpg",
        "alt": "University campus"
      }
    }
  ],
  "bannerContent": {
    "content": [
      {
        "title": "Compulsory title"
      }
    ]
  }
}