- Aprender
-
Ecosistema
Ayuda
Herramientas
Librerías Oficiales
Noticias
Lista de Recursos
- Equipo
- Apoyar Vue
- Traducciones
Guía
Conocimientos Esenciales
- Instalación
- Introducción
- La instancia Vue
- Sintaxis de Template
- Propiedades Computadas y Observadores
- Enlace Clases y Estilos
- Renderización Condicional
- Renderizado de lista
- Manejo de eventos
- Binding en Formularios
- Conceptos Básicos de Componentes
Transiciones & Animaciones
- Efectos de Transición
Componentes en Profundidad
- Registro de Componente
- Propiedades
- Eventos personalizados
- Slots
- Componentes Dinámicos & Asíncronos
- Handling Edge Cases
- Transiciones de estado
Reusabilidad & Composición
- Mixins
- Directivas Personalizadas
- Funciones de renderizado & JSX
- Plugins
- Filtros
- Publicación en Producción
Herramientas
- Componentes de un Solo Archivo (Single File Components)
- Testing Unitario
- Soporte TypeScript
Escalando la Aplicación
- Enrutamiento
- Administración del Estado
- Renderizado del lado de Servidor
Funcionamiento Interno
- Reactividad en profundidad
Migraciones
- Migración desde Vue 1.x
- Migración desde Vue Router 0.7.x
- Migración de Vuex 0.6.x a 1.0
Meta Documentación
- Comparación con otros frameworks
- Únete a la comunidad Vue.js!
- Conozca al equipo
Enlace Clases y Estilos
Una necesidad común de data binding es manipular la lista de clases de un elemento y sus estilos en línea. Como ambos son atributos, podemos usar v-bind
para manejarlos: solo necesitamos crear una cadena de texto con nuestras expresiones. Sin embargo, concatenar cadenas de texto puede llegar a ser incómodo y propenso a errores. Por esta razón, Vue proporciona mejoras cuando se utiliza v-bind
conclass
y style
. Además de las cadenas de texto, las expresiones también pueden evaluar objetos o matrices.
Enlace de clases HTML
Sintaxis de Objeto
Podemos pasar un objeto a v-bind:class
para la asignación dinámica de clases:
<div v-bind:class="{ active: isActive }"></div> |
La sintaxis de arriba tiene como resultado la clase active
según el valor booleano(https://developer.mozilla.org/en-US/docs/Glossary/Truthy) de la propiedad isActive
.
Puede hacer multiple asignación de clases al tener más campos en el objeto. Además, la directiva v-bind:class
también puede ser utilizada con el atributo class
. De modo que con la siguiente plantilla:
<div class="static" |
Y el siguiente objeto data
:
data: { |
Se renderizará:
<div class="static active"></div> |
Cuando isActive
o hasError
cambien, la lista de clases se actualizará consecuentemente. Por ejemplo, si hasError
se convierte en true
, la lista de clases se convertirá en "static active text-danger"
.
El objeto no tiene por qué estar en la misma línea:
<div v-bind:class="classObject"></div> |
data: { |
Esto renderizará el mismo resultado. También podemos enlazar una propiedad computada que retorna un objeto. Esto es un patrón común y poderoso:
<div v-bind:class="classObject"></div> |
data: { |
Sintaxis de Array
Pasamos un array a v-bind:class
para aplicar una lista de clases:
<div v-bind:class="[activeClass, errorClass]"></div> |
data: { |
Que renderizará:
<div class="active text-danger"></div> |
Si le gustaría activar una clase en la lista de manera condicional, usted puede hacerlo con una expresión ternaria:
<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div> |
Esto siempre aplicará errorClass
, pero solo aplicará activeClass
cuando isActive
sea verdadero.
Sin embargo, esto puede ser un poco verborrágico si usted tiene multiple clases condicionales. Por eso también es posible utilizar la sintaxis de objeto dentro de la sintaxis de colección:
<div v-bind:class="[{ active: isActive }, errorClass]"></div> |
Con Componentes
Esta sección asume que usted tiene conocimientos sobre Componentes de Vue. Siéntase libre de saltársela y volver más tarde.
Cuando usa el atributo class
en un componente personalizado, estas clases se agregarán al elemento raíz del componente. Las clases existentes en este elemento no serán sobreescritas.
Por ejemplo, si declara este componente:
Vue.component('my-component', { |
Y agrega algunas clases al usarlo:
<my-component class="baz boo"></my-component> |
El HTML renderizado será:
<p class="foo bar baz boo">Hi</p> |
Lo mismo aplica para el enlace de clases:
<my-component v-bind:class="{ active: isActive }"></my-component> |
Cuando isActive
es verdadero, el HTML renderizado será:
<p class="foo bar active">Hi</p> |
Enlace de estilos en línea
Sintaxis de Objeto
La sintaxis de objeto para v-bind:style
es muy sencilla - es similar a CSS, excepto que es un objeto JavaScript. Puede usar tanto camelCase como kebab-case (use comillas con kebab-case) para los nombres de propiedades CSS:
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div> |
data: { |
A menudo es una buena idea enlazar directamente un objeto de estilo para que la plantilla sea más limpia:
<div v-bind:style="styleObject"></div> |
data: { |
Nuevamente, la sintaxis de objeto es a menudo usada en conjunción con propiedades computadas que retornan objetos.
Sintaxis de Array
La sintaxis de array v-bind:style
permite aplicar múltiples objetos de estilo al mismo elemento:
<div v-bind:style="[baseStyles, overridingStyles]"></div> |
Auto-prefijado
Cuando utilice una propiedad CSS que requiera prefijos de proveedores en v-bind:style
, como por ejemplo transform
, Vue detectará automaticamente y agregará los prefijos correspondientes a los estilos aplicados.
Valores múltiples
2.3.0+
Desde la versión 2.3.0+ usted puede proveer un array de valores múltiples (de prefijos) a una propiedad de estilo, por ejemplo:
<div v-bind:style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div> |
Esto solo renderizará el ultimo valor en el array que el navegador soporte. En este ejemplo, se renderizará display: flex
para los navegadores que soportan la versión sin prefijo de flexbox.