前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用BEM命名规范来组织CSS代码

使用BEM命名规范来组织CSS代码

作者头像
书童小二
发布于 2018-09-03 11:34:20
发布于 2018-09-03 11:34:20
1K00
代码可运行
举报
文章被收录于专栏:前端儿前端儿
运行总次数:0
代码可运行

BEM 是 Block(块) Element(元素) Modifier(修饰器)的简称 使用BEM规范来命名CSS,组织HTML中选择器的结构,利于CSS代码的维护,使得代码结构更清晰(弊端主要是名字会稍长)

如何使用BEM

  1. 一个独立的(语义上或视觉上),可以复用而不依赖其它组件的部分,可作为一个块(Block)
  2. 属于块的某部分,可作为一个元素(Element)
  3. 用于修饰块或元素,体现出外形行为状态等特征的,可作为一个修饰器(Modifier)

在本规范中,以双下划线 __ 来作为块和元素的间隔,以单下划线 _ 来作为块和修饰器 或 元素和修饰器 的间隔,以中划线 - 来作为 块|元素|修饰器 名称中多个单词的间隔

保证各个部分只有一级 B__E_M  ,修饰器需要和对应的块或元素一起使用,避免单独使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 某个块 -->
<form class="search-form">
    <!-- 某个元素 -->
    <div class="search-form__content-left">
        <!-- 错误:不能出现多个元素 -->
        <h2 class="search-form__content-left__h2">标题</h2>
        <!-- 某个元素,虽然是子集,保证了只有一级元素 -->
        <input class="search-form__input">
        <!-- 某个元素,加上了hover修饰器 -->
        <button class="search-form__button search-form__button_hover">搜索</button>
        <button class="search-form__button-set search-form__button-set_hover">搜索1</button>
        <!-- 错误:不能单独使用lg修饰器 -->
        <button class="search-form__button_lg">搜索</button>
         
        <!-- 块中可嵌套着另一个块 -->
        <p class="my-img">
            <img class="my-img__logo" src="abc.png" alt="image" title="image">
        </p>
         
    </div>
</form>
 
<div class="search-result"></div>

在样式文件中,仅以类名作为选择器,不使用ID或标签名来约束选择器,且CSS(或者SCSS编译后的CSS)中的选择器嵌套不超过2层,增加效率和复用性,减少选择器之间的耦合度

比较常见的嵌套情景:需要通过块状态对内部元素进行调整时

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.search-form {
    position: relative;
}
 
.search-form__input {
    font-size: 12px;
}
 
.search-form__button_hover {}
 
/* 避免:避免使用不必要的嵌套(此处只是简单的嵌套,没有必要) */
.search-form__content-left .search-form__input {}
 
/* 稍好的嵌套(此处是在块的theme1修饰器下的子元素,某些时候有必要) */
.search-form_theme1 .search-form__input {}
 
/* 错误:使用了标签 */
button.search-form__button {}
.search-form button {}

而在SASS文件中,也需要注意嵌套层次的意义,尽量按照 BEM三层来

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 避免这样做 .search 不是一个独立的块 */
.search {
    /* 应该把这个块提取出来 */
    &-form {
        &__button {
            &_hover {}
             
            /* 应该把这个元素提取出来 */
            &-set {
                &_hover {}
            }
        }  
    }
 
    &-result {
         
    }
}
 
/* 建议这样,按照各级区分出来 */
.search-form {
    &__button {
        &_hover {}
    }
     
    &_button-set {
        &_hover {}
    }
}
 
.search-result {
 
}
 
 
/* 对于嵌套在块中的块,如果非常有必要,可以嵌套写样式 */
.search-form {
    .my-img {
        &__logo {}
    }
}
/* 但一般来说,不建议,因为这破坏了块的独立性。可转换成设置对应的 元素来表现,如 */
.search-form {}
.my-img {
    &__search-form-logo {}
}

BEM 规范虽然结构比较清晰,但有时候会产生代码冗余。

