Como usar vínculos de estilo e classe no Vue.js
Introdução
Neste artigo, você aprenderá sobre estilos dinâmicos e associações de classe no Vue.js. Com a diretiva v-bind:style
, você visualizará o tamanho da fonte em um evento click. Com v-bind:class
, você observará como aplicar várias classes aos elementos.
Embora isso seja possível com a manipulação do DOM, o Vue.js permite que você renderize dinamicamente estilo e classes com linhas de código concisas e tira proveito de sua estrutura de modelo de dados.
Estilos de encadernação dinamicamente
Vamos desenvolver uma maneira no Vue.js de aumentar ou diminuir o tamanho da fonte com base na entrada do usuário. Para este fim, o Vue nos fornece a diretiva v-bind:style
.
Dentro de seu arquivo App.js
, instancie uma instância Vue e inclua seu modelo de dados:
data() {
return {
fontSize: 10
}
}
Crie dois botões em seu arquivo index.html
e um parágrafo que aceite a diretiva v-bind:style
:
<button v-on:click="fontSize++">
Increase font size
</button>
<button v-on:click="fontSize--">
Decrease font size
</button>
<p v-bind:style="{ fontSize: fontSize + 'px' }">
Font size is: {{ fontSize }}
</p>
Em cada evento click, a diretiva v-bind:style
aumenta e diminui o valor da sua variável fontSize
. Isso anexa o valor de fontSize
à propriedade CSS font-size
.
Se necessário, adicione vários objetos de estilo à diretiva v-bind:style
. Em seu arquivo App.js
, inclua os objetos de estilo da seguinte forma:
data() {
return {
baseStyles: {
fontWeight:'800',
color: 'red'
},
overrideStyles: {
color:'blue'
}
}
}
Em seu arquivo index.html
, forneça uma matriz dos objetos de estilo:
<p v-bind:style="[baseStyles, overrideStyles]">
baseStyles and overrideStyles
</p>
Observação: tome cuidado com a ordem de seus objetos de estilo na matriz, pois a lógica dos elementos seguintes substitui os anteriores.
Agora que você revisou as ligações de estilo, vamos considerar as classes dinâmicas no Vue.js.
Ligando classes dinamicamente
A aplicação direta de estilos pode se tornar complexa à medida que os requisitos mudam. Para ajudar com isso, a diretiva v-bind:class
fornece uma maneira de vincular classes ao conteúdo de um elemento.
Por exemplo, pode ser necessário sublinhar o texto do elemento e alterar a cor e o peso da fonte.
Embora seja possível implementar com uma ligação de estilo, o Vue.js permite que você inclua desempenho adicional com a diretiva v-bind:class
.
Para conseguir isso, crie uma matriz de menuItems
e uma variável selected
com um valor padrão de Home
em seu App.js
arquivo:
data() {
return {
selected: 'Home',
menuItems: ['Home', 'About', 'Contact']
}
}
Em seu arquivo index.html
, aplique um loop v-for
em uma lista ordenada para percorrer os elementos na matriz menuItems
.
Com cada evento de clique, a diretiva v-bind:class
atribui o valor da variável selected
ao elemento atual em menuItems
. Isso permite que você passe várias classes em seu elemento de lista ordenado e adiciona qualquer estilo listado em CSS:
<ul>
<li v-for="item in menuItems"
v-on:click="selected = item"
v-bind:class="{ selected: selected == item}">
{{item}}
</li>
</ul>
Você também pode passar várias classes em um array usando a diretiva v-bind:class
.
Defina uma matriz de classes em seu modelo de dados no arquivo App.js
:
data() {
return {
classArray: ['selected', 'underlined']
}
}
Em seu arquivo index.html
, consulte seu classArray
usando a diretiva v-bind:class
.
<p v-bind:class="[classArray]">
Multiple classes {{ classArray }}
</p>
Isso aplicará as classes selecionado
e sublinhado
ao elemento.
Conclusão
O uso do estilo Vue.js e das diretivas de classe mantém as ações dinâmicas em seus elementos e oferece suporte a várias instâncias para um desempenho mais poderoso.