javascript - 如何使用vue动态添加before after css代码?

标签 javascript vue.js

我正在尝试解决一个我实际上从未遇到过的问题。我正在尝试从 v-for 循环内的数据应用动态颜色。现在普通的 CSS 属性可以轻松应用。我需要在 after 中应用 css。我试过了

<div class="_tmln_shdl_crd_itm" v-for="(t, i) in timeLine" v-if="timeLine.length">
    <div class="_tmln_shdl_itm_lft">
        <p :style="`color:${t.color}`">{{t.time}}</p> // THIS WORKS
    </div>
    <style>
        ._tmln_shdl_itm_r8_one h4:after{ // TRIED TO WRITE CSS WITH FOR LOOP BUT FAILED :D
                color: t.color
         }
    </style>
<div>

那么我怎样才能使它适用于 ._tmln_shdl_itm_r8_one h4:after

有什么解决办法吗? 谢谢。

最佳答案

您在循环中创建的样式每次都会为同一个选择器创建 CSS。浏览器只有一种适用于此选择器的 CSS 样式。
使用相同的选择器,最新的 CSS 获胜并被应用。这是CSS Specificity (“当多个声明具有相同的特异性时,CSS 中找到的最后一个声明将应用于该元素。”)。

您可以动态创建类:

<div class="_tmln_shdl_crd_itm" v-for="(t, i) in timeLine" v-if="timeLine.length">
    <div :class="`_tmln_shdl_itm_lft _tmln_shdl_itm_lft-${i}`">
        <h4>{{ t.time }}</h4>
    </div>
    <style>
        ._tmln_shdl_itm_lft-{{ i }} h4:after{
            color: {{ t.color }};
        }
    </style>
<div>

类似的东西应该有效。使用 ._tmln_shdl_itm_lft-{{ i }} 使类动态化可以发挥神奇作用。
这还会向页面添加大量 CSS 内容,这在实际环境中可能不是您想要的。

备注:

  • 您还应该像这样输出t.color(可能只是您的示例中的一个错误):
    颜色:{{ t.color }};
  • 您的示例代码中也没有 CSS 可以应用的 h4 标记,但这可能在您页面的其他位置......希望如此?

关于javascript - 如何使用vue动态添加before after css代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67723865/

相关文章:

javascript - polymer 元素 css 未显示 - 检查器中没有错误

javascript - 如何将Html布局加载到vuejs组件中?

javascript - 按需使用 Vue 组件 - [Vue warn] : Cannot find element

javascript - Vue Js 第一次没有使用更新后的数组更新 DOM

javascript - 如何更改计算属性的值?

javascript - 如何让 Greensock CustomEase 与 typescript 一起使用?

javascript - $(this).data() trim 数据库中传递的数据直到空格

javascript - 如何让用户访问 main 之外的 requirejs 模块?

javascript - 无法在 Google 通讯录 api v3 上使用 javascript 创建联系人

vue.js - 未使用 Vue 资源根选项?