9 de julio de 2022

🚀 Dale estilo a tu web Nette Framework más rápido con Stylify CSS

Dale estilo a tu web Nette Framework de forma más rápida e intuitiva con Stylify



Estiliza tu web Nette Framework de forma más rápida e intuitiva con Stylify. No estudies selectores y sintaxis. Usa sintaxis CSS pura y obtén CSS generado con optimización avanzada para producción.

Para el ejemplo de abajo, puedes consultar el Ejemplo de integración de Nette Framework.

🚀 Introducción a Nette

Nette es un framework PHP creado por David Grudl y es una gran alternativa a Symfony y Laravel. Tiene un sistema de plantillas increíble llamado Latte que utiliza una sintaxis similar a PHP y por defecto tiene escapes sensibles al contexto (que ningún otro framework tiene). En mi opinión, es más fácil de aprender, porque viene con una estructura simple por defecto, no tiene dependencias y menos patrones que aprender.

💎 Introducción a Stylify CSS

Stylify es una biblioteca que utiliza selectores similares a CSS para generar CSS optimizado basado en lo que escribes.

  • ✅ Selectores similares a CSS
  • ✅ Sin framework que estudiar
  • ✅ Menos tiempo dedicado a la documentación
  • ✅ CSS manoseado y extremadamente pequeño
  • ✅ No es necesario purgar CSS
  • ✅ Componentes, variables, selectores personalizados
  • ✅ Puede generar múltiples paquetes de CSS

También tenemos una página sobre ¡qué problemas resuelve Stylify CSS y por qué deberías probarlo!

Instalación de Nette

La forma más fácil de empezar con Nette es usar Composer siguiendo esta guía:

  • Ejecute composer create-project nette/web-project nette-blog.
  • Vaya al directorio del proyecto cd nette-blog.
  • Para iniciar la web ejecute php -S 0.0.0.0:80 -t www.
  • La web debería estar disponible en http://localhost.

Configuración de Stylify CSS

Debido a que Nette no viene con ningún bundler ni con ningún paquete javascript por defecto, vamos a utilizar el Stylify CSS Bundler.

Instala el bundler yarn add -D @stylify/bundler. Crea el archivo bundles.js en la raíz del proyecto con el siguiente contenido:

const { nativePreset } = require('@stylify/stylify');
const { Bundler } = require('@stylify/bundler');

// Detectar el modo watch
const watchFiles = process.argv[process.argv.length - 1] === '--w';
const bundler = new Bundler({
	compiler: {
		// Selectores de mangle para producción
		mangleSelectors: !watchFiles,
		// Coincidencia de atributos n:class
		selectorsAreas: [
			'(?:^|\\s+)n:class="([^"]+)"',
			'(?:^|\\s+)n:class=\'([^\']+)\''
		]
	},
	watchFiles: watchFiles
});

bundler.bundle([
	{
		files: ['./app/Presenters/templates/@layout.latte'],
		outputFile: './www/static/css/layout.css'
	},
	{
		files: ['./app/Presenters/templates/Homepage/default.latte'],
		outputFile: './www/static/css/homepage.css'
	}
]);

Esta configuración generará dos paquetes:

  • Layout - usado globalmente
  • Homepage - sólo para la página de inicio

Por supuesto, podríamos generar CSS para todo el proyecto en un solo archivo. Pero esto haría el CSS innecesariamente más grande.

Ahora abre el archivo package.json y añade los siguientes scripts:

"scripts": {
	"build": "node bundles.js",
	"watch": "node bundles.js --w"
}

El último paso es editar las plantillas. Abre App/Presenters/Templates/@layout.latte y añade el enlace al archivo CSS del diseño:

<link rel="stylesheet" href="/static/css/layout.css">

En App/Presenters/Templates/Homepage/default.latte añade lo siguiente:

{block content}
<link rel="stylesheet" href="/static/css/homepage.css">
<div class="font-size:48px text-align:center">
	Hola Mundo!🎉
</div>

Si ejecutas yarn watch, Stylify CSS generará CSS y vigilará cualquier archivo en busca de cambios.

Componentes

Para evitar plantillas hinchadas con utilidades, puedes configurar componentes directamente en los archivos, donde son usados usando content options (espera objeto javascript sin corchetes) o en el compiler config.

En primer lugar, vamos a añadir el componente global container. Abre el bundles.js, y lo siguiente:

const compilerConfig = {
	components: {
		container: 'max-width:1024px margin:0_auto'
	}
}

const bundler = new Bundler({ /*...*/ });

Ahora podemos usarlo en todo el proyecto. En nuestro caso, lo añadimos al layout:

<main class="container">{include content}</main>

En la página principal, podemos añadir un componente local para el título usando las opciones de contenido:

{*
	stylify-components
		title: 'font-size:48px text-align:center'
	/stylify-components
*}

{block content}
<link rel="stylesheet" href="/static/css/homepage.css">
<div class="title">¡Hola Mundo!🎉</div>

Variables

Siempre es una buena idea tener un código limpio y flexible sin valores hardcodeados. Las Variables pueden definirse de la misma manera que los componentes. Modifiquemos el componente title:

{*
	stylify-variables
		titleFontSize: '48px'
	/stylify-variables

	stylify-components
		title: 'font-size:$titleFontSize text-align:center'
	/stylify-components
*}

{block content}
{* ... *}

Asignación de archivos

Cuando una plantilla incluye un componente o una parte de plantilla anidada, podemos añadirla al paquete utilizando la opción stylify-files.

Vamos a crear la parte de plantilla _content.latte junto a default.latte con el siguiente contenido:

{*
	stylify-components
		title: 'font-size:$titleFontSize text-align:center'
	/stylify-components
*}
<div class="title">¡Hola Mundo!🎉</div>

El Homepage/default.latte entonces informa al bundler sobre las rutas externas usando la opción stylify-files que espera rutas separadas por un espacio o una nueva línea:

{*
...
stylify-files
	./_content.latte
/stylify-files
*}

{block content}
{include './_content.latte'}

El contenido en el ./_content.latte es procesado automáticamente por el bundler.

🔥 Construcción de producción:

Si ejecutas yarn build, los selectores serán reducidos y el CSS minificado:

@layout.latte:

<main class="a">{include content}</main>

_content.latte:

<div class="d">¡Hola Mundo!🎉</div>

layout.css:

.b,.a{max-width:1024px}
.c,.a{margin:0 auto}

homepage.css:

:root {--titleFontSize: 48px;}
.e,.d{font-size:48px}
.f,.d{text-align:center}

Configura todo lo que necesites

Los ejemplos anteriores no incluyen todo lo que Stylify CSS puede hacer:

Siéntete libre de revisar la documentación para aprender más 💎.

¡Dar como Feedback!
¿Te gusta Stylify CSS? Háznoslo saber con una estrella en nuestro repo!