bem命名_快速提示:BEM命名和WordPress导航过滤器

bem命名

维护CSS非常困难,尤其是在与团队合作的大型项目中。 命名约定可以帮助您CSS更具可读性,更易于维护。 在此快速提示中,我们将研究如何在WordPress中使用BEM(块元素修饰符)命名方法。

诸如WordPress之类的内容管理系统会在前端标记中输出默认类。 在WordPress中,有很多过滤器可以修改这些输出的类。

如果您想直接研究代码,这是我的一个示例主题 。 过滤器可以在inc / functions-filters.php文件中找到

什么是BEM?

BEM代表块元素修改器。

“ BEM是一种方法,可以帮助您在前端开发中创建可重用的组件和代码共享。”

我将以导航标记为例:

  • Block是一个独立的实体,其本身具有意义。
    • .menu { ... }
  • 元素是块的一部分,并在语义上与其块相关。
    • .menu__items { ... }
    • .menu__item { ... }
    • .menu__anchor { ... }
  • 修改器更改块或元素的外观或行为。
    • .menu--primary { ... }
    • .menu__anchor--button { ... }

完整的导航标记可能如下所示:

<nav class="menu menu--primary">
  <ul class="menu__items menu__items--primary">
     <li class="menu__item"><a class="menu__anchor">Link text</a></li>
     <li class="menu__item"><a class="menu__anchor">Link text</a></li>
     <li class="menu__item"><a class="menu__anchor">Link text</a></li>
     <li class="menu__item"><a class="menu__anchor menu__anchor--button">Link text</a></li>
  </ul>
</nav>

诸如BEM之类的命名约定使您的SASS和CSS具有较低的特异性(这总是很好!)。

在SASS中,您可以按照以下方式设置示例的样式:

.menu {
  ...
  
  &__items {
     ...
  }
  
  &__item {
     ...
  }
  
  &__anchor {
     ...
  }
  
  &__anchor--button {
     ...
  }
}

编译后CSS如下所示:

.menu {
  ...
}

menu__items {
  …
}

menu__item {
  …
}

menu__anchor {
  …
}

menu__anchor--button {
  …
}

但是,我们如何改变WordPress中使用的导航类?

使用WordPress过滤器更改导航类

使用WordPress的内置函数wp_nav_menu() ,您可以指定<nav><ul>元素的类。 例如:

<nav class="menu menu--primary">

<?php
  wp_nav_menu( array(
      'theme_location' => 'primary',
      'container'          => '',
      'menu_class'      => 'menu__items menu__items--primary',
  ) );
?>

</nav>

请注意用于将自定义类添加到<ul>元素的menu_class参数。 WordPress还为<li><a>元素提供了方便的过滤器:

使用nav_menu_css_class过滤器

在此示例中,我们从菜单项的<li>元素中重置所有默认类,并添加我们自己的自定义类。 让我们通过将以下过滤器插入我们的functions.php中,添加名为menu__item的示例类:

function bemit_nav_menu_css_class( $classes, $item, $args, $depth ) {

  // Reset all default classes and start adding custom classes to array.
  $_classes = [ 'menu__item' ];

  // Return custom classes.
  return $_classes;

}

add_filter( 'nav_menu_css_class', 'bemit_nav_menu_css_class', 10, 4 );

您是否注意到有四个参数? 让我们添加一个menu__item--primary修饰符类,其中primary是主题位置。 为此,我们可以使用$args参数添加主题位置。 现在我们的过滤器看起来像这样:

function bemit_nav_menu_css_class( $classes, $item, $args, $depth ) {

  // Reset all default classes and start adding custom classes to array.
  $_classes = [ 'menu__item' ];

  // Get theme location, fallback for `default`.
  $theme_location = $args->theme_location ? $args->theme_location : 'default';

   // Add theme location class.
  $_classes[] = 'menu__item--' . $theme_location;

  // Return custom classes.
  return $_classes;

}

add_filter( 'nav_menu_css_class', 'bemit_nav_menu_css_class', 10, 4 );

完整的代码示例可inc / functions-filters.php文件的 示例主题找到

使用nav_menu_link_attributes过滤器

让我们将示例类menu__anchor添加到每个菜单项的<a>元素中。

function bemit_nav_menu_link_attributes( $atts, $item, $args, $depth ) {

  // Start adding custom classes.
  $atts['class'] = 'menu__anchor';

  return $atts;
}

add_filter( 'nav_menu_link_attributes', 'bemit_nav_menu_link_attributes', 10, 4 );

通过菜单生成器添加类

有时,我们从菜单构建器UI将自定义类添加到菜单项的<li>元素中。

为了保持CSS平,让我们一加menu__anchor--button类的<a>其中元素button类是存在:

function bemit_nav_menu_link_attributes( $atts, $item, $args, $depth ) {

  // Start adding custom classes.
  $atts['class'] = 'menu__anchor';

  // Add `menu__anchor--button` when there is `button` class in `<li>` element.
  if ( in_array( 'button', $item->classes, true ) ) {

       $atts['class'] .= ' menu__anchor--button';

   }

return $atts;

}

add_filter( 'nav_menu_link_attributes', 'bemit_nav_menu_link_attributes', 10, 4 );

现在,我们可以使用来直接定位一级CSS。 menu__anchor--button{ ... } 。 在我的演示中,您将看到一个菜单样式的按钮,其目标是无需深入研究兔子的专一性。

子页面导航

如果您使用wp_list_pages()来获取子页面,则可以使用类似的过滤器:

在演示中,有一个bemit_sub_pages_navigation()函数,该函数在侧栏中列出了子页面。 从演示站点中查看最终结果

结论

如此看来,如果您进行较小的更改,则可能不需要Custom Walker进行导航。 周围有很多过滤器。

话虽如此,并不是所有的标记都易于修改。 例如,诸如the_posts_pagination()类的分页功能目前无法提供良好的过滤器。 但这是另一个完整的教程主题。

我希望您发现有关导航过滤器的快速提示有用!

翻译自: https://webdesign.tutsplus.com/tutorials/quick-tip-bem-naming-and-wordpress-filters-for-navigation--cms-31268

bem命名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值