Configurar Tailwind CSS en un proyecto de Angular

Sin duda Tailwind CSS se ha convertido en uno de los frameworks de CSS con más crecimiento en los últimos años. Lo vimos recientemente en el State of CSS 2020, en donde alcanzó cerca de un 90% de satisfacción entre los usuarios (Te dejo el link aquí). No obstante, configurar Tailwind CSS en un proyecto de Angular era muy tedioso hace un tiempo.

Para la alegría de muchos, el crecimiento en el uso de Tailwind no ha pasado desapercibido para los desarrolladores de Angular. Es por eso que desde la versión 11.2 hacia adelante, Angular ya cuenta con soporte para Tailwind CSS de manera nativa.

Hoy te dejamos una guía práctica de cómo puedes realizar esta implementación en tus proyectos.

1. Asegúrate de tener Angular 11.2 o superior

Debemos de asegurarnos que tenemos una versión de Angular 11.2 o superior. Si estás seguro de ello puedes saltarte este paso e ir al paso número 2.

Com pirmer paso, abrimos la terminal (En windows puedes abrir Windows Powershell en modo Administrador) e ingresamos el comando ng --version el cual mostrará la versión de angular que tenemos instalada. Si como en mi caso, tienes una versión inferior de Angular (Yo tengo la 11.0.7) vamos a tener que actualizar nuestro angular CLI:

angular-cli-11.0-7

Actualizando Angular CLI

Para tener la versión más reciente de Angular CLI primero desinstalaremos la que tenemos instalada. Ejecutaremos:

  
npm uninstall -g angular-cli
  

Luego, para instalar la nueva versión de Angular, ejecutamos:

  
npm install -g @angular/cli@latest
  

Al final de la instalación en nuestra consola se indicará la versión instalada (en este caso la versión 12.0.1).

angular-lastest-installed

De igual manera puedes ejecutar ng --version nuevamente para ver más detalles de la versión instalada.

angular-cli-12.0.1

¡Bien!, Ahora que estamos seguros de tener la última versión de Angular instalada empecemos a configurar Tailwind CSS en un proyecto de Angular.

2. Iniciar un nuevo proyecto en Angular

Vamos a generar un nuevo proyecto de Angular. Para ello ejecutaremos:

  
ng new tailwind-project
  

Seleccionaremos el routing por defecto y SCSS para el manejo de las hojas de estilo. Luego esperamos a que el proceso de creación concluya.

ng-new-project
ng-new-project-trace

Por último ejecutamos el comando npm install para importar todas las dependencias necesarias para que nuestro proyecto funcione correctamente.

3. Configurar Tailwind CSS en Angular

Ahora que ya tenemos nuestro proyecto creado, vamos a agregarle Tailwind CSS.

Ingresamos al directorio de nuestro proyecto y lo abriremos desde un editor de texto. Yo usaré VSCode en esta ocasión pero siéntete libre de usar el editor de tu preferencia.

opening-project

Ya dentro de VSCode, abrimos una terminal (Ctrl+J en VSCode) e instalamos Taillwind con el siguiente comando:

  
npm install tailwindcss
  
npm-install-tailwindcss

Luego ejecutamos el siguiente comando para generar el archivo de configuración tailwind.config.js:

  
npx tailwindcss init
  
npx-tailwindcss-init

Una vez inicializado, modificaremos el archivo tailwind.config.js con lo siguiente:

module.exports = {
  purge: [],
  darkMode: false, // or 'media' or 'class'
  prefix: "",
  purge: {
    enabled: true,
    content: ["./src/**/*.{html,ts}"],
  },
  darkMode: "class", // or 'media' or 'class'
  theme: {
    extend: {},
  },
  variants: {
    extend: {},
  },
  plugins: [],
}

Como último paso agregaremos los @imports de Tailwind en nuestro archivo styles.scss

  
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
  
style.scss

¡Listo! con esto ya tenemos instalado Tailwind en nuestro proyecto.

5. Probando Tailwind CSS

Ahora, ¡Probemos Tailwind CSS!

Para esto, tomaremos un componente de ejemplo de la página oficial tailwindui.com de la cual vamos a utilizar el componente HeroSection.

