Skip to content

Commit ee5d903

Browse files
feat(PageHeader/PageFooter/PageBody): pas dsn.page.max-inline-size toe op inner containers
Achtergronden blijven full-bleed; __inner containers beperken de inhoudsbreedte via var(--dsn-page-max-inline-size). Templates kunnen full-width gedrag inschakelen via --dsn-page-max-inline-size: none op PageLayout. Closes #171 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent a7dc495 commit ee5d903

5 files changed

Lines changed: 104 additions & 4 deletions

File tree

packages/components-html/src/page-body/page-body.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,6 @@
2727

2828
.dsn-page-body__inner {
2929
padding-inline: var(--dsn-page-body-padding-inline);
30+
max-inline-size: var(--dsn-page-max-inline-size);
31+
margin-inline: auto;
3032
}

packages/components-html/src/page-footer/page-footer.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
.dsn-page-footer__inner {
3939
padding-block: var(--dsn-page-footer-padding-block);
4040
padding-inline: var(--dsn-page-footer-padding-inline);
41+
max-inline-size: var(--dsn-page-max-inline-size);
42+
margin-inline: auto;
4143
}
4244

4345
/* =============================================================================

packages/components-html/src/page-header/page-header.css

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,15 @@
8585
.dsn-page-header__masthead {
8686
background-color: var(--dsn-page-header-masthead-background-color);
8787
padding-block: var(--dsn-page-header-masthead-padding-block);
88-
padding-inline: var(--dsn-page-header-masthead-padding-inline);
8988
}
9089

9190
.dsn-page-header__masthead-inner {
9291
display: flex;
9392
justify-content: space-between;
9493
align-items: center;
94+
padding-inline: var(--dsn-page-header-masthead-padding-inline);
95+
max-inline-size: var(--dsn-page-max-inline-size);
96+
margin-inline: auto;
9597
}
9698

9799
/* =============================================================================
@@ -133,13 +135,18 @@
133135
logo (inline-start) en servicemenu + zoekknop (inline-end).
134136
============================================================================= */
135137

138+
.dsn-page-header__compact-layout {
139+
background-color: var(--dsn-page-header-compact-background-color);
140+
}
141+
136142
.dsn-page-header__compact-inner {
137143
display: grid;
138144
grid-template-columns: 1fr auto 1fr;
139145
align-items: center;
140-
background-color: var(--dsn-page-header-compact-background-color);
141146
padding-block: var(--dsn-page-header-compact-padding-block);
142147
padding-inline: var(--dsn-page-header-compact-padding-inline);
148+
max-inline-size: var(--dsn-page-max-inline-size);
149+
margin-inline: auto;
143150
}
144151

145152
/* Logo in compact context links uitlijnen — niet centreren zoals in de mobile bar.
@@ -168,7 +175,6 @@
168175

169176
.dsn-page-header__navbar {
170177
background-color: var(--dsn-page-header-navbar-background-color);
171-
padding-inline: var(--dsn-page-header-navbar-padding-inline);
172178

173179
/* MenuLink-items in de navbar krijgen een grotere min-block-size en ruimere
174180
padding-inline. Door de tokens te overschrijven op de container werkt de
@@ -177,6 +183,12 @@
177183
--dsn-menu-item-padding-inline: var(--dsn-space-inline-xl);
178184
}
179185

186+
.dsn-page-header__navbar-inner {
187+
padding-inline: var(--dsn-page-header-navbar-padding-inline);
188+
max-inline-size: var(--dsn-page-max-inline-size);
189+
margin-inline: auto;
190+
}
191+
180192
/* =============================================================================
181193
Sticky gedrag
182194
============================================================================= */
@@ -226,6 +238,8 @@
226238
align-items: center;
227239
padding-block: var(--dsn-page-header-padding-block);
228240
padding-inline: var(--dsn-page-header-padding-inline);
241+
max-inline-size: var(--dsn-page-max-inline-size);
242+
margin-inline: auto;
229243
}
230244

