Una vez más, Svelte sorprende por su sencillez. Al igual que pasa con el código HTML. Recuerda que un archivo Svelte hasta ahora habíamos visto dos bloques, el <script>
y el propio html
:
<script>
/* Código JS aquí */>
</script>
<p>Aquí irá tu fantástico HTML 😉</p>
Ahora entra en escena el <style>
:
<script>
/* Código JS aquí */>
</script>
<p>Aquí irá tu fantástico HTML 😉</p>
<style>
p {
color: green;
font-family: 'Comic Sans MS', cursive;
font-size: 3em;
}
</style>
Es importante destacar que estas reglas tienen como alcance el componente. Es decir, no cambiaría los estilos de los párrafos
<p>
en ninguna otra parte de la aplicación.
Entonces, si tenemos otro componente hijo, con un párrafo, por ejemplo tenemos el siguiente componente llamado Hijo.svelte
:
<!-- Hijo.svelte -->
<p>Esto es un componente hijo</p>
Y el código anterior:
<script>
import Hijo from './Hijo.svelte';
</script>
<p>Aquí irá tu fantástico HTML 😉</p>
<Hijo />
<style>
p {
color: green;
font-family: 'Comic Sans MS', cursive;
font-size: 3em;
}
</style>
El resultado sería la línea Aquí irá tu fantástico HTML 😉
de color verde pero no afectaría al párrafo del componente hijo.
Vale. Este concepto espero haya quedado claro. Los estilos de un componente sólo tienen alcance dentro de sí mismo, no afecta al resto. Pero… ¿y si quiero estilos globales de CSS en toda mi aplicación?
A fin de no repetir código CSS en todos los componentes, es muy recomendable usar estilos globales para mantener una armonía general. Por ejemplo, tener todos los enlaces de un mismo color.
En Svelte esto también es muy sencillo. Nos creamos un archivo CSS en nuestra carpeta src
(por ejemplo estilo.css) y lo importamos en nuestro App.svelte
de la siguiente forma:
<!-- App.svelte -->
<script>
import './estilo.css';
</script>
<p>Mi párrafo de ejemplo con un <a href="#">enlace</a>.</p>
/* src/estilo.css */
a {
color: green;
}
a:hover {
color: red;
}
De esta forma tan sencilla tendrías estilos globales para toda tu aplicación y no necesitarías definir el color de los enlaces en cada componente 😜
Pero… ¡que es un preprocesador?
Los preprocesadores CSS son herramientas para los desarrolladores de sitios web que traducen un código de hojas de estilo no estándar (SASS/SCSS/LESS…) a un código CSS estándar, entendible por los navegadores.
Vamos a ver como usar SCSS con Svelte.
SCSS es un procesador CSS. Así de fácil. Es un con CSS vitaminado 🚀
El uso de SCSS tiene, a mi modo de ver, ciertas ventajas:
Pero no todo es bonito, SASS tiene algunas desventajas (pero nada alarmantes):
Necesitamos instalar un par de dependencias, nada complicado:
npm install svelte-preprocess node-sass
Y hacer un par de cambios en nuestro rollup.config.js
:
// importamos la librería
import preprocess from 'svelte-preprocess';
/* ... */
// ... y añadimos el "preprocess" como un plugin:
export default {
/* ... */
plugins: [
svelte({
/* ... */
preprocess: preprocess()
})
}),
/* ... */
}
Guardamos cambios y hacemos la prueba de antes, pero con SCSS.
<!-- App.svelte -->
<script>
import './estilo.scss';
</script>
<p>Mi párrafo de ejemplo con un <a href="#">enlace</a>.</p>
/* src/estilo.scss */
a {
color: green;
&:hover {
color: red;
}
}
Nota la diferencia entre CSS y SCSS del ejemplo anterior y este 😌 Esto es sólo una pincelada de SCSS, pero te invito a que revises la documentación oficial de SASS y te enamorarás y no podrás dejar de usar preprocesadores.
Tienes más artículos del curso de Svelte 👉🏻 aquí 👈🏻.
Y esto es todo. Espero que te pueda servir 🙃