Flag of Ukraine
SymfonyCasts stands united with the people of Ukraine

CSS de Tailwind

Keep on Learning!

If you liked what you've learned so far, dive in!
Subscribe to get access to this tutorial plus
video, code and script downloads.

Start your All-Access Pass
Buy just this tutorial for $12.00

With a Subscription, click any sentence in the script to jump to that part of the video!

Login Subscribe

El HTML de nuestro sitio ya tiene estilo con Tailwind: todas las clases que ves aquí proceden de él. Así que si conseguimos instalar Tailwind, deberíamos tener un sitio mucho menos feo.

Tailwind es interesante porque no es sólo un archivo CSS que incluyes: requiere un paso de compilación. Y eso está muy bien Que no tengamos un sistema de compilación para todo no significa que no podamos elegir añadir uno para algunas cosas concretas.

Utilizar TailwindBundle

Antes de entrar en materia... más o menos una semana después de grabar esto, creamos un bundle que facilita enormemente la incorporación de Tailwind. Se llama, creativamente, TailwindBundle! Ver cómo se puede configurar un pequeño sistema de compilación sigue siendo interesante, pero si quieres saltarte este capítulo y dirigirte a ese bundle en su lugar, no herirás mis sentimientos. El bundle básicamente automatiza lo que vamos a hacer.

Descargar el ejecutable independiente

Para que todo esto funcione, necesitamos el archivo binario de Tailwind. Como vemos aquí, podríamos instalarlo con Node... y esa es una opción realmente flexible. Tendrías un archivo package.json... pero en lugar de contener WebpackEncore y un montón de cosas más, sólo tendría Tailwind.

La otra opción, que evita por completo la necesidad de Node, es utilizar el ejecutable independiente. Haz clic en "Standalone CLI build" para ir a la página de lanzamiento de Tailwind. Busca la versión que necesitas: para mí, es "tailwind-macos-arm64". Puedes descargártela aquí, pero voy a copiar la dirección del enlace... para poder descargármela a lo grande mediante curl: curl -slO ¡y luego pega!

No importa dónde lo pongas, pero voy a moverlo al directorio bin/y renombrarlo a tailwindcss... en lugar de ese nombre tan largo. Por último, como otras máquinas -como los ordenadores de nuestros compañeros de trabajo o la máquina que despliega nuestro sitio- podrían necesitar una versión diferente de este archivo, vamos a ignorarlo.

16 lines .gitignore
... lines 1 - 14
/bin/tailwindcss

Así que sí, esto significa que cada uno tendrá que descargar su propio binario de Tailwind.

El último paso es hacerlo ejecutable. En un sistema basado en Linux, eso es:

chmod +x bin/tailwindcss

Ah, y hay un último paso adicional si estás en un Mac. Ejecuta:

open bin/tailwindcss

Si es la primera vez que descargas el archivo, te pedirá que verifiques que quieres abrirlo desde el punto de vista de la seguridad.

Inicializar Tailwind

Muy bien Ya tenemos el ejecutable bin/tailwindcss, que no requiere Node. A partir de aquí, podemos seguir la documentación normal. Esto es algo que me gusta mucho de la nueva filosofía del frontend. Si necesitas un sistema de compilación, puedes utilizar directamente el sistema de compilación de Tailwind y seguir sus instrucciones: no necesitas una solución específica para Symfony.

Aquí dice que tenemos que Ejecutar:

tailwindcss init

Así que ¡hagámoslo!

./bin/tailwindcss init

Esto crea un nuevo y brillante archivo tailwind.config.js. ¡Vamos a comprobarlo!

/** @type {import('tailwindcss').Config} */
module.exports = {
content: [],
theme: {
extend: {},
},
plugins: [],
}
... lines 9 - 10

Lo más importante es configurar la clave content. Esto le dice a Tailwind dónde debe buscar HTML que pueda contener clases Tailwind. Busca su documentación específica para Symfony. ¡Aquí abajo tienen exactamente lo que queremos! Copia la clave content... ¡y pégala! Es decir... ¡pégala en el lugar correcto!

... line 1
module.exports = {
content: [
"./assets/**/*.js",
"./templates/**/*.html.twig",
],
... lines 7 - 10
}
... lines 12 - 13

El último paso es copiar las tres líneas de la directiva base de Tailwind... y ponerlas dentro de app.css. Quitaré las cosas de Bootstrap... pero mantendré un poco de nuestro código personalizado aquí abajo. ¡Qué bien!

