Theme
On this page (4)
Component Skill — components/event-header/component-skill.md

Native basis

A <header>: badges (type, edition), the title, a tagline, the date range as <time>s, the venue in an <address>, a register Button and an "Add to calendar" link to an .ics file.

Built from

Badge, Button, Avatar.

Web Platform APIs

<time><address>downloadContainer queriescolor-mix()

Classes

.mk-event-header.mk-event-header-inner.mk-event-header-copy.mk-event-header-badges.mk-event-header-title.mk-event-header-tagline.mk-event-header-meta.mk-event-header-actions.mk-event-header-speakers.mk-event-header-poster.mk-event-header-cover

Data attributes

data-variant: image, split.

§Default

A gradient band in the chart colors: badges, title, tagline, the date range (<time>), the venue (<address>), register and an .ics "Add to calendar" download - and the speakers as an Avatar group.

§Over a cover

data-variant='image': the header over a cover picture (.mk-event-header-cover) with a scrim - white text.

§With a poster

data-variant='split': the copy beside a tilted poster from 48rem.

§CSS view file

/* -- Event Header (website · Events & Promotions) -------------------------
   Introduces an event with its title, date, venue, and primary action - on a gradient band, over a cover picture, or beside a poster. */
@layer components {
  /* every box in the block measures border-box - the same on any page */
  :where(.mk-event-header, .mk-event-header *, .mk-event-header ::before, .mk-event-header ::after) { box-sizing: border-box; }
  .mk-event-header { container: mk-event-header / inline-size; width: 100%; }
  .mk-event-header-inner {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    display: grid;
    gap: 2rem;
    align-items: center;
    padding: 3rem 2rem;
    border-radius: var(--radius-xl);
    background:
      radial-gradient(60% 90% at 100% 0%, color-mix(in oklch, var(--chart-2) 30%, transparent), transparent 70%),
      radial-gradient(50% 80% at 0% 100%, color-mix(in oklch, var(--chart-1) 28%, transparent), transparent 70%),
      var(--muted);
  }
  .mk-event-header-copy { display: flex; flex-direction: column; align-items: flex-start; gap: 1rem; }
  .mk-event-header-badges { display: flex; flex-wrap: wrap; gap: 0.5rem; }
  .mk-event-header-title { margin: 0; font-size: clamp(2.25rem, 6cqi, 4rem); font-weight: 800; line-height: 1; letter-spacing: -0.04em; text-wrap: balance; }
  .mk-event-header-tagline { margin: 0; max-width: 36rem; font-size: 1.125rem; color: color-mix(in oklch, currentColor 75%, transparent); text-wrap: pretty; }
  .mk-event-header-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1.5rem;
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 0.9375rem;
    font-weight: 500;
    & li { display: inline-flex; align-items: center; gap: 0.5rem; }
    & svg { width: 1.125rem; height: 1.125rem; opacity: 0.75; }
    & address { font-style: normal; }
  }
  .mk-event-header-actions { display: flex; flex-wrap: wrap; gap: 0.75rem; }
  .mk-event-header-speakers { display: flex; align-items: center; gap: 0.75rem; font-size: 0.875rem; color: color-mix(in oklch, currentColor 75%, transparent); }
  .mk-event-header-poster { margin: 0; overflow: hidden; border-radius: var(--radius-lg); box-shadow: var(--shadow-xl); rotate: 2deg;
    & img { display: block; width: 100%; aspect-ratio: 3 / 4; object-fit: cover; }
  }
  .mk-event-header-cover { position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; }
  .mk-event-header[data-variant="image"] .mk-event-header-inner {
    padding-block: 5rem 3rem;
    background: transparent;
    color: #fff;
    &::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(to top, oklch(0.12 0.02 260 / 0.9), oklch(0.12 0.02 260 / 0.25)); }
    & .btn[data-variant="outline"] { border-color: oklch(1 0 0 / 0.45); background: transparent; color: inherit; }
  }
  @container mk-event-header (min-width: 48rem) {
    .mk-event-header[data-variant="split"] .mk-event-header-inner { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 3rem; padding: 3rem; }
  }
  /* -- Accessibility ------------------------------------------- */
  @media (forced-colors: active) {
    .mk-event-header-inner { border: 1px solid CanvasText; }
  }
}

Comments, ideas or improvements? Edit this page's source on GitHub