【问题标题】:BEM: Is this the proper way to write BEM?BEM:这是编写 BEM 的正确方法吗?
【发布时间】:2017-03-19 20:17:07
【问题描述】:

刚开始为一个新项目学习 BEM。有人可以看看我是否使用下面的模板正确理解了 BEM 方法吗?我有点明白,但我觉得它可能会更好。

我的模板

 <div id="wrapper" class="content">
  <header>
    <div class="site-logo">
      <img src="path/to/logo.png" class="site-logo__main">
    </div>
    <div class="site-navigation">
      <nav class="main-menu">
        <ul class="list">
          <li class="list-item">
            <a href="" class="main-menu__active">Nav link</a>
          </li>
          <li class="list-item">
            <a href="">Nav link</a>
          </li>
        </ul>
      </nav>
    </div>
    <div class="header-avatar">
         <img src="path/to/logo.png" class="header-avatar__main">
    </div>
  </header>
  <main>
    <aside class="user-details">
      <ul class="list">
        <li class="list-item">
          <a href="" class="user-details__active">Nav link</a>
        </li>
        <li class="list-item">
          <a href="">Nav link</a>
        </li>
        </ul>
      <div class="sidebar-avatar">
        <img src="path/to/logo.png" class="user-details-avatar">
      </div>
    </aside>
    <section class="contact-us">
      <div class="container">
        <div class="row">
          <div class="contact-details">xxx</div>
          <div class="contact-image"></div>
        </div>
      </div>
    </section>
  </main>
  <footer>
    <div class="footer-avatar">xxx</div>
    <div class="copyright">xxx</div>
    <div class="footer-links">
                    <ul class="list">
          <li class="list-item">
            <a href="">Nav link</a>
          </li>
          <li class="list-item">
            <a href="">Nav link</a>
          </li>
        </ul>
    </div>
  </footer>
</div>

【问题讨论】:

    标签: css bem


    【解决方案1】:

    从 OO 的角度来看,这可能更有意义。

    <div id="wrapper">
        <header class="header">
            <div class="header__site-logo">
                <img src="path/to/logo.png">
            </div>
            <div class="header__site-navigation">
                <nav class="main-menu">
                    <ul class="main-menu__list list">
                        <li class="list-item">
                            <a href="" class="main-menu__link active">Nav link</a>
                        </li>
                        <li class="list-item">
                            <a href="" class="main-menu__link">Nav link</a>
                        </li>
                    </ul>
                </nav>
            </div>
            <div class="header__avatar">
                 <img src="path/to/logo.png">
            </div>
        </header>
        <main id="content">
            <aside class="user-details">
                <ul class="user-details__list list">
                    <li class="list-item">
                        <a href="" class="user-details__link active">Nav link</a>
                    </li>
                    <li class="list-item">
                        <a href="" class="user-details__link">Nav link</a>
                    </li>
                    </ul>
                <div class="user-details__avatar">
                    <img src="path/to/logo.png">
                </div>
            </aside>
            <section class="contact-us">
                <div class="container">
                    <div class="row">
                        <div class="contact-us__details">xxx</div>
                        <div class="contact-us__image"></div>
                    </div>
                </div>
            </section>
        </main>
        <footer class="footer">
            <div class="footer__avatar">xxx</div>
            <div class="footer__copyright">xxx</div>
            <div class="footer__links">
                <ul class="footer__list list">
                    <li class="list-item">
                        <a href="" class="footer__link">Nav link</a>
                    </li>
                    <li class="list-item">
                        <a href="" class="footer__link">Nav link</a>
                    </li>
                </ul>
            </div>
        </footer>
    </div>
    

    尝试将您的 DOM 想象成一组高级组件:

    wrapper div
      > header
        > main-menu
      > content
        > user-details
        > contact-us
      > footer
    

    将它们用作您的“块”,这意味着它们位于类名中的双下划线之前。

    对于每个块具有的每个组件,为该组件附加一个友好名称并将其用作类名。

    header
      > header__site-logo
      > header__site-navigation
      > header__avatar
    

    【讨论】:

    • 你可能不需要wrapper,因为从面向对象的角度来看它有点毫无意义。在这种情况下,很可能类似于 page__innerpage__layout
    • 非常感谢,我从中学到了很多!快速提问,我读到使用 BEM 以在项目中的任何地方重用组件的方式来考虑组件是一个好主意?因此,如果我想在页脚中使用主菜单,最好为列表或菜单项使用通用类吗?然后使用修饰符来改变样式?
    • 我使用#wrapper,因为我使用smoothstate.js 来控制页面动画:)
    • 视情况而定。如果页眉和页脚列表的外观和功能相同,则最好为它们使用泛型类。但是,如果它们看起来完全不同,最好将它们分成不同的元素/块。
    猜你喜欢
    • 2021-01-05
    • 2019-04-29
    • 2017-01-19
    • 2018-03-10
    • 1970-01-01
    • 2016-08-10
    • 2016-11-21
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多