BEM规范

类型模式示例说明
.block.menu独立组件
元素.block__element.menu__item块的组成部分
修饰符.block--modifier.menu--dark块的状态/变体
带修饰符的元素.block__element--modifier.menu__item--active元素的状态/变体
比如:
z-button__element--disabled /*z-button"组件中的某个元素(element)在禁用状态下的样式*/

带 State 的 BEM 命名规范:
通常是动态的

.block[__element][--modifier][.is|has-state] 
/*eg:*/
<ul class="nav__dropdown is-open">

最佳实践

function __bem(
  prefixName: string,
  blockSuffix: string,
  element: string,
  modifier: string
) {
  let className = prefixName;

  if (blockSuffix) {
    className += `-${blockSuffix}`;
  }

  if (element) {
    className += `__${element}`;
  }

  if (modifier) {
    className += `--${modifier}`;
  }

  return className;
}

function createBEM(prefixName: string) {
  const b = (blockSuffix: string = "") =>
    __bem(prefixName, blockSuffix, "", "");
  const e = (element: string = "") =>
    element ? __bem(prefixName, "", element, "") : "";
  const m = (modifier: string = "") =>
    modifier ? __bem(prefixName, "", "", modifier) : "";
  const be = (blockSuffix: string, element: string) =>
    blockSuffix && element ? __bem(prefixName, blockSuffix, element, "") : "";
  const bm = (blockSuffix: string, modifier: string) =>
    blockSuffix && modifier ? __bem(prefixName, blockSuffix, "", modifier) : "";
  const em = (element: string, modifier: string) =>
    element && modifier ? __bem(prefixName, "", element, modifier) : "";
  const bem = (blockSuffix: string = '', element: string = '', modifier: string = '') =>
    blockSuffix && element && modifier
      ? __bem(prefixName, blockSuffix, element, modifier)
      : "";
  const is = (name: string,state: any) => (state ? `is-${name}` : ``);

  return {
    b,
    e,
    m,
    be,
    bm,
    em,
    bem,
    is
  };
}

export function createNamespace(name: string) {
  const prefixName = `z-${name}`;
  return createBEM(prefixName);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyt363045841

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值