首页 > 其他分享 >post-css/less/sass样式嵌套与命令之"&"符号—BEM

post-css/less/sass样式嵌套与命令之"&"符号—BEM

时间:2023-04-09 17:14:17浏览次数:64  
标签:sass less color li -- andy post divider 选择器

看了《 less 的 & 详解 https://www.jianshu.com/p/127b0974cfc3》,对于此文再做一别补充

常见用法:

直接嵌套写法

.a{
  color:red;
  .b{
      color:blue;
  }
}

这一类是最常见的

 

这个一类是我们日常所常见的

&的高级用法

作为内层选择器表示对父选择器的引用

父选择器运算符 & 的作用,就是让当前的选择器和父级选择器,按照特定的规则进行连接。它有多种用途,比如创建重复的类名:

.button {
  &-ok {
    background-image: url("ok.png");
  }
  &-cancel {
    background-image: url("cancel.png");
  }
  &-custom {
    background-image: url("custom.png");
  }
}

输出代码

.button-ok {
  background-image: url("ok.png");
}
.button-cancel {
  background-image: url("cancel.png");
}
.button-custom {
  background-image: url("custom.png");
}

 

改变输出顺序-反转嵌套的顺序

将 & 放在一个选择器的后面,来改变选择器的顺序,将当前选择器排列到最前面。如:

.demo-title {
  .demo & {
    font-size: 20px;
  }}

输出

.demo .demo-title {
  font-size: 20px;
}

 

借代父选择器

简单的

a { color:#000;
    &:hover {
        text-decoration:none;
    }
    &:focus {
        color:#999;
    }
}

这个数据就不用多说了吧

.link {
  & + & {
    color: red;
  }
  & & {
    color: green;
  }
  && {
    color: blue;
  }
  &, &ish {
    color: cyan;
  }
}

输出

.link + .link {
  color: red;
}
.link .link {
  color: green;
}
.link.link {
  color: blue;
}
.link, .linkish {
  color: cyan;
}

需要注意的是所有的父选择器,而不是仅仅重复最近的祖先选择器。请看以下例子:

.grand {
  .parent {
    & > & {
      color: red;
    }
    & & {
      color: green;
    }
    && {
      color: blue;
    }
    &, &ish {
      color: cyan;
    }
  }
}

输出

grand .parent > .grand .parent {
  color: red;
}
.grand .parent .grand .parent {
  color: green;
}
.grand .parent.grand .parent {
  color: blue;
}
.grand .parent,
.grand .parentish {
  color: cyan;
}

 

用在选择器中的&还可以反转嵌套的顺序并且可以应用到多个类名上。

.meng, .long {
    div & {
        color: black;
    }
    & + & {
        color: red;
    }
    & ~ & {
        color: red;
    }
}

编译后代码

div .meng,
div .long {
  color: black;
}
.meng + .meng,
.meng + .long,
.long + .meng,
.long + .long {
  color: red;
}
.meng ~ .meng,
.meng ~ .long,
.long ~ .meng,
.long ~ .long {
  color: red;
}

将 & 用在一个使用逗号分隔的选择器列表中,可以产生列表中所有选择器的所有可能的排列,这被称作组合爆炸。如:

p, a, ul, li {
  border-top: 2px dotted #366;
  & + & {
    border-top: 0;
  }
}

述列表中有 4 个选择器,列表中所有选择器的所有可能的排列,将有 16 种可能。编译后的CSS代码为:

p,
a,
ul,
li {
  border-top: 2px dotted #366;
}
p + p,
p + a,
p + ul,
p + li,
a + p,
a + a,
a + ul,
a + li,
ul + p,
ul + a,
ul + ul,
ul + li,
li + p,
li + a,
li + ul,
li + li {
  border-top: 0;
}

 

BEM 的命名规范如下:

/* 块即是通常所说的 Web 应用开发中的组件或模块。每个块在逻辑上和功能上都是相互独立的。 */
.block {
}

/* 元素是块中的组成部分。元素不能离开块来使用。BEM 不推荐在元素中嵌套其他元素。 */
.block__element {
}

/* 修饰符用来定义块或元素的外观和行为。同样的块在应用不同的修饰符之后,会有不同的外观 */
.block--modifier {
}

通过 bem 的命名方式,可以让我们的 css 代码层次结构清晰,通过严格的命名也可以解决命名冲突的问题,但也不能完全避免,毕竟只是一个命名约束,不按规范写照样能运行。

 

 

实际项目,自己定好规则即可

