Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

266
Views
Resuelto: Vue agrega dinámicamente estilo a: pseudo clase activa

DESTACADO: Este es un problema resuelto.

Editar: ¡Resolvió el problema usando el consejo de @Amaarockz!

No he tenido mucha experiencia en variables CSS y estructuras de estilo complicadas, ¡pero resultó que son geniales!


Pregunta inicial:

Tengo un menú construido con Vue.js (y Vuetify), datos pasados desde el backend como:

 [ { id: 13241243, color: "#123456", activeColor: "#abcdef", text: "Asadpyqewri" }, { id: 742378104, color: "#234567", activeColor: "#bcdefa", text: "Iudaofqepr" } ]

El menú se parece a:

 <v-btn-toggle> <v-btn v-for="item in items" :key="item.id" :color="item.color"> {{item.text}} </v-btn> </v-btn-toggle>

Problema

Quiero saber, ¿cómo puedo hacer dinámicamente los elementos en un color diferente cuando tienen: pseudo-clase activa?

Lo que he probado:

  • Escriba algo en el atributo "estilo" de los elementos de la lista:
    • Falló, ya que no puedo agregar un selector en <element style="">, solo estilos.
  • Use un atributo como "color activo" definido por Vuetify:
    • Falló, esas cosas no existen.
  • Agregue dinámicamente colores a la clase "v--btn-active", que Vuetify agrega automáticamente:
    • Falló, no puedo encontrar una manera de hacer esto por separado para cada botón.
  • Observe cuando aparece la pseudoclase activa, agregue estilo en el oyente:
    • De alguna manera MutationObserver no funcionó para mí.
    • getElementsByClassName[0] sigue obteniendo "nulo". Intenté escribir eso en windows.onload, nada cambió.
    • Una vez devolvió el nodo correcto y pude ver la mutación de clase. Pero no puedo reproducir eso a pesar de que nada cambió en el código.
 mounted(){ window.onload = function(){ const targetNodes = document.getElementsByClassName('asdff'); var a = targetNodes.item(0); //"targetNodes" is a HTMLCollection with 3 elements, but "a" is null. } }
  • Agregue una clase diferente a cada botón y escriba CSS separado para ellos usando JavaScript:
    • Tal vez factible, pero el código va a ser extremadamente feo y difícil de mantener.
    • Además, es difícil sobrescribir el estilo predeterminado de Vuetify fuera de <element style>; hay que añadir !importante.

Los últimos dos intentos son los que creo más esperanzadores. ¿Hay alguna forma de solucionarlo?

about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Intenta usar pseudoclase como

 Vue.component('pseudo', { data() { return { msg: 'Hover on me', } }, props: { color: { type: String, }, text: { type: String, } }, computed: { cssAttrs() { return { '--color': this.color, '--text': JSON.stringify(this.text), } } }, template: `<button class="content" :style="cssAttrs">{{msg}}</button>`, }); var vm = new Vue({ el: '#app', });
 .content { color: red; } .content:focus { content: var(--text); color: var(--color); }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <pseudo color="blue" text="Changing!!"></pseudo> </div>

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!