Update responsive hero layout

S-Produktübersicht
3015418 2026-09-28 12:06:52 +02:00
parent 5e093dd33b
commit f7605d86a1
4 changed files with 412 additions and 308 deletions

View File

@ -1,23 +0,0 @@
:root {
--tri-bg: #0d0d1a;
--tri-surface: #1a1a2e;
--tri-accent: #10b981;
--tri-white: #ffffff;
--tri-text: #f8fafc;
--tri-muted: #94a3b8;
--tri-border: rgb(148 163 184 / 20%);
--tri-font-body: system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
--tri-font-heading: var(--tri-font-body);
--tri-content-width: 1240px;
}
body {
font-family: var(--tri-font-body);
}
button,
input,
select,
textarea {
font-family: inherit;
}

View File

@ -1,240 +0,0 @@
.produkt-hero,
.produkt-hero * {
box-sizing: border-box;
}
.produkt-hero {
background: var(--tri-bg);
color: var(--tri-text);
font-family: var(--tri-font-body);
line-height: 1.6;
border-top: 4px solid var(--tri-accent);
}
.produkt-hero__container {
width: min(var(--tri-content-width), calc(100% - 96px));
margin-inline: auto;
}
.produkt-hero__brand {
display: flex;
align-items: center;
gap: 20px;
padding-block: 28px;
border-bottom: 1px solid var(--tri-border);
}
.produkt-hero__wordmark {
color: var(--tri-white);
font-size: 28px;
font-weight: 750;
line-height: 1;
letter-spacing: -1.4px;
}
.produkt-hero__wordmark span {
color: var(--tri-accent);
}
.produkt-hero__brand-label {
padding-left: 20px;
border-left: 1px solid var(--tri-border);
color: var(--tri-muted);
font-size: 13px;
letter-spacing: 0.035em;
}
.produkt-hero__layout {
display: grid;
grid-template-columns: 1.15fr 1fr;
gap: clamp(32px, 5vw, 72px);
align-items: center;
padding-block: clamp(36px, 5vw, 64px);
}
.produkt-hero__content {
min-width: 0;
}
.produkt-hero__eyebrow {
margin: 0 0 22px;
color: var(--tri-accent);
font-size: 11px;
font-weight: 650;
letter-spacing: 0.16em;
text-transform: uppercase;
}
.produkt-hero__title {
margin: 0;
color: var(--tri-white);
font-family: var(--tri-font-heading);
font-size: clamp(38px, 4.2vw, 59px);
font-weight: 500;
line-height: 1.14;
letter-spacing: -0.04em;
overflow-wrap: break-word;
}
.produkt-hero__title span {
color: var(--tri-accent);
}
.produkt-hero__description {
max-width: 51ch;
margin: 26px 0 0;
color: var(--tri-muted);
font-size: 16px;
line-height: 1.8;
}
.produkt-hero__benefits {
display: grid;
gap: 12px;
margin: 27px 0 0;
padding: 0;
list-style: none;
font-size: 13px;
line-height: 1.65;
}
.produkt-hero__benefits li {
position: relative;
padding-left: 22px;
}
.produkt-hero__benefits li::before {
position: absolute;
top: 0.7em;
left: 0;
width: 9px;
height: 2px;
background: var(--tri-accent);
content: "";
}
.produkt-hero__visual {
position: relative;
isolation: isolate;
display: grid;
align-items: end;
aspect-ratio: 1 / 1.12;
min-width: 0;
margin: 0;
overflow: hidden;
border: 1px solid var(--tri-border);
border-radius: 3px;
background: var(--tri-surface);
}
.produkt-hero__image {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: 80% center;
}
.produkt-hero__caption {
position: relative;
z-index: 1;
padding: 48px 32px 30px;
background: linear-gradient(transparent, rgb(13 13 26 / 92%) 45%);
}
.produkt-hero__caption-label {
display: block;
padding-left: 12px;
border-left: 2px solid var(--tri-accent);
color: var(--tri-text);
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.produkt-hero__slogan {
margin: 16px 0 0;
color: var(--tri-white);
font-family: var(--tri-font-heading);
font-size: clamp(28px, 2.8vw, 39px);
line-height: 1.2;
letter-spacing: -0.025em;
}
.produkt-hero__footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
padding-block: 22px 28px;
border-top: 1px solid var(--tri-border);
font-size: 12px;
}
.produkt-hero__footer p {
margin: 0;
}
.produkt-hero__footer p span,
.produkt-hero__footer-note {
color: var(--tri-muted);
}
@media (max-width: 900px) {
.produkt-hero__container {
width: calc(100% - 48px);
}
.produkt-hero__layout {
grid-template-columns: 1fr;
gap: 36px;
}
.produkt-hero__title {
font-size: clamp(36px, 6.4vw, 56px);
}
.produkt-hero__description {
max-width: 60ch;
}
.produkt-hero__visual {
aspect-ratio: 4 / 3;
min-height: 300px;
}
}
@media (max-width: 480px) {
.produkt-hero__container {
width: calc(100% - 36px);
}
.produkt-hero__brand {
gap: 14px;
padding-block: 24px;
}
.produkt-hero__brand-label {
padding-left: 14px;
font-size: 11px;
}
.produkt-hero__description {
font-size: 15px;
}
.produkt-hero__visual {
aspect-ratio: 1;
}
.produkt-hero__caption {
padding: 48px 24px 26px;
}
.produkt-hero__footer {
align-items: flex-start;
flex-direction: column;
gap: 12px;
}
}

