【问题标题】:Scoped css not being applied with lang="scss"范围 css 未与 lang="scss" 一起应用
【发布时间】:2020-04-30 11:05:58
【问题描述】:

我正在使用 Quasar 并尝试设置 q-table 第一列的样式:

<style lang="scss" scoped>
td:first-child {
  background-color: #747480 !important;
}
</style>

但是,即使在重新加载/热重新加载/重新启动服务器之后,这也不起作用。

删除作用域工作正常。我不知道发生了什么。任何人都可以为这个问题提供解决方案?

编辑: 这是工作演示:

Codesandbox

只需从样式中删除范围,颜色就会改变。

【问题讨论】:

  • 请为此使用codesandbox.io 创建一个small demo 以显示正在发生的问题。
  • 请分享更多代码。不过,您可能追求的是另一个选择器 - 与 vue 无关。你有 scss 加载器吗?
  • @BastianSpringer 如果它是另一个选择器,那么为什么在删除 scoped 时它可以正常工作?
  • 对不起,我之前肯定忽略了那句话......好吧,那我相信td元素不在这个组件(或子组件)中,而是在另一个父组件中.如果您愿意分享更多代码(可能是整个模板),或者像@palaѕн 所说的更好的示例,我们将能够提供更好的帮助
  • @AlexT 所以我刚刚看过它,不幸的是也没有找到一个非 hacky 的解决方案。我的 hacky 解决方案是导入样式表(或以某种方式应用样式)并自行创建范围。例如,将表格包装在带有 id 的 div 中,然后执行 #customstylescope td{background-color:#747480!important}

标签: css vue.js vuejs2 quasar-framework


【解决方案1】:

警告使用:&gt;&gt;&gt;lang="scss"

虽然&gt;&gt;&gt; 似乎在未指定lang 时(或设置为css)按预期工作,但lang="scss" 并非如此。

lang="scss"(在最新的 2.x Vue — v2.6.11)一起使用的唯一穿透选择器是 /deep/::v-deep
我可以肯定的是,它与node-sassdart-sass 包无关,因为我尝试了两者并且它的行为相同。所以它要么在 Vue 包级别,要么在 sass 包级别。但我不认为降级是可行的解决方案

由于某种原因,&gt;&gt;&gt;scss 中使用时会转换为&gt; &gt; &gt;,由于显而易见的原因,该代码块内的任何内容都不再适用。应该发生的是 &gt;&gt;&gt; 应该被删除,并且在该点之后选择器的任何部分都不应再应用范围属性(就像其他 2 个穿孔选择器一样)。

请注意它曾经可以工作,我不知道它何时或为什么停止工作(我个人一直更喜欢::v-deep,没有特别的原因)。

在您的情况下:只需将所有内容包装到::v-deep {}

<style lang="scss" scoped>
  ::v-deep {
    td:first-child {
      background-color: #747480; /* no need for !important */
    }
    .q-table tbody td {
      white-space: normal;
    }
  }
</style>

...他们会申请的。

在这里查看它的工作原理:https://codesandbox.io/s/cranky-snow-ruf3w?file=/src/pages/Index.vue

【讨论】:

    【解决方案2】:

    在样式范围内使用deep selector

    在您的代码中,在您的 q-table 中添加“id”

    <q-table
        title="Treats"
        :data="data"
        :columns="columns"
        row-key="name"
        dark
        color="amber"
        id="my-table"
            />
    

    然后将您的作用域样式更改为这样的样式

    <style scoped>
      #my-table >>> td:first-child {
        background-color: #1313eb !important;
      }
    
     .q-table tbody td {
        white-space: normal;
     }
    </style>
    

    【讨论】:

    • &gt;&gt;&gt; 仅适用于 lang="css"(这是默认设置)。问题是关于lang="scss"。我添加了一个更详细解释的答案。
    • 你可以使用 /deep/ 或 ::v-deep
    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 2021-04-30
    • 2017-05-10
    • 2019-04-12
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    相关资源
    最近更新 更多