@bk-prefix: andy;
.@{bk-prefix}-divider { //.andy--divider
  &--info{ // .andy--divider--info{
    &-left{ // .andy--divider--info-left{
      
    }
  }
  &_vertical{ // .andy--divider_vertical{
    
  }
  &_horizontal{ // .andy--divider_horizontal{
    
  }
  .andy-divider-horizontal {  
    &-left { // .andy--divider_horizontal   .andy--divider--info-left{
      left: 2em;
    }

    &-right { // .andy--divider_horizontal   .andy--divider--info-right{
      right: 2em;
    }
  }

  .andy-divider-vertical & { // .andy--divider_vertical   .andy--divider--infol{
    padding: 20px 0;
  }
  
  
}

 

 

 

参考文章:

LESS详解之嵌套(&) https://blog.csdn.net/lee_magnum/article/details/12950407

 


转载本站文章《post-css/less/sass样式嵌套与命令之"&"符号—BEM》,
请注明出处:https://www.zhoulujun.cn/html/webfront/style/postCss/2019_1220_8684.html

标签:sass,less,color,li,--,andy,post,divider,选择器
From: https://www.cnblogs.com/zhoulujun/p/17300580.html

相关文章

  • Postman基本使用
    一、Postman入门1、postman是一款接口测试工具,也支持调试。(支持MAC、Windows、Linux)2、使用:1、先创建工作台,点击Workspaces,创建工作台,相当于一个项目的总文件2、再创建用例集3、在用例集旁边三个小点,点击添加请求  4、发送......
  • 关于在执行 SAP ERP MM 模块 Post Goods Issue 时修改 Material Cost 的讨论
    我的知识星球里有朋友向我提问:MaterialPGI(601movement)willcalculatethematerialcostfrommaterialmasterdata.Myquestionis:isthereanywaystochangethematerialcostwhenPGI?(Exceptenhancement)在SAPERPMM模块中,MaterialPostGoodsIssue(PGI......
  • COMP3311 PostgreSQL 数据库写法
    COMP331123T1Assignment2Python,PostgreSQL,psycopg2DatabaseSystemsLastupdated:Thursday6thApril9:06amMostrecentchangesareshowninred...olderchangesareshowninbrown.[AssignmentSpec][DatabaseDesign][Examples][Testing][Submitting][F......
  • 20230408---pg_dump: [归档 (db)] 与数据库 "xxx" 联接失败: 致命错误: 对用户"postg
    pg_dump:[归档(db)]与数据库"wpfc"联接失败:致命错误:  对用户"postgres"的对等认证失败 不修改pg_hba.conf的情况下进入postgres用户执行 cd/homemkdirpostgreschown-Rpostgres:postgres/home/postgres/chmod760/home/postgres/supostgrespg_dump-U......
  • 在 PostgreSQL 中使用 EXCLUDE 值进行 Upsert(重复更新时插入、合并)
    上次,我们读到了如何在PostgreSQL中使用 UPSERT。在快速回顾中,UPSERT 是 INSERTONDUPLICATEUPDATE 的缩写,如果它们与以前的条目不匹配,则倾向于将 INSERT 值插入表中。如果有,它们会自动更新。PostgreSQL中的 EXCLUDED 是什么EXCLUDED 是DBMS给一个特殊表的名称,......
  • Mac Apple 芯片运行 Vue 项目中 node-sass 转为 sass 遇到的问题记录,node-sass 替换成
    背景:前段时间因为某些原因将window笔记本换成MacM1pro,然后运行项目的时候发现高于node12版本的项目中不支持node-sass。记录下解决相关问题之后的记录......
  • bindless
    https://alextardif.com/Bindless.htmlBindingBindlesslyOverviewIfyou'vespenttimelearningnewerAPIslikeD3D12andVulkan,chancesareyou'vecomeacrosstheterm"bindless"withregardstobindingresourcesforshaders.Mostcom......
  • postman安装报错System.IO.DirectoryNotFoundException: 未能找到路径
    报这个错误   解决方案:1.在C:\Users\Administrator\AppData\Local\Postman\packages目录下找到Postman-8.0.8-full.nupkg文件,更名为Postman-8.0.8-full.zip,并解压到当前文件夹,如下图:  2.删除桌面postman快捷图标,发送C:\Users\Administrator\AppData\Local\Postman......
  • unity xorpay使用HTTP中post方式请求调用接口
    结合:https://www.cnblogs.com/guangzhiruijie/p/16985533.htmlunity自带的UnityWebRequest提供了构成HTTP请求和处理HTTP响应。构造函数:publicUnityWebRequest();publicUnityWebRequest(Uriuri);publicUnityWebRequest(stringurl);publicUnityWebRequest(Uriuri,......
  • UnityWebRequest-与后台数据传输Get/Post请求
    现在越来越多的项目都要用到登录、成绩上传等功能,涉及到Unity与后台接口之前调用与发送,下面着重介绍Unity自带的Http请求,包含Get/Post请求(表单、json、有头文件的请求。)一、Get请求直接填入接口地址,即可接收后台返回的json数据,新手在这里可能有点懵,不知道接口是什么意思,这里接口......