365
css/style.css 100644
View File

@ -0,0 +1,365 @@
:root {
color-scheme: dark;
--background: #0d0d1a;
--text: #f8fafc;
--muted: #c1c9d2;
--accent: #10b981;
--border: rgb(255 255 255 / 16%);
font-family: system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
color: var(--text);
background: var(--background);
}
*,
*::before,
*::after {
box-sizing: border-box;
}
body {
display: flex;
flex-direction: column;
min-height: 100vh;
min-height: 100svh;
margin: 0;
line-height: 1.6;
}
p,
h1 {
margin: 0;
}
.container {
width: min(1680px, calc(100% - clamp(40px, 10vw, 192px)));
margin-inline: auto;
}
.site-header {
border-top: 3px solid var(--accent);
}
.brand {
display: flex;
align-items: center;
gap: 24px;
min-height: 88px;
}
.brand__name {
font-size: 30px;
font-weight: 750;
line-height: 1;
letter-spacing: -1.5px;
}
.brand__name span {
color: var(--accent);
}
.brand__label {
padding-left: 24px;
border-left: 1px solid var(--border);
color: var(--muted);
font-size: 13px;
letter-spacing: 0.025em;
}
main {
display: flex;
flex: 1;
}
.hero {
position: relative;
isolation: isolate;
display: flex;
flex: 1;
min-width: 0;
border-block: 1px solid var(--border);
}
.hero__image,
.hero::after {
position: absolute;
z-index: -1;
inset: 0;
width: 100%;
height: 100%;
}
.hero__image {
object-fit: cover;
object-position: center 42%;
}
.hero::after {
background:
linear-gradient(0deg, rgb(13 13 26 / 96%), transparent 42%),
linear-gradient(90deg, rgb(13 13 26 / 94%) 0%, rgb(13 13 26 / 79%) 35%, rgb(13 13 26 / 38%) 72%, rgb(13 13 26 / 25%) 100%);
content: "";
}
.hero__inner {
display: flex;
flex-direction: column;
padding-block: clamp(32px, 5vh, 64px) 28px;
}
.hero__content {
width: min(100%, 1000px);
margin-block: auto;
padding-block: 24px 64px;
}
.hero__eyebrow {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 26px;
color: #64e5b7;
font-size: 11px;
font-weight: 650;
letter-spacing: 0.16em;
text-transform: uppercase;
}
.hero__eyebrow::before {
width: 28px;
height: 1px;
flex-shrink: 0;
background: currentColor;
content: "";
}
h1 {
max-width: 100%;
font-size: clamp(42px, 4.9vw, 88px);
font-weight: 550;
line-height: 1.1;
letter-spacing: -0.055em;
text-wrap: balance;
overflow-wrap: break-word;
}
h1 span {
display: block;
margin-top: 8px;
color: var(--accent);
}
.hero__description {
max-width: 65ch;
margin-top: 30px;
color: #d1d7df;
font-size: clamp(16px, 1.15vw, 19px);
line-height: 1.85;
}
.hero__details {
display: grid;
grid-template-columns: minmax(0, 1fr) 250px;
align-items: center;
gap: 48px;
padding-top: 28px;
border-top: 1px solid var(--border);
}
.benefits {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 24px;
margin: 0;
padding: 0;
list-style: none;
}
.benefits li {
display: flex;
align-items: baseline;
gap: 14px;
}
.benefits__number {
color: #64e5b7;
font-size: 11px;
font-variant-numeric: tabular-nums;
}
.benefits p {
font-size: 14px;
font-weight: 500;
}
.benefits p span {
display: block;
margin-top: 4px;
color: var(--muted);
font-size: 12px;
font-weight: 400;
}
.hero__caption {
padding-left: 24px;
border-left: 1px solid var(--border);
}
.hero__caption-label {
color: var(--muted);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.hero__slogan {
margin-top: 8px;
font-size: 22px;
font-weight: 450;
line-height: 1.4;
letter-spacing: -0.025em;
}
.site-footer__inner {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
min-height: 88px;
padding-block: 24px;
font-size: 12px;
}
.site-footer__inner p > span {
margin-left: 12px;
color: var(--muted);
}
.site-footer__note {
display: flex;
align-items: center;
gap: 9px;
color: var(--muted);
}
.site-footer__note > span {
width: 5px;
height: 5px;
flex-shrink: 0;
border-radius: 50%;
background: var(--accent);
}
@media (max-width: 1100px) {
.hero__image {
object-position: 80% center;
}
.hero::after {
background:
linear-gradient(0deg, rgb(13 13 26 / 96%), transparent 42%),
linear-gradient(90deg, rgb(13 13 26 / 92%), rgb(13 13 26 / 70%) 65%, rgb(13 13 26 / 48%));
}
.hero__content {
max-width: 85%;
}
.hero__details {
grid-template-columns: minmax(0, 1fr) 200px;
gap: 28px;
}
.benefits li {
flex-direction: column;
gap: 8px;
}
}
@media (max-width: 700px) {
.brand {
min-height: 76px;
gap: 16px;
}
.brand__label {
padding-left: 16px;
font-size: 11px;
}
.hero__image {
object-position: 85% center;
}
.hero::after {
background: linear-gradient(90deg, rgb(13 13 26 / 87%), rgb(13 13 26 / 65%)),
linear-gradient(0deg, var(--background), transparent 55%);
}
.hero__content {
max-width: 100%;
padding-block: 12px 40px;
}
.hero__eyebrow {
gap: 8px;
font-size: 10px;
letter-spacing: 0.11em;
}
.hero__eyebrow::before {
width: 20px;
}
.hero__description {
margin-top: 24px;
}
.hero__details {
grid-template-columns: 1fr;
gap: 28px;
padding-top: 24px;
}
.benefits {
gap: 16px;
}
.benefits p {
font-size: 12px;
}
.hero__caption {
padding-left: 16px;
border-left-color: var(--accent);
}
.hero__slogan {
font-size: 20px;
}
.site-footer__inner {
align-items: flex-start;
flex-direction: column;
gap: 14px;
}
.site-footer__inner p > span {
margin-left: 0;
}
.site-footer__inner > p:first-child span {
display: block;
margin-top: 4px;
}
}
@media (max-width: 360px) {
.benefits {
grid-template-columns: 1fr;
}
.benefits li {
flex-direction: row;
gap: 14px;
}
}

View File

@ -5,67 +5,69 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ernährungsberatung für Triathleten | tri-hub</title> <title>Ernährungsberatung für Triathleten | tri-hub</title>
<link rel="stylesheet" href="css/design-tokens.css"> <link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/produktuebersicht.css">
</head> </head>
<body> <body>
<!-- Leistungsübersicht Vincent --> <header class="site-header">
<section></section> <div class="container brand">
<span class="brand__name">tri-hub<span aria-hidden="true">.</span></span>
<!-- Berater & Qualifikationen Ahmad --> <span class="brand__label">Ernährungsberatung</span>
<section></section>
<!-- Info über Beratung Dennis -->
<section></section>
<!-- Produktübersicht Shahnam -->
<section class="produkt-hero" id="produktuebersicht" aria-labelledby="produkt-titel">
<div class="produkt-hero__container">
<div class="produkt-hero__brand">
<span class="produkt-hero__wordmark">tri-hub<span aria-hidden="true">.</span></span>
<span class="produkt-hero__brand-label">Ernährungsberatung</span>
</div> </div>
</header>
<div class="produkt-hero__layout"> <main>
<div class="produkt-hero__content"> <section class="hero" id="produktuebersicht" aria-labelledby="hero-title">
<p class="produkt-hero__eyebrow">Der Text wärmt sich noch auf</p> <img class="hero__image"
<h1 class="produkt-hero__title" id="produkt-titel"> src="images/hero-triathlon.webp"
Überschrift.<br> alt="Gruppe beim Radfahren und Laufen in einer Berglandschaft im Abendlicht"
Weitere Zeile.<br> width="1920" height="1080" fetchpriority="high">
<div class="container hero__inner">
<div class="hero__content">
<p class="hero__eyebrow">Der Text wärmt sich noch auf</p>
<h1 id="hero-title">
Überschrift. Weitere Zeile.
<span>Akzentzeile.</span> <span>Akzentzeile.</span>
</h1> </h1>
<p class="produkt-hero__description"> <p class="hero__description">
Hier folgt eine kurze Beschreibung der Ernährungsberatung. Hier folgt eine kurze Beschreibung der Ernährungsberatung.
Dieser Platz ist für den finalen Text vorgesehen und wird ergänzt, Dieser Platz ist für den finalen Text vorgesehen und wird ergänzt,
sobald die Inhalte vorliegen. sobald die Inhalte vorliegen.
</p> </p>
</div>
<ul class="produkt-hero__benefits" aria-label="Platzhalter für die Vorteile der Beratung"> <div class="hero__details">
<li>Erster Vorteil – Text folgt</li> <ul class="benefits" aria-label="Platzhalter für die Vorteile der Beratung">
<li>Zweiter Vorteil – Text folgt</li> <li>
<li>Dritter Vorteil – Text folgt</li> <span class="benefits__number" aria-hidden="true">01</span>
<p>Erster Vorteil <span>Text folgt</span></p>
</li>
<li>
<span class="benefits__number" aria-hidden="true">02</span>
<p>Zweiter Vorteil <span>Text folgt</span></p>
</li>
<li>
<span class="benefits__number" aria-hidden="true">03</span>
<p>Dritter Vorteil <span>Text folgt</span></p>
</li>
</ul> </ul>
</div>
<figure class="produkt-hero__visual"> <div class="hero__caption">
<img class="produkt-hero__image" <p class="hero__caption-label">Bildunterschrift folgt</p>
src="images/hero-triathlon.webp" <p class="hero__slogan">Slogan folgt. Weitere Zeile.</p>
alt="Gruppe beim Radfahren und Laufen in einer Berglandschaft im Abendlicht"
width="1920" height="1080" fetchpriority="high">
<figcaption class="produkt-hero__caption">
<span class="produkt-hero__caption-label">Bildunterschrift folgt</span>
<p class="produkt-hero__slogan">Slogan folgt.<br>Weitere Zeile.</p>
</figcaption>
</figure>
</div> </div>
<div class="produkt-hero__footer">
<p>Abschlusstext folgt.<br><span>Ergänzender Text folgt.</span></p>
<span class="produkt-hero__footer-note">Kurzhinweis folgt.</span>
</div> </div>
</div> </div>
</section> </section>
</main>
<footer>
<div class="container site-footer__inner">
<p>Abschlusstext folgt. <span>Ergänzender Text folgt.</span></p>
<p class="site-footer__note"><span aria-hidden="true"></span>Kurzhinweis folgt.</p>
</div>
</footer>
</body> </body>
</html> </html>