BEM命名规范

一套规范的命名一般来说有两个好处,提高代码可读性和防止样式污染,什么是css样式污染,举个例子。

.base input {
  background:red;
}

或许你只是想给class='base’的某一个后代input元素添加一个样式,这样写一不小心就把所有的input元素背景都变成了红色。
当你的工程非常庞大的时候,这种情况就非常容易出现,BEM(block element modifier)规范就解决了这个问题。

BEM的基本规则如下:

当一个block或element或modifier包含多个单词时, 用一个中划线-链接,例如要表示一个搜索表单的block可以命名为.serach-form

block和element用双下划线__链接, 例如block名为search-form的一个子元素button,就可以命名为:search-form__button

element和modifier用双中划线–链接, 如表示按钮的不同状态,例如默认:el-button–default 成功:el-button–success

js控制样式时,css命名用is-开头,例如is-success、is-failed、is-disabled

所以讲了半天,什么是block什么是elelment呢。

1、block

block名描述功能 (“What is it?” — header or button), 不包含其状态 (“What does it look like?” — red or big)。
在block的命名上也要尽量语义化,例如footer、header、card等等(具体见附录)
block的名字如果比较长,也可以命名成带“-”的,例如“search-form”
他的命名上主要有以下几点要注意:1、负责描述功能,不应该包含状态。

/* correct */
.header {
​
}
​
/* wrong */
.header--select {
​
}

不影响自身布局,不包含具体的样式,也就是block里面不应该加样式。这样做的好处是当修改bolck的结构时不需要修改css。

/* correct */
.header {
​
}
​
/* wrong */
.header {
    margin-top: 50px;
}

不能使用元素选择器和ID选择器

/* correct */
.header {
​
}
​
/* wrong */
.header a {
    margin-top: 50px;
}

2、Element(.block__element)

元素(element)是块的子节点。为了表明某个东西是一个元素,你需要在块名后添加 __element。所以,如果你看到一个像那样的名字,比如 header__button ,你将立即知道 header 块中有一个 button元素。

<p class="header">
    <p class="header__body">
        <button class="header__button"></button>
    </p>
</p>

同时,她不能脱离Block父级单独使用

/* wrong */
<p>
    <p class="header__body">
        <button class="header__button"></button>
    </p>
</p>

3、Modifier(.block–modifier)

表示的是一个状态,或者说是一种修饰,是用双横杠分开的(为什么要用双横杠,是为了和前文说到的这种情况区分//当一个block、element或modifier很长,可以用单横杠“-”连接)
例如淘宝选择商品属性按钮,选中和没选中有两个状态,除了背景颜色和字体颜色没有其他不同的,这时候就定义两个这两个背景和字体颜色的样式就称作modifier。
在这里插入图片描述

.button--unselect{

}

.button--selected{

}

modifier也不能不能单独使用

/* wrong */
<p>
    <p>
        <button class="header__button--primary"></button>
        <button class="header__button--default"></button>
    </p>
</p>

附录

block命名参考

header内容content/container
footer导航nav
侧栏sidebar栏目column
页面外围控制整体布局宽度wrapper左右中left right center
登录条loginbar标志logo
广告banner页面主体main
热点hot新闻news
下载download子导航subnav
菜单menu子菜单submenu
搜索search友情链接friendlink
页脚footer版权copyright
滚动scroll内容content
标签tags文章列表list
提示信息msg小技巧tips
栏目标题title加入joinus
指南guide服务service
注册regsiter状态status
投票vote合作伙伴partner

· css命名参考-导航

导航nav主导航mainnav
子导航subnav顶导航topnav
边导航sidebar左导航leftsidebar
右导航rightsidebar菜单menu
子菜单submenu标题title

· css命名参考-功能

标志:logo注册:register
广告:banner登录条loginbart
登陆login搜索search
功能区:shop标题title
加入joinus状态status
按钮btn滚动scroll
标签页tab文章列表list
提示信息msg当前的current
小技巧tips图标:icon
注释note指南guild
服务service热点hot
新闻news下载download
投票vote合作伙伴partner
友情链接link版权copyright
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BEM命名法是一种用于HTML和CSS的命名约定,它的名称来自其三个部分:块(Block)、元素(Element)和修饰符(Modifier)。BEM的目标是创建具有高可重用性、易于理解和维护的代码。 下面是一个具体的例子,我们想要创建一个带有标题、列表和按钮的简单组件: ```html <div class="component"> <h2 class="component__title">Component Title</h2> <ul class="component__list"> <li class="component__list-item">Item 1</li> <li class="component__list-item">Item 2</li> <li class="component__list-item">Item 3</li> </ul> <button class="component__button component__button--disabled">Disabled Button</button> </div> ``` 在这个例子中,我们使用BEM命名法来命名我们的组件和组件内的元素和修饰符。以下是每个部分的解释: - 块(Block):`component`是我们的块。它表示整个组件。 - 元素(Element):`title`、`list`和`list-item`是我们的元素。它们是组件内部的子元素,与块相关联。 - 修饰符(Modifier):`button--disabled`是我们的修饰符。它表示一个特定的状态或变化,例如按钮的禁用状态。 使用BEM命名法的好处是,它可以帮助我们更清晰地组织和描述我们的代码。通过明确地命名块、元素和修饰符,我们可以更容易地理解代码的结构和意图。此外,由于BEM具有一致的命名规则,它也可以帮助团队协作开发,并提高代码的可重用性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值