Skip to main content

Creación de componentes de Vue 3 con Tailwind CSS

Escrito por
Headshot of Mary Gathoni

Mary Gathoni

feature api

21 de febrero de 2023

0 minutos de lectura

Vue es un framework popular de JavaScript para crear interfaces web versátiles. Algunas de sus características más atractivas son su fácil integración en bases de código existentes y su ligereza, que facilita a los desarrolladores empezar a usarlo en sus proyectos de frontend.

Vue se basa en un enfoque de componentes componibles para crear aplicaciones web de interfaz de usuario. Los componentes son fragmentos de código reutilizables que puedes usar como bloques de construcción de tus aplicaciones. El modelo de componentes de Vue te permite crear componentes independientes con lógica, contenido y estilos en un mismo lugar.

Al aplicar estilos a estos componentes, puedes usar un framework como Tailwind CSS para incluir los estilos directamente en el marcado y encapsular aún más el componente. Tailwind CSS es un framework de CSS que incorpora clases reutilizables para aplicar estilos a elementos de la interfaz de usuario (UI). Puedes usar estas clases para aplicar elementos de estilo como fuentes, colores, rellenos, márgenes, animaciones y transiciones. Por ejemplo, el atributo text-black mostrará todo el texto de un elemento en color negro. Estas clases son componibles y puedes combinarlas para implementar cualquier diseño.

En este tutorial aprenderás a crear componentes de Vue 3 con Tailwind CSS mediante la creación de una tarjeta de artículo adaptable. El código completo del proyecto está disponible aquí.

Requisitos previos

Para seguir este tutorial, necesitarás:

  • Una versión actualizada de Node.js y npm instalados

  • Un editor de texto como Visual Studio Code (VS Code)

  • Conocimientos de la línea de comandos

  • Familiaridad con Vue y CSS

Cómo crear tus propios componentes de Vue 3 con Tailwind

Para empezar, crea un nuevo proyecto de Vue 3. Ejecuta el siguiente comando en la terminal para instalar y ejecutar create-vue, la herramienta oficial de Vue para crear la estructura inicial de proyectos basados en vite:

npm init vue@latest

Verás una lista de funciones opcionales. Asigna el nombre vue-tailwindcss al proyecto y elige No para el resto de las opciones.

√ Project name: ... vue-tailwindcss
√ Add TypeScript? ... No / Yes
√ Add JSX Support? ... No / Yes
√ Add Vue Router for Single Page Application development? ... No / Yes
√ Add Pinia for state management? ... No / Yes
√ Add Vitest for Unit Testing? ... No / Yes
√ Add an End-to-End Testing Solution? » No
√ Add ESLint for code quality? ... No / Yes
√ Add Prettier for code formatting? ... No / Yes

Ahora, ve a la carpeta del proyecto con cd vue-tailwindcss y ejecuta npm install para instalar desde npm las dependencias de código abierto del proyecto.

Ejecuta npm run dev para iniciar la aplicación en un entorno de desarrollo.

Este comando debería iniciar la aplicación en el servidor local:

Salida de la terminal que muestra Vite v4.0.4 ejecutándose localmente en http://localhost:5173/

Ve a la URL local indicada para ver la aplicación:

Página de bienvenida oscura de un proyecto de Vue que muestra el logotipo de Vue, el mensaje «¡Lo lograste!», enlaces de navegación y secciones de documentación, herramientas, ecosistema, comunidad y

Ahora es momento de configurar Tailwind CSS en la aplicación de Vue.

Cómo configurar Tailwind con Vue

Para empezar, ejecuta el siguiente comando en la terminal:

npm install -D tailwindcss@latest postcss@latest autoprefixer@latest

Este comando instala Tailwind CSS y sus dependencias de pares (autoprefixer y postcss) mediante npm.

A continuación, genera los archivos tailwind.config.js y postcss.config.js ejecutando el siguiente comando. Usarás estos archivos para configurar y personalizar Tailwind:

npx tailwindcss init -p

Este comando debería crear tailwind.config.js en la raíz del proyecto con estos detalles:

   module.exports = {
   content: [],
   theme: {
     extend: {},
   },
   plugins: [],
 }

