首页 > 其他分享 >css样式穿透是什么?以及常用的几种方式?

css样式穿透是什么?以及常用的几种方式?

时间:2023-02-17 11:55:44浏览次数:55  
标签:语法 样式 deep 穿透 组件 css

1.什么是样式穿透?

  当我们在vue项目中引用到第三方组件时,比如element-ui,常常需要更改某些元素的样式,但如果使用常规的css样式覆盖的方式是经常无效的,那么我们就要用到“样式穿透”的方法。

2.它生效的原理是什么?
在一个组件中,我们定义组件样式一般写在页面的最下方,以style包裹

<style>
    .div{
        
    }
</style>

为了不污染全局样式,我们在style上加一个scoped修饰符,这个样式就只在当前组件的范围内有效

<style scoped>
    .div{
        
    }
</style>

但这是如何作到在当前组件范围内有效的呢?我们打开F12,查看一下元素的DOM结构就可以看出端倪:

 

 在每个dom元素上,有一个data-v-xxxxxxxx的标识符,这个标识符就是保证scoped有效的根本!我们定位到button上,查看css样式:

 

 

我们看到元素后面被加上了[data-v-xxxxxxxx]属性,这也就是CSS的属性选择器,只有拥有这个属性的元素或类才会应用此样式。每个组件下[data-v-xxxxxxxx]这个id值是一致的,所以限制了其作用范围。

这个方法是基于PostCss的,关于PostCss可以看其官网的介绍,这里就不多讲了。PostCss官网

清楚了这个原理之后,我们就可以解释为什么很多第三方组件引入进来,通过常规的css样式覆盖是无效的,因为该组件是scoped,父组件是触及不到其内部的样式的!

那我们要是必须要改变第三方组件的样式要怎么办呢?这里就要说“样式穿透”的方法了。

所谓样式穿透,就是在父级组件中强制去修改子级组件的内部样式,注意这里的父子层次并不一定是一级,可能是很多级。

具体要怎么作呢?按不同的css的渲染器写法也是不同的。

3.不同的css渲染器中的样式穿透写法?

1.普通的css语法:

在要修改的样式前添加>>>符号,实际上>>> ::v-deep /deep/三者都可用
.wrapper >>> .el-card__header{
    border:none;
}

2.scss语法:

在要修改的样式前添加 ::v-deep ,实际上/deep/也可用,但是在vue3中可能会报错
::v-deep .el-card__header{
    border:none;
}

3.sass语法/less语法 :

在要修改的样式前添加::v-deep ,/deep/也是可用的
.wrap /deep/ .el-card__header{
 
    border:none;
}

总的来说,::v-deep适应性更好,更多地使用。

备注:为啥要有这三种不同的写法??因为不同的编译解析器识别的语法不同,写错会报错。

标签:语法,样式,deep,穿透,组件,css
From: https://www.cnblogs.com/heibaiqi/p/17129657.html

相关文章

  • VSCode Markdown preview enhanced 配置中文字体, 自定义css的方法
    在Ctrl+Shift+P命令菜单中选择CustomizeCSS这是我基于SolarizedLight的配置文件注意,只需要在系统中(我的是Win10)安装思源宋体CNMedium,在系统的字体当中找到它......
  • CSS定位position总结(超详细哦!)
    文章目录前言一、定位(position)介绍1、为什么使用定位2、定位组成二、定位模式(position)1、边偏移(方位名词)2、定位模式介绍1.1静态定位(static)-了解1.2相对定位(......
  • CSS 之 z-index 属性详解
    一、简介本文主要是对z-index属性进行详细的讲解,包括其使用场景、属性效果、适用范围等等。本博客的所有代码执行的浏览器环境,都是以Chrome浏览器为准。1、属性作用z-ind......
  • 2023 Awesome CSS Frameworks All In One
    2023AwesomeCSSFrameworksAllInOne(......
  • CSS 中的 BFC 是什么,有什么作用?
    BFC,即“块级格式化上下文”(BlockFormattingContext),是CSS中一个重要的概念,它指的是一个独立的渲染区域,让块级盒子在布局时遵循一些特定的规则。BFC的存在使得我们可以......
  • 使用 html2Canvas 与 JsPDF 生成海报和pdf文件下载等业务,解决pdf分页样式问题
    需求场景吧页面元素内容转成图片,生成一个海报保存或者上传服务器当前元素内容生成一个pdf文件完成下载到客户端,并且上传到服务器1.开发前的准备//元素转图片npm......
  • Scoped方法(防止样式名称冲突)
    App.vue<template><div><Student/><School></School></div></template><!--1.解决标签名称一样,引起样式冲突问题写法:1.<stylesco......
  • [10] 缓存穿透&击穿&雪崩&过期
    Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。......
  • markdown 样式
    一级标题#二级标题##三级标题###字体helloworld、helloworldhelloworld引用(>空格名人说过: 分割线图片  超链接名字 列表Abhowto......
  • Web前端CSS清除浮动的5种方法
     在移动端清除浮动布局,常用的5种方法:使用清除浮动的类;使用overflow属性;使用 flex 布局;使用grid 布局;使用 table 布局。根据实际情况选择适合的方法,需要注......