Layout 300
standard4 ColumnsText Align CenterMultiple ImagesButtonsImageBenefits Section

Code
relume-layout300.tsx
import { Button, type ButtonProps } from "@/components/ui/button";
import { ChevronRight } from "relume-icons";
type ImageProps = {
src: string;
alt?: string;
};
type SectionProps = {
image: ImageProps;
heading: string;
description: string;
};
type Props = {
tagline: string;
heading: string;
description: string;
sections: SectionProps[];
buttons: ButtonProps[];
};
export type Layout300Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;
export const Layout300 = (props: Layout300Props) => {
const { tagline, heading, description, sections, buttons } = {
...Layout300Defaults,
...props,
};
return (
<section className="px-[5%] py-16 md:py-24 lg:py-28">
<div className="container">
<div className="flex flex-col items-start">
<div className="mx-auto mb-12 w-full max-w-lg items-start justify-between gap-5 md:mb-18 lg:mb-20">
<p className="mb-3 text-center font-semibold md:mb-4">{tagline}</p>
<h2 className="mb-5 text-center text-h2 font-bold md:mb-6">{heading}</h2>
<p className="text-center text-medium">{description}</p>
</div>
<div className="grid grid-cols-1 items-start gap-y-12 md:grid-cols-2 md:gap-x-8 md:gap-y-16 lg:grid-cols-4">
{sections.map((section, index) => (
<div
key={index}
className="flex w-full flex-col flex-nowrap justify-start text-center"
>
<div className="mx-auto mb-5 w-full md:mb-6">
<img
src={section.image.src}
alt={section.image.alt}
className="aspect-video size-full rounded-image object-cover"
/>
</div>
<h3 className="mb-3 text-center text-h5 font-bold md:mb-4">{section.heading}</h3>
<p className="text-center">{section.description}</p>
</div>
))}
</div>
<div className="mt-12 flex w-full flex-wrap items-center justify-center gap-4 md:mt-18 lg:mt-20">
{buttons.map((button, index) => (
<Button key={index} {...button}>
{button.title}
</Button>
))}
</div>
</div>
</div>
</section>
);
};
export const Layout300Defaults: Props = {
tagline: "Tagline",
heading: "Medium length section heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.",
sections: [
{
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg",
alt: "Relume placeholder image 1",
},
heading: "Medium length section heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
},
{
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg",
alt: "Relume placeholder image 1",
},
heading: "Medium length section heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
},
{
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg",
alt: "Relume placeholder image 1",
},
heading: "Medium length section heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
},
{
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg",
alt: "Relume placeholder image 1",
},
heading: "Medium length section heading goes here",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
},
],
buttons: [
{ title: "Button", variant: "secondary" },
{
title: "Button",
variant: "link",
size: "link",
iconRight: <ChevronRight className="text-scheme-text" />,
},
],
};npm i @radix-ui/react-slot class-variance-authority@0.7.1 clsx@^2.1.1 relume-icons@1.3.0 tailwind-merge@^2.2.2


