View as Markdown

Pagination

Use the Tailwind CSS pagination element to indicate a series of content across various pages based on multiple styles and sizes

Loading...
<twig:Pagination>
    <twig:Pagination:Content>
        <twig:Pagination:Item>
            <twig:Pagination:Previous href="#" />
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#">1</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#" active>2</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#">3</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Next href="#" />
        </twig:Pagination:Item>
    </twig:Pagination:Content>
</twig:Pagination>

Installation

php bin/console ux:install pagination --kit flowbite-4

Install the following Composer dependencies:

composer require symfony/ux-icons tales-from-a-dev/twig-tailwind-extra:^1.0.0

Copy the following file(s) into your app:

{# @block content The pagination structure, typically a `Pagination:Content`. #}
&lt;nav
    class=&quot;{{ (&#039;flex items-center space-x-4 &#039; ~ attributes.render(&#039;class&#039;))|tailwind_merge }}&quot;
    role=&quot;navigation&quot;
    {{ attributes }}
&gt;
    {%- block content %}{% endblock -%}
&lt;/nav&gt;
{# @block content The pagination items, typically multiple `Pagination:Item` components. #}
&lt;ul
    class=&quot;{{ (&#039;flex -space-x-px text-sm rounded-base [&amp;_a]:h-10 [&amp;_*]:rounded-none [&amp;&gt;*:first-child]:[&amp;_*]:rounded-s-base [&amp;&gt;*:last-child]:[&amp;_*]:rounded-e-base &#039; ~ attributes.render(&#039;class&#039;))|tailwind_merge }}&quot;
    {{ attributes }}
&gt;
    {%- block content %}{% endblock -%}
&lt;/ul&gt;
{# @block content The pagination item content, typically a `Pagination:Link`. #}
&lt;li{{ attributes }}&gt;
    {%- block content %}{% endblock -%}
&lt;/li&gt;
{# @prop active boolean Whether this is the current page. #}
{# @block content The page number or navigation icon. #}
{%- props active = false -%}
&lt;twig:Button
    as=&quot;a&quot;
    variant=&quot;secondary&quot;
    shape=&quot;rounded&quot;
    size=&quot;icon&quot;
    aria-current=&quot;{{ active ? &#039;page&#039; : false }}&quot;
    href=&quot;#&quot;
    class=&quot;{{ active ? &#039;text-fg-brand bg-neutral-tertiary-medium&#039; : &#039;&#039; }}&quot;
    {{ ...attributes.without(&#039;class&#039;) }}
&gt;
    {{- block(outerBlocks.content) -}}
&lt;/twig:Button&gt;
{# @prop asIcon boolean Whether to render only the chevron icon instead of the text label. #}
{% props asIcon = false %}

&lt;twig:Pagination:Link
    aria-label=&quot;Go to next page&quot;
    size=&quot;{{ asIcon ? &#039;icon&#039; : &#039;default&#039; }}&quot;
    {{ ...attributes }}
&gt;
    {% if asIcon %}
        &lt;twig:ux:icon name=&quot;flowbite:chevron-right-outline&quot; class=&quot;size-4&quot; /&gt;
    {% else %}
        &lt;span&gt;Next&lt;/span&gt;
    {% endif %}
&lt;/twig:Pagination:Link&gt;
{# @prop asIcon boolean Whether to render only the chevron icon instead of the text label. #}
{% props asIcon = false %}

&lt;twig:Pagination:Link
    aria-label=&quot;Go to previous page&quot;
    size=&quot;{{ asIcon ? &#039;icon&#039; : &#039;default&#039; }}&quot;
    {{ ...attributes }}
&gt;
    {% if asIcon %}
        &lt;twig:ux:icon name=&quot;flowbite:chevron-left-outline&quot; class=&quot;size-4&quot; /&gt;
    {% else %}
        &lt;span&gt;Previous&lt;/span&gt;
    {% endif %}
&lt;/twig:Pagination:Link&gt;

Usage

<twig:Pagination>
    <twig:Pagination:Content>
        <twig:Pagination:Item>
            <twig:Pagination:Previous href="#" />
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#">1</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#" active>2</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#">3</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Next href="#" />
        </twig:Pagination:Item>
    </twig:Pagination:Content>
</twig:Pagination>

Examples

As icon

The following pagination component example shows how you can use SVG icons instead of text to show the previous and next pages.

Loading...
<twig:Pagination>
    <twig:Pagination:Content>
        <twig:Pagination:Item>
            <twig:Pagination:Previous asIcon href="#" />
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#">1</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#" active>2</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Link href="#">3</twig:Pagination:Link>
        </twig:Pagination:Item>
        <twig:Pagination:Item>
            <twig:Pagination:Next asIcon href="#" />
        </twig:Pagination:Item>
    </twig:Pagination:Content>
</twig:Pagination>

API Reference

<twig:Pagination>

Block Description
content The pagination structure, typically a Pagination:Content.

<twig:Pagination:Content>

Block Description
content The pagination items, typically multiple Pagination:Item components.

<twig:Pagination:Item>

Block Description
content The pagination item content, typically a Pagination:Link.
Prop Type Default
active 
boolean false
Block Description
content The page number or navigation icon.

<twig:Pagination:Next>

Prop Type Default
asIcon 
boolean false

<twig:Pagination:Previous>

Prop Type Default
asIcon 
boolean false