También creaste postcss.config.js y configuraste los complementos tailwindcss y autoprefixer:

  module.exports = {
   plugins: {
     tailwindcss: {},
     autoprefixer: {},
   },
 }

En tailwind.config.js, modifica el arreglo content para incluir todas las rutas de tus páginas y componentes. Así configurarás Tailwind para que elimine las clases CSS no utilizadas del resultado final y reduzca el tamaño del archivo.

Tu archivo tailwind.config.js debería verse así:

  module.exports = {
   content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"],
   theme: {
     extend: {},
   },
   plugins: [],
  };

A continuación, crea un archivo llamado index.css en la carpeta src del proyecto y agrega lo siguiente:

@tailwind base;
@tailwind components;
@tailwind utilities;

Usaste la directiva @tailwind para incluir en el proyecto los estilos base, de componentes y de utilidades de Tailwind. Más adelante, al compilar el proyecto, Tailwind reemplazará automáticamente estas directivas por los estilos que especificaste.

Ahora, importa index.css en nuestro archivo ./src/main.js para empezar a usarlo:

import './index.css'

Ten en cuenta que debes eliminar la línea que importa el archivo assets/main.css. Así evitarás usar CSS convencional.

Ahora puedes empezar a crear componentes con Tailwind.

Cómo crear componentes de Vue

Para aprender a usar Tailwind en componentes de Vue, crea un componente de tarjeta para un artículo.

Luego, crea un archivo llamado ArticleCard.vue en la carpeta src/components. Agrega el siguiente código:

<template>
  <div>
    <div>
      <img src="../assets/coverimage.jpg" alt="Close-up of code" />
    </div>
    <div>
      <div>Vue</div>
      <a href="#">Building Vue 3 Components With Tailwind CSS</a>
      <p>
        Learn how to create visually stunning Vue components using the popular
        utility-first CSS framework Tailwind.
      </p>
    </div>
  </div>
</template>

El código anterior crea una plantilla llamada ArticleCard, que define un componente de tarjeta compuesto por una imagen y una descripción informativa del artículo.

Para mostrarlo en el navegador, limpia la página de inicio eliminando todo el contenido del archivo App.vue. Luego, importa el componente ArticleCard en la sección de script de App.vue:

<script setup>
import ArticleCard from "./components/ArticleCard.vue";
</script>

Luego, úsalo en la plantilla:

<template>
  <ArticleCard />
</template>

El siguiente paso es aplicar estilos a la tarjeta con las clases de utilidad de Tailwind CSS.

Explicación de las clases de utilidad

Con CSS convencional y algunos otros frameworks de CSS, puedes usar clases de CSS personalizadas para aplicar estilos a los elementos de una página.

Este es un ejemplo de un elemento de enlace con estilos aplicados mediante las clases link-wrapper y link:

<template>
  <div class="link-wrapper">
    <a href="#" class="link">Building Vue 3 Components With Tailwind CSS</a>
  </div>
</template>
<style>
.link-wrapper {
  padding: 8px;
}
.link {
  font-weight: 500;
  font-size: 1.125rem;
  line-height: 1.75rem;
  color: #000;
}
</style>

¿Por qué usar Tailwind CSS?

El problema de este enfoque es que debes generar nombres de clase significativos cada vez que necesitas aplicar estilos a un elemento. Como alternativa, debes recordar un nombre extremadamente largo y descriptivo cada vez que quieras reutilizar una clase. También tienes que escribir mucho código CSS, ya que cada nombre de clase que agregas a una página viene acompañado de estilos. Por eso, a medida que crece tu aplicación, también crecen los archivos CSS, lo que aumenta el tamaño del paquete y hace que los tiempos de carga sean más lentos.

Sin embargo, en Tailwind CSS puedes usar clases CSS predefinidas llamadas clases de utilidad. Estas clases ofrecen opciones de estilo comunes como flex, alineación del texto, bordes, márgenes, relleno y color. Te permiten aplicar estilos a las páginas sin escribir CSS.

Veamos cómo quedaría el ejemplo anterior del enlace con estilos de Tailwind CSS:

