热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

超越scss嵌套的vueelementui使用的css写法中自定义的atrule是怎么实现的

今天看element-ui的css文件时看到了非常牛逼的写css的方法,先贴下代码,下面是其中的一个collapse组件,只要看html的class和css的选择器就可以了html:123456789

今天看element-ui的css文件时看到了非常牛逼的写css的方法,先贴下代码,下面是其中的一个collapse组件,只要看html的class和css的选择器就可以了
html:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 


   


     

     


      {{title}}

   


   

     


       


         

       


     


   


 

css:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@component-namespace el {

  @b collapse {

    border: 1px solid var(--collapse-border-color);

    border-radius: var(--collapse-border-radius);

  }

  @b collapse-item {

    @e header {

      height: var(--collapse-header-height);

      line-height: @height;

      padding-left: 15px;

      background-color: var(--collapse-header-fill);

      color: var(--collapse-header-color);

      cursor: pointer;

      border-bottom: 1px solid var(--collapse-border-color);

      font-size: var(--collapse-header-size);



      @e arrow {

        margin-right: 8px;

        transition: transform .3s;

      }

    }



    @e wrap {

      will-change: height;

      background-color: var(--collapse-content-fill);

      overflow: hidden;

      box-sizing: border-box;

      border-bottom: 1px solid var(--collapse-border-color);

    }



    @e content {

      padding: 10px 15px;

      font-size: var(--collapse-content-size);

      color: var(--collapse-content-color);

      line-height: 1.769230769230769;

    }



    @when active {

      > .el-collapse-item__header {

        .el-collapse-item__header__arrow {

          transform: rotate(90deg);

        }

      }

    }



    &:last-child {

      margin-bottom: -1px;

    }

  }

}

编译后的css:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@charset "UTF-8";

.el-collapse{border:1px solid #dfe6ec;border-radius:0}



.el-collapse-item:last-child{margin-bottom:-1px}



.el-collapse-item.is-active>.el-collapse-item__header

.el-collapse-item__header__arrow{-ms-transform:rotate(90deg);transform:rotate(90deg)}



.el-collapse-item__header{height:43px;line-height:43px;padding-left:15px;background-color:#fff;color:#48576a;cursor:pointer;border-bottom:1px solid #dfe6ec;font-size:13px}



.el-collapse-item__header__arrow{margin-right:8px;transition:transform .3s}



.el-collapse-item__wrap{will-change:height;background-color:#fbfdff;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #dfe6ec}



.el-collapse-item__content{padding:10px 15px;font-size:13px;color:#1f2d3d;line-height:1.769230769230769}

element-ui 将像el-collapse-item这样的class根据连接符分成了3段,@b表示‘-’,@e表示‘_’,这和我一直用的scss相比,我觉得有两个优势

按el-collapse-item__header这个样式来说,用scss写的话,我会这样写,
html:

1
2
3


   



scss:

1
2
3
.el-collapse-item {

    .header {}

}

首先直接写header这种简单的样式可能会被全局的.header样式覆盖,导致莫名奇妙的bug
第二是嵌套深的话会提高样式权重,比较大的组件一不小就3.4层嵌套下去了,相比较没有嵌套的结构,渲染速度也较慢

感觉element-ui这样的写法完美解决了我之前的困扰,但是问题在于,我翻遍了css3也没找到这样的写法是怎么实现的,希望知道的大佬可以告诉我下,万分感谢。


推荐阅读
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文讨论了在dva中引入antd组件table时没有显示样式的问题。提供了.roadhogrc文件的配置,包括环境和import的设置。同时介绍了extraBabelPlugins和transform-runtime的使用方法,并解释了libraryName和css的含义。 ... [详细]
author-avatar
为爱进地狱天堂_954
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有