Layout layoutdividerdiagonalslantseparator
Diagonal Section Divider
SVG slant angle section separator creating dynamic non-rectangular transitions between landing page sections.
Preview
Usage
Copy the full block below to use this component with its imports.
astro
---
import { DiagonalSectionDivider } from 'astro-component-kit';
---
<DiagonalSectionDivider angle="slant-down" fill="var(--c-bg-subtle)" height={60} /> ---
import { DiagonalSectionDivider } from 'astro-component-kit';
---
<DiagonalSectionDivider angle="slant-down" fill="var(--c-bg-subtle)" height={60} /> Manual Installation
If you are not using the npm package, create a new file src/components/lib/DiagonalSectionDivider.astro and paste the following code:
astro
---
/**
* DiagonalSectionDivider — Angled SVG/clip-path section divider creating fluid diagonal page transitions.
*
* @param {'top' | 'bottom'} position - Attachment position. Default is 'bottom'.
* @param {'left-to-right' | 'right-to-left'} direction - Slant angle direction. Default is 'left-to-right'.
* @param {string} height - Height of the diagonal incline in pixels. Default is '60px'.
* @param {string} fillColor - Fill color for the divider polygon. Default is '#050505'.
*/
interface Props {
position?: 'top' | 'bottom';
direction?: 'left-to-right' | 'right-to-left';
height?: string;
fillColor?: string;
}
const {
position = 'bottom',
direction = 'left-to-right',
height = '60px',
fillColor = '#050505',
} = Astro.props;
const isLtr = direction === 'left-to-right';
const points = isLtr
? position === 'bottom' ? '0,100 100,0 100,100' : '0,0 100,0 100,100'
: position === 'bottom' ? '0,0 0,100 100,100' : '0,0 100,0 0,100';
---
<div
class:list={['diagonal-divider', `diagonal-divider--${position}`]}
style={`--div-height: ${height}; --div-color: ${fillColor};`}
aria-hidden="true"
>
<svg
viewBox="0 0 100 100"
preserveAspectRatio="none"
class="diagonal-divider__svg"
>
<polygon points={points} fill={fillColor} />
</svg>
</div>
<style>
.diagonal-divider {
position: relative;
width: 100%;
height: var(--div-height);
overflow: hidden;
line-height: 0;
pointer-events: none;
z-index: 2;
}
.diagonal-divider--bottom {
margin-bottom: calc(-1 * var(--div-height));
}
.diagonal-divider--top {
margin-top: calc(-1 * var(--div-height));
}
.diagonal-divider__svg {
position: relative;
display: block;
width: 100%;
height: 100%;
}
</style> ---
/**
* DiagonalSectionDivider — Angled SVG/clip-path section divider creating fluid diagonal page transitions.
*
* @param {'top' | 'bottom'} position - Attachment position. Default is 'bottom'.
* @param {'left-to-right' | 'right-to-left'} direction - Slant angle direction. Default is 'left-to-right'.
* @param {string} height - Height of the diagonal incline in pixels. Default is '60px'.
* @param {string} fillColor - Fill color for the divider polygon. Default is '#050505'.
*/
interface Props {
position?: 'top' | 'bottom';
direction?: 'left-to-right' | 'right-to-left';
height?: string;
fillColor?: string;
}
const {
position = 'bottom',
direction = 'left-to-right',
height = '60px',
fillColor = '#050505',
} = Astro.props;
const isLtr = direction === 'left-to-right';
const points = isLtr
? position === 'bottom' ? '0,100 100,0 100,100' : '0,0 100,0 100,100'
: position === 'bottom' ? '0,0 0,100 100,100' : '0,0 100,0 0,100';
---
<div
class:list={['diagonal-divider', `diagonal-divider--${position}`]}
style={`--div-height: ${height}; --div-color: ${fillColor};`}
aria-hidden="true"
>
<svg
viewBox="0 0 100 100"
preserveAspectRatio="none"
class="diagonal-divider__svg"
>
<polygon points={points} fill={fillColor} />
</svg>
</div>
<style>
.diagonal-divider {
position: relative;
width: 100%;
height: var(--div-height);
overflow: hidden;
line-height: 0;
pointer-events: none;
z-index: 2;
}
.diagonal-divider--bottom {
margin-bottom: calc(-1 * var(--div-height));
}
.diagonal-divider--top {
margin-top: calc(-1 * var(--div-height));
}
.diagonal-divider__svg {
position: relative;
display: block;
width: 100%;
height: 100%;
}
</style>
Quick Info
- Category
- Layout
- Filename
DiagonalSectionDivider.astro- Dependencies
- None — pure Astro + CSS
- Tags
- layoutdividerdiagonalslantseparator