Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

187
Views
The <template> tag doesn't work with x-transition in Alpine.js

I have this code that works and the animation is nice:

<script src="https://unpkg.com/alpinejs@3.7.0/dist/cdn.min.js"></script>

<div x-data="{ open: false }" x-on:click.outside="open = false" x-on:keydown.escape="open = false">
  <button x-on:click="open = !open">
    Click me
  </button>
  <div x-show="open" x-transition>
    <div>
      <ul>
        <li>Dogs</li>
        <li>Cats</li>
        <li>Snakes</li>
      </ul>
    </div>
  </div>
</div>

Then I try to use the <template> tag instead of the <div> tag and change x-show to x-if (because x-show doesn't work with <template> tags at all) like this:

<script src="https://unpkg.com/alpinejs@3.7.0/dist/cdn.min.js"></script>

<div x-data="{ open: false }" x-on:click.outside="open = false" x-on:keydown.escape="open = false">
  <button x-on:click="open = !open">
    Click me
  </button>
  <template x-if="open" x-transition>
    <div>
      <ul>
        <li>Dogs</li>
        <li>Cats</li>
        <li>Snakes</li>
      </ul>
    </div>
  </template>
</div>

it can toggle hidden and shown states, but no transition at all.

Any idea how to make <template> tags support smooth fade in/out transitions?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

I faced this problem too, the only solution I found was adding x-data and x-init attributes and toggling the variable for the x-show directive inside of an $nextTick call. Here is an example:

<script src="https://unpkg.com/alpinejs@3.7.0/dist/cdn.min.js"></script>

<div x-data="{ open: false }" x-on:click.outside="open = false" x-on:keydown.escape="open = false">
  <button x-on:click="open = !open">
    Click me
  </button>
  <template x-if="open">
    <div x-data="{ show: false }"
         x-init="$nextTick(() => { show = true })"
         x-show="show"
         x-transition>
      <ul>
        <li>Dogs</li>
        <li>Cats</li>
        <li>Snakes</li>
      </ul>
    </div>
  </template>
</div>

about 4 years ago · Juan Pablo Isaza Report

0

This will not work as you expect. The reason being is that if you want to use a <template> tag in order to hide that section on initial page load with display: none (which is a default behavior), transition here will not work. Alpinejs does not support it.

Unlike x-show, x-if, does NOT support transitioning toggles with x-transition.

as you can see on their official page.

You should continue using div and avoid template if you want transition animation. It wont even work like this:

  <template x-if="open">
    <div x-show="open" x-transition.duration.1500ms>

But, maybe you can try something like this:

<div x-data="{ open: false, animals: ['Animals'] }" x-on:click.outside="open = false" x-on:keydown.escape="open = false">
  <button x-on:click="open = !open">
    Click me
  </button>
  <template  x-for="animal in animals">
    <div x-show="open" x-transition.duration.1500ms>
      <ul>
        <li>Dogs</li>
        <li>Cats</li>
        <li>Snakes</li>
      </ul>
    </div>
  </template>
</div>
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!