231245
/* =============================================================================
@@ -281,13 +295,15 @@
281295
.dsn-page-header__search-panel {
282296
background-color: var(--dsn-page-header-search-panel-background-color);
283297
padding-block: var(--dsn-page-header-search-panel-padding-block);
284-
padding-inline: var(--dsn-page-header-search-panel-padding-inline);
285298
}
286299

287300
.dsn-page-header__search-inner {
288301
display: flex;
289302
gap: var(--dsn-space-inline-md);
290303
align-items: flex-start;
304+
padding-inline: var(--dsn-page-header-search-panel-padding-inline);
305+
max-inline-size: var(--dsn-page-max-inline-size);
306+
margin-inline: auto;
291307
}
292308

293309
/* SearchInput wrapper vult beschikbare ruimte volledig — overschrijft de standaard

packages/storybook/src/templates/BasePage.stories.tsx

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,40 @@ export const Inverse: Story = {
311311
</Body>
312312
),
313313
};
314+
315+
export const FullWidth: Story = {
316+
name: 'Base Page: Full Width',
317+
render: () => (
318+
<Body>
319+
<SkipLink href="#main-content" />
320+
<PageLayout
321+
style={{ '--dsn-page-max-inline-size': 'none' } as React.CSSProperties}
322+
>
323+
<PageHeader
324+
logoSlot={logoSlot}
325+
primaryNavigation={<PrimaryNavigation />}
326+
primaryNavigationLarge={primaryNavigationLarge}
327+
secondaryNavigation={secondaryNavigation}
328+
secondaryNavigationLarge={secondaryNavigationLarge}
329+
searchSlot={searchSlot}
330+
/>
331+
<PageBody>
332+
<main id="main-content" tabIndex={-1} style={mainStyle}>
333+
<Heading level={1}>Paginatitel</Heading>
334+
<Paragraph>
335+
Full-width variant: <code>--dsn-page-max-inline-size</code> is
336+
ingesteld op <code>none</code> op de PageLayout. Header, body en
337+
footer nemen de volledige viewport-breedte in.
338+
</Paragraph>
339+
</main>
340+
</PageBody>
341+
<PageFooter
342+
slot1={footerSlot1}
343+
slot2={footerSlot2}
344+
slot3={footerSlot3}
345+
slot4={footerSlot4}
346+
/>
347+
</PageLayout>
348+
</Body>
349+
),
350+
};

packages/storybook/src/templates/GridPage.stories.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,3 +260,46 @@ export const Default: Story = {
260260
</Body>
261261
),
262262
};
263+
264+
export const FullWidth: Story = {
265+
name: 'Grid Page: Full Width',
266+
render: () => (
267+
<Body>
268+
<SkipLink href="#main-content" />
269+
<PageLayout
270+
style={{ '--dsn-page-max-inline-size': 'none' } as React.CSSProperties}
271+
>
272+
<PageHeader
273+
logoSlot={logoSlot}
274+
primaryNavigation={<PrimaryNavigation />}
275+
primaryNavigationLarge={primaryNavigationLarge}
276+
secondaryNavigation={secondaryNavigation}
277+
secondaryNavigationLarge={secondaryNavigationLarge}
278+
searchSlot={searchSlot}
279+
/>
280+
<PageBody>
281+
<main id="main-content" tabIndex={-1} style={mainStyle}>
282+
<Stack space="2xl">
283+
<Grid style={{ '--dsn-grid-margin': '0' } as React.CSSProperties}>
284+
<GridItem colSpan={12}>
285+
<Container>
286+
<Paragraph>
287+
Full-width: inhoud strekt zich uit over de volledige
288+
viewport-breedte.
289+
</Paragraph>
290+
</Container>
291+
</GridItem>
292+
</Grid>
293+
</Stack>
294+
</main>
295+
</PageBody>
296+
<PageFooter
297+
slot1={footerSlot1}
298+
slot2={footerSlot2}
299+
slot3={footerSlot3}
300+
slot4={footerSlot4}
301+
/>
302+
</PageLayout>
303+
</Body>
304+
),
305+
};

0 commit comments

Comments
 (0)