Nuxt UI v3-alpha has been released!

Try it out

LandingHero

A responsive hero for your landing pages.

Usage

The LandingHero component will wrap your content in a Container but the wrapper takes the full width of the screen so you can easily change the background.

Use the title and description props to customize the content of the hero.

Turn Your Vision into Reality

Watch your dreams materialize before your eyes with us.
<template>
  <ULandingHero
    title="Turn Your Vision into Reality"
    description="Watch your dreams materialize before your eyes with us."
  />
</template>

Use the links prop to add some Buttons below the description.

Turn Your Vision into Reality

Watch your dreams materialize before your eyes with us.
<template>
  <ULandingHero
    title="Turn Your Vision into Reality"
    description="Watch your dreams materialize before your eyes with us."
    :links="[{ label: 'Get Started', icon: 'i-heroicons-rocket-launch', size: 'lg' }, { label: 'Learn more', trailing-icon: 'i-heroicons-arrow-small-right', color: 'gray', size: 'lg' }]"
  />
</template>

You can add anything you want in the default slot, an image or a code-block using the MDC component (when using @nuxt/content) for example.

You can change the orientation prop from vertical to horizontal to position the slot on the right side of the hero (this will render better on full-screen).

You can use the #headline slot to add a Badge, a Button or anything you want above the title.

Supercharged GitHub experience

Work in real-time with your team on open-source and private repositories, all in one place. Working on GitHub issues and notifications has never been that fun.
<template>
  <ULandingHero
    title="Supercharged GitHub experience"
    description="Work in real-time with your team on open-source and private repositories, all in one place. Working on GitHub issues and notifications has never been that fun."
    orientation="vertical"
    :links="[{ label: 'Continue with GitHub', icon: 'i-simple-icons-github', color: 'gray', size: 'lg' }]"
  >
    <template #headline>
      <UButton
        color="gray"
        to="https://volta.net/changelog"
        label="See what's new in v1.17.0"
        trailing-icon="i-heroicons-arrow-right"
        size="xs"
        class="rounded-full"
      />
    </template>
    <template #default>
      <img
        src="https://picsum.photos/640/360"
        class="w-full rounded-md shadow-xl ring-1 ring-gray-300 dark:ring-gray-700"
      />
    </template>
  </ULandingHero>
</template>

You can also use the #title, #description and #links slots to customize the content of the hero. This can be quite useful when using @nuxt/content if your content has HTML for example:

content/index.yml
navigation: false
hero:
  title: The <span class="text-primary">Building Blocks</span> for<br>Modern Web Apps
  description: 'Nuxt UI Pro is a collection of premium Vue components built on top of Nuxt UI to create beautiful & responsive Nuxt applications in minutes.<br>It includes all primitives to build landing pages, documentation, blogs, changelog, dashboards or entire SaaS products.'
  links:
    - label: Get Started
      to: /pro/getting-starated
      size: lg
      icon: i-heroicons-rocket-launch
    - label: Buy now
      to: /pro/pricing
      color: gray
      icon: i-heroicons-ticket
      size: lg
We're using .yml files as an example here but you can use any format supported by @nuxt/content like .md or .json.
pages/index.vue
<script setup lang="ts">
const { data: page } = await useAsyncData('index', () => queryContent('/').findOne())
</script>

<template>
  <ULandingHero :links="page.hero.links">
    <template #title>
      <span v-html="page.hero.title" />
    </template>

    <template #description>
      <span v-html="page.hero.description" />
    </template>
  </ULandingHero>
</template>

You can use the #top and #bottom slots to add content above and below the container, this can be useful when adding some absolute positioned svgs for example.

Slots

top
{}
headline
{}
title
{}
description
{}
links
{}
default
{}
bottom
{}

Props

ui
any
{}
orientation
"horizontal" | "vertical"
"vertical"
title
string
undefined
description
string
undefined
links
(Button & { click?: (...args: any[]) => void; })[]
[]

Config

{
  wrapper: 'py-24 sm:py-32 md:py-40 relative',
  container: 'gap-16 sm:gap-y-24 flex flex-col',
  base: 'text-center',
  headline: 'mb-10',
  title: 'text-5xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-7xl',
  description: 'mt-6 text-lg tracking-tight text-gray-600 dark:text-gray-300',
  links: 'mt-10 flex flex-wrap justify-center gap-x-6 gap-y-3'
}