<div class="p-8">
    <a href="#" class="font-medium text-lg text-black">Vue + TailwindCSS</a>
</div>

Ahora reemplazaste el objeto de estilos y las clases personalizadas por las siguientes clases de utilidad:

  • p-8 establece el relleno en 8 px.

  • font-medium establece el grosor de la fuente en 500 px.

  • text-xl establece el tamaño de la fuente en 1.125 rem y la altura de línea en 1.75 rem.

  • text-black establece el color del texto en negro.

Usar clases de utilidad reduce la cantidad de CSS y facilita que cualquier persona que revise el código entienda la intención de los estilos aplicados a los elementos, sin tener que consultar una hoja de estilos.

Tailwind ofrece una variedad de clases de utilidad, que puedes encontrar en su documentación de utilidades.

Cómo aplicar estilos a un componente de tarjeta con Tailwind CSS

Ahora que ya conoces las clases de utilidad, es momento de aplicar estilos al componente de tarjeta.

Empieza por modificar el archivo src/components/ArticleCard.vue para que use las clases de utilidad de Tailwind:

<template>
  <div class="flex max-w-2xl mx-auto bg-white rounded-sm shadow-md">
    <div>
      <img
        class="h-full w-full object-cover"
        src="../assets/coverimage.jpg"
        alt="Closeup code"
      />
    </div>
    <div class="p-8">
      <div class="uppercase tracking-wide text-sm text-violet-500 font-medium">
        Vue
      </div>
      <a
        href="#"
        class="mt-1 text-lg tracking-tight font-medium text-black hover:underline"
        >Building Vue 3 Components With Tailwind CSS
      </a>
      <p class="mt-2 text-sm text-slate-500">
        Learn how to create visually stunning Vue components using the popular
        utility-first CSS framework Tailwind.
      </p>
    </div>
  </div>
</template>

Con los nuevos estilos, el componente de tarjeta debería verse así:

Editor de código junto a una tarjeta titulada «Crear componentes de Vue 3 con Tailwind CSS», con una descripción sobre cómo crear componentes de Vue con Tailwind.

Además de las clases de utilidad, usaste modificadores para aplicar estilos a la tarjeta. Observa la clase hover:underline de la etiqueta <a/>, donde hover es el modificador.

En Tailwind, coloca los modificadores al principio del nombre de una clase de utilidad para describir el estado al que quieres apuntar. En el ejemplo anterior, apuntaste al estado hover, pero también podrías apuntar al estado focus con la clase focus:text-violet-200 o al estado active con active:text-violet-600.

Puedes usar distintos modificadores de Tailwind CSS según la condición a la que quieras apuntar. Para ver la lista completa, consulta la documentación de Tailwind CSS.

Hasta ahora, el componente de tarjeta se ve muy bien en pantallas grandes, pero a medida que reduces el tamaño de la pantalla, se ve cada vez más apretado:

Tarjeta de blog titulada “Cómo crear componentes de Vue 3 con Tailwind CSS”, con código desenfocado visible a la izquierda

Por suerte, puedes cambiar el diseño de la tarjeta según el ancho de la pantalla.

Cómo manejar los puntos de quiebre en Tailwind CSS

Tailwind CSS te permite aplicar condicionalmente una clase de utilidad en distintos puntos de quiebre. De forma predeterminada, hay cinco puntos de quiebre, cada uno se activa a partir de un ancho mínimo determinado:

  • sm — 640 px

  • md — 768 px

  • lg — 1024 px

  • xl — 1280 px

  • 2xl — 1536 px

Para manejar un punto de quiebre, agrega su prefijo a la clase de utilidad, seguido de dos puntos (:).

breakpoint:utility-class

Considera el siguiente botón:

<button class="w-16 md:w-32 lg:w-48">
  Submit
</button>

Tailwind aplica la clase w-16 en pantallas pequeñas, w-32 en pantallas medianas y w-48 en pantallas grandes.

Puedes usar puntos de quiebre para cambiar el diseño, el tamaño, el color o cualquier otra propiedad sin usar consultas de medios. También puedes personalizar los tamaños de pantalla en tailwind.config.js si los tamaños predeterminados no se ajustan a las necesidades de tu diseño.

