深入浅出的vue.js项目开发理解

一:未分类

1.单个组件或页面可以多个style,混用本地和全局样式

我们可以在一个组件中同时使用有 scoped 和非 scoped 样式,来实现复杂需求:

<style>
/* 全局样式 */
</style>

<style scoped>
/* 本地样式 */
</style>

Vue 官方文档介绍 Scoped
Scoped CSS | Vue Loader https://vue-loader.vuejs.org/zh/guide/scoped-css.html

<style> 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素。这类似于 Shadow DOM 中的样式封装。

要注意scoped的作用域,因为权重的问题,如果是在子组件使用了scoped,那么在父组件中是不能直接修改子组件的样式的,需要在父组件中使用vue的深度作用选择器。

.parent >>> .children{
    
     /* ... */ }

.parent /deep/ .children{
    
     /* ... */ }

动态生成的内容
通过 v-html 创建的 DOM 内容不受 scoped 样式影响,但是你仍然可以通过深度作用选择器来为他们设置样式。
还有一些要留意

  • Scoped 样式不能代替 class。考虑到浏览器渲染各种 CSS 选择器的方式,当 p { color: red } 是 scoped 时 (即与特性选择器组合使用时) 会慢很多倍。如果你使用 class 或者 id 取而代之,比如 .example { color: red },性能影响就会消除。

  • 在递归组件中小心使用后代选择器! 对选择器 .a .b 中的 CSS 规则来说,如果匹配 .a 的元素包含一个递归子组件,则所有的子组件中的 .b 都将被这个规则匹配。

需要研读的文章:

2.深度作用选择器

如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> 操作符:

<style scoped>
.a >>> .b {
     
      /* ... */ }
</style>

上述代码将会编译成:

.a[data-v-f3f3eg9] .b { /* ... */ }

有些像 Sass 之类的预处理器无法正确解析 >>>。这种情况下你可以使用 /deep/::v-deep 操作符取而代之——两者都是 >>> 的别名,同样可以正常工作。

二:常见问题解决

1.修改页面保存后页面不自动刷新,只能手动刷新的问题

  1. 在项目根目录下,找到名为vue.config.js的文件,没有的话就新建一个;
  2. devServeropen设置为 tue,如下:
module.exports = {
    
    
    devServer : {
    
    
        hot:true,
        open : true,
        port : 8080,
        host : "0.0.0.0"
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45844049/article/details/109597837