首页 新闻 会员 周边

两个vue组件设置文本框的样式问题

0
悬赏园豆:5 [已解决问题] 解决于 2023-04-07 21:08

我在A组件中设置了文本框的样式,跳转到B组件中,B组件中的文本框为什么也变成了新样式,但是刷新一下B组件,则B组件中的文本框则重新变成了原本的样式,请问如何解决两个组件中的文本框的样式互相干扰的问题?

天亦玄的主页 天亦玄 | 初学一级 | 园豆:32
提问于:2023-03-29 17:31
< >
分享
最佳答案
0

这是因为 Vue 组件共享了同一个样式表,而你在 A 组件中设置的样式会影响到整个应用中的所有文本框,包括 B 组件中的文本框。

为了解决这个问题,你可以在 A 组件中将文本框的样式限定在该组件的作用域内,方法是使用 scoped 属性来限定样式的作用范围,示例如下:

<template>
  <div class="a-component">
    <input type="text" class="text-input">
  </div>
</template>

<style scoped>
.a-component .text-input {
  /* A 组件中文本框的样式 */
}
</style>

这样设置之后,A 组件中的文本框样式只会影响到 A 组件本身,而不会影响到其他组件,包括 B 组件。

如果你需要在多个组件中共享相同的样式,你可以将样式提取到一个单独的样式表文件中,然后在需要使用该样式的组件中引入,例如:

/* 在一个单独的样式表文件中定义文本框的样式 */
.text-input {
  /* 共享的文本框样式 */
}
<template>
  <div class="a-component">
    <input type="text" class="text-input">
  </div>
</template>

<style>
@import "path/to/shared-styles.css";
/* A 组件中使用共享样式 */
</style>
<template>
  <div class="b-component">
    <input type="text" class="text-input">
  </div>
</template>

<style>
@import "path/to/shared-styles.css";
/* B 组件中使用共享样式 */
</style>

这样设置之后,多个组件可以共享同一个样式表文件中定义的样式,但是样式仍然会被限定在各自组件的作用域内,不会相互干扰。

收获园豆:5
lyshark | 菜鸟二级 |园豆:215 | 2023-03-30 11:00

可是这个文本框是element的文本框组件,如果我在A组件中加了scoped,那就无法影响到文本框的样式了

天亦玄 | 园豆:32 (初学一级) | 2023-03-30 14:14

@天亦玄: element 的文本框组件样式你想要影响,又在你自己组件里面写的就不能用 scoped来限制样式作用域。又想要达到不影响其他组件,那么最好通过后代选择器来限制作用域的范围。

Himmelbleu | 园豆:211 (菜鸟二级) | 2023-03-30 15:10
其他回答(2)
0

A组件样式加上这个 scoped

<style scoped></style>
by.Genesis | 园豆:2719 (老鸟四级) | 2023-03-29 17:59

加了之后,文本框的样式就无效了

支持(0) 反对(0) 天亦玄 | 园豆:32 (初学一级) | 2023-03-30 08:55
0

A、B组件里的style标签都加上 scoped标记,可以防止组件间的样式干扰。
如果加上scoped后样式失效,可能是样式的优先级不够,class不行就id,或者样式后面加上 !important 设置为顶级。

顾星河 | 园豆:7173 (大侠五级) | 2023-03-30 09:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册