vuejs-estilos-en-linea

Cómo aplicar estilos en línea con :style en Vue.js

  • 3 min

Vamos a empezar a ver cómo aplicar estilos a nuestros componentes en Vue.js, empezando por ver el uso de los estilos en línea.

Esto es muy fácil ya que podemos vincular el atributo style con una variable dinámica y reactiva, al igual que haríamos con cualquier otro atributo de un elemento de HTML.

Esto nos permite personalizar la apariencia de los componentes aplicar propiedades CSS directamente a los elementos en función del estado de la aplicación, sin necesidad de definir clases CSS.

En general, vamos a preferir usar clases y no a estilos en línea. Pero en ocasiones, los estilos en línea son útiles, así que está bien conocerlos.

Cómo usar :style

La directiva :style nos permite vincular dinámicamente estilos CSS a elementos o componentes. Es decir, que podemos aplicar estilos en función de condiciones, estados o datos reactivos.

<template>
  <div :style="estiloDinamico">Este es un ejemplo de estilo en línea.</div>
</template>

<script setup>
import { ref } from 'vue';

const estiloDinamico = ref({
  color: 'blue',
  fontSize: '18px',
});
</script>

En este ejemplo, el div tendrá un color de texto azul y un tamaño de fuente de 18 píxeles.

Combinar estilos estáticos y dinámicos

Si tenemos estilos en linea que queremos aplicar siempre (estáticos), junto con otros que queremos poder cambiar dinámicamente con :style, podemos hacerlo así,

<template>
  <div style="padding: 10px;" :style="estiloDinamico">
    Este es un ejemplo de estilos combinados.
  </div>
</template>

<script setup>
import { ref } from 'vue';

const estiloDinamico = ref({
  color: 'blue',
  fontSize: '18px',
});
</script>

En este ejemplo, el div tendrá un padding estático de 10 píxeles y estilos dinámicos para el color y el tamaño de la fuente.

Aplicar estilos con un objeto

Podemos vincular múltiples estilos usando un objeto dentro de :style y reemplazando los valores por variables.

<template>
  <div :style="{ color: colorTexto, fontSize: tamañoFuente + 'px' }">
    Este es un ejemplo de estilo en línea.
  </div>
</template>

<script setup>
import { ref } from 'vue';

const colorTexto = ref('blue');
const tamañoFuente = ref(18);
</script>

En este ejemplo, el div tendrá un color de texto azul y un tamaño de fuente de 18 píxeles.

Estilos dinámicos con propiedades computadas

Si el estilo en línea que queremos aplicar es una expresión más compleja, generalmente es mejor que definamos un método o una propiedad combinada para definir el estilo dinámico.

<template>
  <div :style="estiloDinamicoComplejo">
    Este es un ejemplo de estilo en línea con lógica compleja.
  </div>
</template>

<script setup>
import { ref, computed } from 'vue';

const esActivo = ref(true);
const tieneError = ref(false);

const estiloDinamicoComplejo = computed(() => {
  return {
    color: esActivo.value ? 'green' : 'red',
    backgroundColor: tieneError.value ? 'yellow' : 'transparent',
  };
});
</script>

En este ejemplo:

  • El color del texto será verde si esActivo es true, y rojo si es false.
  • El fondo será amarillo si tieneError es true, y transparente si es false.

Ejemplos prácticos