@tailwind base;
@tailwind components;
@tailwind utilities;
... lines 4 - 17

Creando el archivo CSS

Finalmente, ¡estamos listos para construir! En tu línea de comandos, ejecuta bin/tailwind, utiliza-i para apuntar al archivo de entrada assets/styles/app.css, y luego -o para indicarle dónde debe salir el código final. Utiliza assets/styles/app.tailwind.css para que esté en el mismo directorio, lo cual es importante para que las rutas relativas de las imágenes sigan funcionando. Al final, añade -w para que siga ejecutándose y vigilando los cambios:

./bin/tailwindcss -i assets/styles/app.css -o assets/styles/app.tailwind.css -w

¡Y ya está! ¡Construido! Por aquí, tenemos un archivo app.tailwind.css que contiene todas las cosas buenas. ¡Fantástico!

En base.html.twig, en lugar de apuntar a app.css -que ahora es una especie de archivo fuente "interno"- apunta a app.tailwind.css.

... lines 1 - 2
<head>
... lines 4 - 11
{% block stylesheets %}
... lines 13 - 14
<link rel="stylesheet" href="{{ asset('styles/app.tailwind.css') }}">
{% endblock %}
... lines 17 - 21
</head>
... lines 23 - 75

Momento de la verdad. ¡Vuelve al navegador! Actualiza. ¡Nuestro sitio tiene estilo! Eso significa que podemos deshacernos de las cosas de Bootstrap: quitar el enlace Bootstrap CDN... ya que sólo estábamos demostrando cómo funciona... y también el botón de aquí abajo.

¡Así queda bien!

Ignorar el archivo creado

Pero, ¿qué pasa con este archivo compilado de app.tailwind.css? ¿Lo ignoramos de git? ¿Lo confirmamos? ¡Tú decides! Podemos confirmarlo, ya que facilitaría el despliegue, pero en general no queremos confirmar las cosas creadas. Yo lo ignoraré... y luego veremos cómo funciona en nuestro proceso de despliegue.

17 lines .gitignore
... lines 1 - 15
/assets/styles/app.tailwind.css

Vale, ¡hecho! Siguiente: Pasemos a JavaScript.

Leave a comment!

0
Login or Register to join the conversation
Cat in space

"Houston: no signs of life"
Start the conversation!

What PHP libraries does this tutorial use?

// composer.json
{
    "require": {
        "php": ">=8.1",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "babdev/pagerfanta-bundle": "^4.0", // v4.2.0
        "doctrine/doctrine-bundle": "^2.7", // 2.10.0
        "doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.4
        "doctrine/orm": "^2.12", // 2.15.2
        "knplabs/knp-time-bundle": "^1.18", // v1.20.0
        "pagerfanta/doctrine-orm-adapter": "^4.0", // v4.1.0
        "pagerfanta/twig": "^4.0", // v4.1.0
        "stof/doctrine-extensions-bundle": "^1.7", // v1.7.1
        "symfony/asset": "6.3.*", // v6.3.0
        "symfony/asset-mapper": "6.3.*", // v6.3.0
        "symfony/console": "6.3.*", // v6.3.0
        "symfony/dotenv": "6.3.*", // v6.3.0
        "symfony/flex": "^2", // v2.3.1
        "symfony/framework-bundle": "6.3.*", // v6.3.0
        "symfony/http-client": "6.3.*", // v6.3.0
        "symfony/monolog-bundle": "^3.0", // v3.8.0
        "symfony/proxy-manager-bridge": "6.3.*", // v6.3.0
        "symfony/runtime": "6.3.*", // v6.3.0
        "symfony/stimulus-bundle": "^2.9", // v2.9.1
        "symfony/twig-bundle": "6.3.*", // v6.3.0
        "symfony/ux-turbo": "^2.9", // v2.9.1
        "symfony/web-link": "6.3.*", // v6.3.0
        "symfony/yaml": "6.3.*", // v6.3.0
        "twig/extra-bundle": "^2.12|^3.0", // v3.6.1
        "twig/twig": "^2.12|^3.0" // v3.6.1
    },
    "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.4
        "symfony/debug-bundle": "6.3.*", // v6.3.0
        "symfony/maker-bundle": "^1.41", // v1.49.0
        "symfony/stopwatch": "6.3.*", // v6.3.0
        "symfony/web-profiler-bundle": "6.3.*", // v6.3.0
        "zenstruck/foundry": "^1.21" // v1.33.0
    }
}
userVoice