:deep(){} 样式穿透不生效问题解决方案

在我们写vue的项目的时候,可能会遇到这种情况,父子组件,在父组件中使用了样式穿透给子组件的类添加样式,结果失败了。比如下面这种情况。

父组件

javascript 复制代码
<template>
  <p>我是父组件</p>
  <Son />
</template>

<script setup>
import Son from "./components/son.vue"

</script>

<style scoped>
p{
  color: red;
}
:deep(.title){
  color: blue;
}

</style>

子组件

javascript 复制代码
<template>
  <p>11111</p>
  <p class="title">222222</p>
  <p>3333333</p>
</template>
<script></script>


<style scoped>
</style>

这时候会发现 我们的222应该是样式穿透赋予了蓝色的样式,但是却没有生效,这是为什么呢?

因为我们在使用scoped属性的时候 就相当于给这个vue文件里面的第一个标签加了一个 根 然后 默认使用了一个 子级样式选择器 来处理样式。我们可以检查页面。

我们会发现scoped这个属性其实就是给父组件能够解析的标签上加了一个data-v-...的属性,在这个代码中也就是第一个p标签添加了一个 data-v-...的属性,下面的son标签他没有解析。在这个时候,下面的样式都默认在前面加了一个data-v-。。。的选择器,以至于路过.title的时候,浏览器没有找到 data-v-.....下面的title 以至于我们真正的title盒子没有得到它该有的样式。

那么我们如何解决这个问题呢?

解决

其实当发现问题出现的原因以后,解决办法也随之而来。我们只用在最外层套上一个大盒子,让他得到这个样式就完事了。

javascript 复制代码
<template>
  <div>
    <p>我是父组件</p>
    <Son />
  </div>
</template>

我们也可以单独加在他解析不了的标签上,也就是我们的son标签。

javascript 复制代码
<template>
  <p>我是父组件</p>
  <div>
    <Son />
  </div>
</template>
相关推荐
JIngJaneIL7 分钟前
基于Java+ vueOA工程项目管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
测试人社区-小明9 分钟前
从前端体验到后端架构:Airbnb全栈SDET面试深度解析
前端·网络·人工智能·面试·职场和发展·架构·自动化
李少兄10 分钟前
前端开发中的 transform、translate 与 transition
前端·css
蓝鲸屿12 分钟前
JS基础第九天——对象(2)+Random
开发语言·前端·javascript
全栈练习生13 分钟前
ESModule的工作原理是什么
前端
爱看书的小沐22 分钟前
【小沐学WebGIS】基于Three.JS绘制二三维地图地球晨昏效果(WebGL / vue / react )
javascript·vue.js·gis·webgl·three.js·opengl·晨昏线
William数据分析25 分钟前
JavaScript 语法零基础入门:从变量到异步(附 Python 语法对比)
开发语言·javascript·python
疯狂的沙粒32 分钟前
Vue 前端大屏做多端屏幕适配时,如何让其自动适配多种不同尺寸的屏幕?
前端·javascript·vue.js
范小多35 分钟前
24小时学会Python Visual code +Python Playwright通过谷歌浏览器取控件元素(连载、十一)
服务器·前端·python
ooolmf36 分钟前
matlab2024读取温度01
java·前端·javascript