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>
<span class="brand__label">Ernährungsberatung</span>
</div>
</header>
<!-- Berater & Qualifikationen Ahmad --> <main>
<section></section> <section class="hero" id="produktuebersicht" aria-labelledby="hero-title">
<img class="hero__image"
src="images/hero-triathlon.webp"
alt="Gruppe beim Radfahren und Laufen in einer Berglandschaft im Abendlicht"
width="1920" height="1080" fetchpriority="high">
<!-- Info über Beratung Dennis --> <div class="container hero__inner">
<section></section> <div class="hero__content">
<p class="hero__eyebrow">Der Text wärmt sich noch auf</p>
<!-- Produktübersicht Shahnam --> <h1 id="hero-title">
<section class="produkt-hero" id="produktuebersicht" aria-labelledby="produkt-titel"> Überschrift. Weitere Zeile.
<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 class="produkt-hero__layout">
<div class="produkt-hero__content">
<p class="produkt-hero__eyebrow">Der Text wärmt sich noch auf</p>
<h1 class="produkt-hero__title" id="produkt-titel">
Überschrift.<br>
Weitere Zeile.<br>
<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>
<ul class="produkt-hero__benefits" aria-label="Platzhalter für die Vorteile der Beratung">
<li>Erster Vorteil – Text folgt</li>
<li>Zweiter Vorteil – Text folgt</li>
<li>Dritter Vorteil – Text folgt</li>
</ul>
</div> </div>
<figure class="produkt-hero__visual"> <div class="hero__details">
<img class="produkt-hero__image" <ul class="benefits" aria-label="Platzhalter für die Vorteile der Beratung">
src="images/hero-triathlon.webp" <li>
alt="Gruppe beim Radfahren und Laufen in einer Berglandschaft im Abendlicht" <span class="benefits__number" aria-hidden="true">01</span>
width="1920" height="1080" fetchpriority="high"> <p>Erster Vorteil <span>Text folgt</span></p>
<figcaption class="produkt-hero__caption"> </li>
<span class="produkt-hero__caption-label">Bildunterschrift folgt</span> <li>
<p class="produkt-hero__slogan">Slogan folgt.<br>Weitere Zeile.</p> <span class="benefits__number" aria-hidden="true">02</span>
</figcaption> <p>Zweiter Vorteil <span>Text folgt</span></p>
</figure> </li>
</div> <li>
<span class="benefits__number" aria-hidden="true">03</span>
<p>Dritter Vorteil <span>Text folgt</span></p>
</li>
</ul>
<div class="produkt-hero__footer"> <div class="hero__caption">
<p>Abschlusstext folgt.<br><span>Ergänzender Text folgt.</span></p> <p class="hero__caption-label">Bildunterschrift folgt</p>
<span class="produkt-hero__footer-note">Kurzhinweis folgt.</span> <p class="hero__slogan">Slogan folgt. Weitere Zeile.</p>
</div>
</div>
</div> </div>
</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> </div>
</section> </footer>
</body> </body>
</html> </html>