为避免写太多重复性的代码,我们要学会善于利用预编译语言的(适当地使用 @include @extend 等)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
低版本向日葵本机识别码和验证码提取
乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
乌鸦安全
2022/08/11
3.4K0
低版本向日葵本机识别码和验证码提取
某远控软件渗透测试辅助工具/使用
sunflower是当时研究某款远程控制软件时写的一个可用于渗透测试的辅助小工具,利用这个工具我们可获取目标主机的向日葵版本(新/旧版、安装/绿色/简约版),以及读取对应版本的配置文件或注册表中存储的识别码、验证码和历史连接记录等信息,支持自定义安装路径。可参考之前写的这篇文章:3.10 向日葵远控提权
潇湘信安
2022/09/22
9990
某远控软件渗透测试辅助工具/使用
内网渗透|内网远程控制总结
前言 在内网渗透过程中,会碰到远程控制soft或者其他,这里针对远程控制软件做如下总结。 远程控制软件 向日葵篇 向日葵查看版本 向日葵(可以攻击) 针对向日葵的话其实如果有本地安装的话,是...
亿人安全
2023/08/10
7450
内网渗透|内网远程控制总结
攻防演练-某集团红队检测
链接:https://github.com/EdgeSecurityTeam/EHole
hyyrent
2022/12/26
7690
攻防演练-某集团红队检测
攻防 | 记一次打穿xx公司域控
https://www.freebuf.com/articles/web/373114.html
亿人安全
2023/08/10
4280
攻防 | 记一次打穿xx公司域控
攻防|记一次攻防演练实战总结
https://hunter.qianxin.com/ https://fofa.info/ https://quake.360.cn/
亿人安全
2022/12/22
1.7K0
攻防|记一次攻防演练实战总结
攻防|记一次教育行业渗透打点
在文件中找到1400多名学生的敏感信息文件,其中存在手机号、身份证号、学号,可以组合密码本进行统一身份认证系统的爆破登录,默认密码为身份证后六位
亿人安全
2023/09/15
1.4K0
攻防|记一次教育行业渗透打点
向日葵命令执行漏洞复现
向日葵是一款免费的,集远程控制电脑手机、远程桌面连接、远程开机、远程管理、支持内网穿透的一体化远程控制管理工具软件。
LuckySec
2022/11/02
1.9K0
向日葵命令执行漏洞复现
某远控RCE绕过某数字的利用方式
群友在某次项目测试中遇到一个存在向日葵远程命令执行漏洞的IP,目标环境Windows2016+360+Wdf,由于存在360而无法通过向日葵漏洞利用工具执行命令进行下一步测试。
潇湘信安
2022/09/14
1.5K0
某远控RCE绕过某数字的利用方式
ToDesk软件在渗透测试中的应用
之前我也分享过一篇"ToDesk软件在权限提升中的应用",记录的是在权限提升场景下的利用方式。
潇湘信安
2022/09/22
3.6K0
ToDesk软件在渗透测试中的应用
读取向日葵绕360打内网
在某次演练打点信息收集的时候发现资产里面有某OA,正好上个月爆出了他的漏洞,具体看清水川崎师傅的《HVV行动之某OA流量应急》分析文章。
字节脉搏实验室
2021/07/09
1.5K0
内网渗透 | 最全的内网凭据密码收集方法和技巧总结
在攻防场景下,红队人员拿下一台终端或服务器后,第一步要做的往往就是信息收集,为最大化利用权限,扩大战果,密码抓取必不可少,这里针对常见应用软件和系统等密码抓取做了记录和总结,希望能帮助你作为参考。
HACK学习
2023/01/03
7.7K0
内网渗透 | 最全的内网凭据密码收集方法和技巧总结
解决 macOS 系统向日葵远程控制鼠标无法点击的问题
以前是使用 TeamViewer 远程,奈何被判断为商用,所以只能使用向日葵进行远程控制了
沈唁
2021/01/12
34.5K1
解决 macOS 系统向日葵远程控制鼠标无法点击的问题
向日葵RCE复现 | CNVD-2022-10270 CNVD-2022-03672
本文转载自助安社区(https://secself.com/),海量入门学习资料。
助安社区
2023/04/11
1.2K0
向日葵RCE复现 | CNVD-2022-10270 CNVD-2022-03672
多个黑产团伙利用向日葵远控软件RCE漏洞攻击传播
近日,腾讯安全威胁情报中心检测到有挖矿、远控黑产团伙利用向日葵远控软件RCE漏洞攻击企业主机和个人电脑,已有部分未修复漏洞的主机、个人电脑受害。攻击者利用漏洞入侵后可直接获得系统控制权,受害主机已被用于门罗币挖矿。
腾讯安全
2022/03/22
8.9K0
远控安全金标准,ToDesk、向日葵、网易UU安全功能盘点,是否能攻破防线
远程控制软件的兴起与普及,让跨设备办公、远程协作变得触手可及。只需一台设备、一组账号密码,便可随时随地访问另一端的设备。但另一方面,当你的屏幕画面、文件传输、个人信息在互联网上裸奔时,一次公共WiFi连接、一个第三方插件漏洞、甚至过度宽松的权限设置,都可能让你的私人电脑沦为数据泄露的"重灾区"。
中杯可乐多加冰
2025/05/06
2340
应急响应之远程软件日志分析
默认情况下todesk日志文件保存在安装目录同级目录Logs下,在4.7以前的版本中,目录下有以service为首的文件以及以client为首的文件。其中service文件表示是被别人远控的日志。client文件表示是远控别人的日志。在4.7后的版本含4.7中,目录下不再存在以client为首的文件。
FB客服
2023/08/08
2.5K0
应急响应之远程软件日志分析
低版本某远控RCE/LPE漏洞复现
之前刚发这篇文章不久就被要求删除了,最近官方应该也都修的差不多了,所以再重新发一遍,仅供参考!!!
潇湘信安
2022/09/22
6370
低版本某远控RCE/LPE漏洞复现
跨越距离,一键远控——向日葵远程控制
对于一个经常使用电脑学习/工作的人来说,每天都要坐在电脑前敲敲这个,点点那个,但是总有比较懒或者有其他事情要走开的时候,这个时候,你是选择硬撑到完成电脑上正在做的事情?还是选择抱着电脑开着热点随时移动呢?如果你遇到过上述烦恼,那从今天起,你就不需要再为这件事纠结了。因为今天,小代就要推荐一款适用于手机控制电脑,手机控制手机的神器软件——向日葵远程控制。 从今以后,只要你的电脑处于开机状态,就可以随时随地控制你的电脑进行操作,随时上传下载,随时开始暂停,随时修改PPT,随时 为。所。欲。为。 •可以在公众号后
课代表
2018/06/29
2.9K0
远程办公,其实很容易!
在互联网蓬勃发展的今天,远程办公是比不可少的一项技能,出差的时候,有个文件放在公司电脑了,PPT忘在家里电脑上了,怎么办?公司的网站只能内网访问,家里电脑做不了,还急急忙忙回公司?
简单并不简单
2019/07/05
1.6K0
相关推荐
低版本向日葵本机识别码和验证码提取
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档