Por ejemplo, el siguiente código reemplazará el tamaño de pantalla lg:

module.exports = {
  theme: {
    extend: {
      screens: {
        'lg': '960px',
      },
    },
  },
}

En el componente de tarjeta de artículo, usa puntos de quiebre para cambiar el diseño de la tarjeta y ajustar el tamaño de la imagen:

A continuación se muestra el código modificado. Observa las primeras etiquetas <div/> y <img/>:

<template>
  <div
    class="md:flex md:max-w-2xl max-w-md mx-auto bg-white rounded-sm shadow-md overflow-hidden"
  >
    <div>
      <img
        class="h-48 w-full object-cover md:h-full"
        src="../assets/coverimage.jpg"
        alt="Closeup code"
      />
    </div>
    <div class="p-8">
      <div class="uppercase tracking-wide text-sm text-violet-500 font-medium">
        Vue
      </div>
      <a
        href="#"
        class="mt-1 text-lg tracking-tight font-medium text-black hover:underline"
        >Building Vue 3 Components With Tailwind CSS</a
      >
      <p class="mt-2 text-sm text-slate-500">
        Learn how to create visually stunning Vue components using the popular
        utility-first CSS framework Tailwind.
      </p>
    </div>
  </div>
</template>

Estos son los cambios que hiciste:

  • Los modificadores md:flex y md:max-w-2xl convierten el componente de tarjeta en un contenedor flex con un ancho máximo de 48 rem en pantallas medianas y grandes. En pantallas pequeñas, la clase max-w-md establece el ancho en 28 rem.

  • En el elemento <img/>, md:h-full muestra la imagen a altura completa en pantallas medianas y grandes, y la clase h-48 establece la altura en 12 rem en pantallas más pequeñas.

El componente resultante se ve así en una pantalla pequeña:

Tarjeta del blog que muestra código CSS sobre el título «Cómo crear componentes de Vue 3 con Tailwind CSS» y una descripción sobre la creación de componentes de Vue.

¡Eso es todo! Ahora puedes crear componentes de Vue con Tailwind CSS.

Cuando termines de crear una aplicación de Vue, puedes aprender cómo implementarla en Netlify con actualizaciones de seguridad automáticas de Snyk. Crea una cuenta gratis e importa tu proyecto a Snyk hoy mismo para encontrar y corregir las vulnerabilidades que puedan estar ocultas en las dependencias de tu proyecto, y proteger tu aplicación contra XSS y otras amenazas de seguridad.

Conclusión

En este tutorial aprendiste a crear un componente de Vue 3 con Tailwind CSS. Tailwind CSS es un framework basado en utilidades que permite trabajar de forma más eficiente y optimizada al crear componentes de interfaz de usuario. Puedes usar clases de utilidad para crear diseños adaptables sin consultar hojas de estilo externas ni memorizar decenas de nombres de clases. Tailwind te permite crear tu propio sistema de diseño personalizando las clases predeterminadas. Además, elimina automáticamente todas las clases que no se usan en la compilación de producción, lo que ayuda a incluir menos código en el producto final.

Publicado en:

Leer más

Blog

Verano en los estadios: la gira Snyk Connect Fan Zone

La gira Fan Zone de Snyk llevó talleres de seguridad de IA, networking y competencia amistosa a 8 ciudades y 3 sesiones virtuales. Los asistentes desarrollaron habilidades, compartieron ideas y crecieron juntos.

Blog

Snyk VulnBench JS 1.0: ¿Pueden los LLM encontrar los mismos errores dos veces?

Snyk VulnBench JS 1.0: 300 análisis repetidos muestran que los hallazgos de seguridad de los LLM varían en cada ejecución, mientras que SAST y los modelos detectan distintas vulnerabilidades.

feature insights context
Blog

Cómo construir seguridad de IA junto con nuestros clientes: 5 lecciones del programa de socios de diseño de Evo

Conoce 5 lecciones clave del programa de socios de diseño de Evo de Snyk. Descubre cómo el descubrimiento de IA, la inteligencia de riesgos y la automatización de políticas ayudan a los equipos a proteger la IA generativa y controlar la proliferación de IA a gran escala.