首页 > 其他分享 >Vue2的/deep/深度选择器失效了?

Vue2的/deep/深度选择器失效了?

时间:2023-07-26 23:12:37浏览次数:45  
标签:Vue less deep loader Vue2 选择器

/deep/ 在 Vue2 样式中的问题。

太长不看:

不要在 Vue SFC 以外的地方使用/deep/。对于 Vue3 ,请使用最新的:deep()伪类选择器。

什么是/deep/

/deep/是 Vue2 中一个重要的样式选择器,可以用于选择封装好的组件内部的样式。

如果直接在 Vue 组件上设置 class 属性,该属性只附加于子组件的最外层 DOM ,无法深入选择。

Vue 在编译模板代码时,会将/deep/动态替换成[data-xxx-xxx]的形式,变成一个属性选择器,这个属性选择器是动态生成且唯一的,能够有效增加权重,并实现精确选择。

/deep/的由来

/deep/其实曾经是进入过提案的选择器,被称作 Shadow boundary-piercing combinators ,用来选择 web-components 中 shadow-root 里的样式。直到 2017 年才从 chrome 中移除。移除之后也不是完全没用了,而是退化成后代选择器(也就是说,还能被浏览器解析)。

考虑到 Vue2 设计发展的年代,引入 boundary-piercing 这个概念,并模仿选择器也是很合理的。Vue3 就完全拿掉了SFC CSS Features | Vue.js (vuejs.org)

/deep/失效的原因

Vue 能够编译/deep/选择器是因为 vue-loader 的工作:CSS 作用域 · vue-loader (vuejs.org)

而对于 less 而言,只会将这个选择器直接原样输出。对于大部分 Webpack 项目,less 文件一般通过 less-loader 加载,lessc 编译,传递给 css-loader,最后经由 style-loader 在 html 文件中添加 style 标签。style-loader - npm (npmjs.com)

在 89 版本以前的 chrome,可以识别 xxx /deep/ ooo,并解析为后代选择器(空格)。但 89 版本之后就完全不能解析这个选择器了,也就呈现出完全无效的情况。

总结

  1. Vue SFC 中/deep/没有问题,放心使用。反之,单独的 less/sass/css 文件坚决不要用;
  2. Vue2 项目尽早转向 Vue3 项目,和历史包袱说再见。

标签:Vue,less,deep,loader,Vue2,选择器
From: https://www.cnblogs.com/Against-perfect-cherry-blossom/p/17583762.html

相关文章

  • 用CSS样式 @keyframes、animation写一个旋转立体模型、动画模型,vue2
    需求:画一个正方体,让物体一直旋转环境:vue2、css效果:代码:模型1<template>2<div>3<!--旋转立体图-->4<divclass="cube">5<divclass="facefront"></div>6<divclass="faceba......
  • css3新特性笔记之“选择器” .
    http://www.blueidea.com/tech/web/2009/6930_2.asp选择器属性选择器   匹配包含以特定的值开头的属性的元素     匹配包含以特定的值结尾的属性的元素     匹配包含含有特定的值的属性的元素  (1)[att^="value"]匹配包含以特定的值开头的属性的元素(2)[att$......
  • 使用脚手架环境开发vue2项目
    一、检查node版本(1)有node.js(2)没有node.js安装地址:Node.js 二、使用npm,包管理工具,是node包管理和分发工具【需要配置仓库镜像地址,改为中国仓库镜像地址】1、查看当前镜像:npmgetregistry2、设置镜像地址的命令: 设置最新的国内淘宝镜像地址......
  • [爬虫]1.2.2 CSS选择器
    CSS(CascadingStyleSheets)是一种样式表语言,用于描述HTML元素的样式。CSS选择器是CSS规则的一部分,它决定了CSS规则应用于哪些元素。在网络爬虫的开发中,我们经常使用CSS选择器来定位和选取HTML元素。以下是一些常见的CSS选择器:1.元素选择器元素选择器选择所有给定的HTML元......
  • vue2-ace-editor基础配置
    简介Ace是一个用JavaScript编写的可嵌入代码编辑器。它与Sublime、Vim和TextMate等原生编辑器的功能和性能相匹配。它可以很容易地嵌入到任何网页和JavaScript应用程序中。Ace被维护为Cloud9IDE的主要编辑器,并且是MozillaSkywriter(Bespin)项目的继承者。快速开始......
  • Vue2语法知识总结
    下面总结Vue2的语法知识1、插值语法<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>Vue插值语法</title> <scripttype="text/javascript"src="../javascriptdemo/vue.js"></script> &......
  • 从vue2到vue3,自定义组件的v-model实现原理
    前言相信使用vue开发的同学应该都体会过v-model的便利,它可以非常方便地进行双向数据绑定,只要重新输入内容,视图就会立刻发生改变。本文将着重介绍如何在自定义组件当中使用v-model,以及在vue2和vue3中使用方式上的差异。概述v-model是一个语法糖,它在组件使用时相当于如下简写://......
  • element-ui 周、月、季、年的日期时间选择器
    日常做项目中经常会遇到根据周、月、季度、年的日期时间选择器,切换不同的时间时选择器也做出相对应的变化,并且获取相对的开始时间和结束时间。效果如下:  1.先创建子组件--季度的日期选择器 1<template>2<divclass="time_quarter">3<markstyle="posi......
  • vue组件封装 - 选择器远程搜索下拉列表
    <!--*component:人员选择-远程搜索下拉列表*time:2023/7/19*author:zx*使用方式*importPersonSelectfrom"@/components/Dialog/personSelect.vue";*components:{PersonSelect}*<person-selectv-model="test"/>--><......
  • bootstrap时间 选择器
    $('#dateFrom').datetimepicker({language:'zh-CN',format:'yyyy-mm-dd',//显示格式todayHighlight:1,//今天高亮minView:2,//设置只显示到月份startView:2,autoclose:true,//选择后自动关闭clearBtn:true,//清除按钮endDat......