Luego modificaremos nuestro archivo app.component.html para agregarle el código del Hero Section:

  
<!-- This example requires Tailwind CSS v2.0+ -->
<div class="relative bg-white overflow-hidden">
  <div class="max-w-7xl mx-auto">
    <div class="relative z-10 pb-8 bg-white sm:pb-16 md:pb-20 lg:max-w-2xl lg:w-full lg:pb-28 xl:pb-32">
      <svg class="hidden lg:block absolute right-0 inset-y-0 h-full w-48 text-white transform translate-x-1/2" fill="currentColor" viewBox="0 0 100 100" preserveAspectRatio="none" aria-hidden="true">
        <polygon points="50,0 100,0 50,100 0,100" />
      </svg>

      <div>
        <div class="relative pt-6 px-4 sm:px-6 lg:px-8">
          <nav class="relative flex items-center justify-between sm:h-10 lg:justify-start" aria-label="Global">
            <div class="flex items-center flex-grow flex-shrink-0 lg:flex-grow-0">
              <div class="flex items-center justify-between w-full md:w-auto">
                <a href="#">
                  <span class="sr-only">Workflow</span>
                  <img class="h-8 w-auto sm:h-10" src="https://tailwindui.com/img/logos/workflow-mark-indigo-600.svg">
                </a>
                <div class="-mr-2 flex items-center md:hidden">
                  <button type="button" class="bg-white rounded-md p-2 inline-flex items-center justify-center text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500" aria-expanded="false">
                    <span class="sr-only">Open main menu</span>
                    <!-- Heroicon name: outline/menu -->
                    <svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
                      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
                    </svg>
                  </button>
                </div>
              </div>
            </div>
            <div class="hidden md:block md:ml-10 md:pr-4 md:space-x-8">
              <a href="#" class="font-medium text-gray-500 hover:text-gray-900">Product</a>
              <a href="#" class="font-medium text-gray-500 hover:text-gray-900">Features</a>
              <a href="#" class="font-medium text-gray-500 hover:text-gray-900">Marketplace</a>
              <a href="#" class="font-medium text-gray-500 hover:text-gray-900">Company</a>
              <a href="#" class="font-medium text-indigo-600 hover:text-indigo-500">Log in</a>
            </div>
          </nav>
        </div>
        <div class="absolute top-0 inset-x-0 p-2 transition transform origin-top-right md:hidden">
          <div class="rounded-lg shadow-md bg-white ring-1 ring-black ring-opacity-5 overflow-hidden">
            <div class="px-5 pt-4 flex items-center justify-between">
              <div>
                <img class="h-8 w-auto" src="https://tailwindui.com/img/logos/workflow-mark-indigo-600.svg" alt="">
              </div>
              <div class="-mr-2">
                <button type="button" class="bg-white rounded-md p-2 inline-flex items-center justify-center text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500">
                  <span class="sr-only">Close main menu</span>
                  <!-- Heroicon name: outline/x -->
                  <svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
                  </svg>
                </button>
              </div>
            </div>
            <div class="px-2 pt-2 pb-3 space-y-1">
              <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">Product</a>
              <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">Features</a>
              <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">Marketplace</a>
              <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">Company</a>
            </div>
            <a href="#" class="block w-full px-5 py-3 text-center font-medium text-indigo-600 bg-gray-50 hover:bg-gray-100">
              Log in
            </a>
          </div>
        </div>
      </div>

      <main class="mt-10 mx-auto max-w-7xl px-4 sm:mt-12 sm:px-6 md:mt-16 lg:mt-20 lg:px-8 xl:mt-28">
        <div class="sm:text-center lg:text-left">
          <h1 class="text-4xl tracking-tight font-extrabold text-gray-900 sm:text-5xl md:text-6xl">
            <span class="block xl:inline">Data to enrich your</span>
            <span class="block text-indigo-600 xl:inline">online business</span>
          </h1>
          <p class="mt-3 text-base text-gray-500 sm:mt-5 sm:text-lg sm:max-w-xl sm:mx-auto md:mt-5 md:text-xl lg:mx-0">
            Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui lorem cupidatat commodo. Elit sunt amet fugiat veniam occaecat fugiat aliqua.
          </p>
          <div class="mt-5 sm:mt-8 sm:flex sm:justify-center lg:justify-start">
            <div class="rounded-md shadow">
              <a href="#" class="w-full flex items-center justify-center px-8 py-3 border border-transparent text-base font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 md:py-4 md:text-lg md:px-10">
                Get started
              </a>
            </div>
            <div class="mt-3 sm:mt-0 sm:ml-3">
              <a href="#" class="w-full flex items-center justify-center px-8 py-3 border border-transparent text-base font-medium rounded-md text-indigo-700 bg-indigo-100 hover:bg-indigo-200 md:py-4 md:text-lg md:px-10">
                Live demo
              </a>
            </div>
          </div>
        </div>
      </main>
    </div>
  </div>
  <div class="lg:absolute lg:inset-y-0 lg:right-0 lg:w-1/2">
    <img class="h-56 w-full object-cover sm:h-72 md:h-96 lg:w-full lg:h-full" src="https://images.unsplash.com/photo-1551434678-e076c223a692?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80" alt="">
  </div>
</div>

<router-outlet></router-outlet>
  

Si ejecutamos nuestro proyecto ingresando el comando ng serve -o en nuestra terminal tendremos el siguiente resultado:

tailwindcss-test

¡Genial! De esta forma estamos comprobando que Tailwind CSS se ha integrado al proyecto de manera correcta.

El día de hoy vimos como con Angular 11.2 o superior podemos configurar Taillwind CSS de una manera fácil y muy rápida. Si deseas replicar el ejercicio, te dejo el link al repositorio de Github en donde está todo el código realizado en esta guía:

https://github.com/sayakatech/tailwind-project

Por último, si este artículo te fue útil, te invito a que puedas compartirlo con otras personas para que así ellos también aprendan a configurar Tailwind CSS en su proyecto Angular.

¡Que estés bien! Nos vemos en un próximo artículo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.